Özellik ikonu

Worksheet_BeforeDoubleClick

İndirme izni yok

Genel Bakış

Worksheet_BeforeDoubleClick (Worksheet.BeforeDoubleClick), kullanıcı bir çalışma sayfasındaki hücreye çift tıkladığında, Excel varsayılan çift tıklama eylemini yapmadan önce tetiklenen sayfa olayıdır. Hangi hücreye tıklandığını Target ile öğrenir, Cancel parametresiyle hücrenin düzenleme moduna geçmesini engelleyebilirsiniz. Çift tıklamayla durum değiştirme, tarih atama, hesap çalıştırma ya da özel pencere açma gibi kısayollar kurmak için kullanılır.

Olay yordamı nereye yazılır​

Bu olay yordamı standart modüle değil, ilgili çalışma sayfasının kod modülüne yazılır. Sayfa sekmesine sağ tıklayın, Kod Görüntüle (View Code) komutunu seçin ve açılan sayfa modülüne yordamı yapıştırın. Yordam yalnızca o sayfadaki çift tıklamalara yanıt verir.

Tüm sayfalar için tek yerden yazmak isterseniz ThisWorkbook modülündeki Workbook_SheetBeforeDoubleClick olayını kullanın; bu olay ek olarak çift tıklanan sayfayı Sh parametresiyle bildirir.

Olayın çalışması için dosyanın makro destekli (.xlsm) kaydedilmiş ve makroların etkin olması gerekir. Excel'de olayı varsayılan olarak kendisi çağırdığı için yordamın adını ve parametrelerini değiştirmeyin; ad değişirse yordam olay olarak çalışmaz.

Söz dizimi​

Olayın tam imzası şöyledir:

VBA 3 satır
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ' Çift tıklamada yapılacak işlemler
End Sub

  • Target: Çift tıklanan hücreyi gösteren Range nesnesi; zorunludur. Satır ya da sütun başlığına çift tıklanırsa Target birden çok hücreyi kapsayabilir, bu nedenle Target.Cells.Count ile kontrol etmeniz önerilir.
  • Cancel: Boolean türünde, yordam çalışmaya başladığında False değerindedir. Yordam içinde True yaparsanız çift tıklamanın varsayılan eylemi (hücreyi düzenleme moduna almak) gerçekleşmez.

Yordam bir değer döndürmez. Hangi hücreye tıklandığını anlamak için Target.Address, Target.Row, Target.Column ya da Intersect işlevini kullanabilirsiniz.

Cancel ve Target ile çalışma​

Olayda en sık yapılan iş, belirli bir sütun veya aralıktaki çift tıklamaları yakalamaktır. Bunun için önce Target istediğiniz alanın dışındaysa Exit Sub ile yordamdan çıkın; böylece diğer hücrelerdeki çift tıklamalar normal çalışır.

İşinizi bitirdikten sonra Cancel = True yazmazsanız Excel hücreyi yine düzenleme moduna alır. Hücre değerini kendiniz değiştiriyorsanız çoğu zaman Cancel = True kullanmak istersiniz; aksi durumda hücrede imleç yanıp söner ve sonuç karışık görünür.

Yordam içinde hücre değeri değiştirmek Worksheet_Change olayını da tetikler. Bu olayı da kullanıyorsanız gereksiz tetiklenmeyi önlemek için Application.EnableEvents özelliğini geçici olarak False yapıp işiniz bitince mutlaka True'ya geri alın.

Sınamak için ortak yordam kullanma​

Çift tıklamayı kodla taklit etmek mümkün değildir; yordamı doğrudan çağırmak da olmaz, çünkü olay yordamı Private'tır. Bu sayfadaki örneklerde mantık, sayfa modülündeki bir Public işleve konmuştur; olay yordamı bu işlevi çağırıp sonucunu Cancel'a atar. Böylece aynı kod hem gerçek çift tıklamada hem de dışarıdan bir makroyla sınanabilir. Kendi çalışmalarınızda da uzun işlemleri ayrı bir yordama taşımak kodu sadeleştirir.

1. Çift tıklayarak görev durumunu değiştirme​

Görev listesinde Durum sütununa (C) çift tıklandığında hücre boşsa Tamam yazılsın, doluysa temizlensin ve hücre düzenleme moduna geçmesin. Kodu Görevler sayfasının kod modülüne (sayfa sekmesi > Kod Görüntüle) yapıştırın. Örnekte makro, C2 ve C4 hücrelerine çift tıklanmış gibi çalıştırılır.
VBA 24 satır
Option Explicit

' Gerçek çift tıklamada Excel bu olayı çağırır
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = DurumDegistir(Target)
End Sub

' Olayla aynı işi yapan ortak işlev; True dönerse çift tıklama işlenmiş demektir
Public Function DurumDegistir(ByVal Target As Range) As Boolean
    ' Birden çok hücre ya da Durum sütunu dışı ise bir şey yapma
    If Target.Cells.Count > 1 Then Exit Function
    If Target.Column <> 3 Then Exit Function
    If Target.Row < 2 Or Target.Row > 6 Then Exit Function

    ' Boşsa Tamam yaz, doluysa temizle
    If Target.Value = "" Then
        Target.Value = "Tamam"
    Else
        Target.ClearContents
    End If

    ' Hücre düzenleme moduna geçmesin
    DurumDegistir = True
End Function
Worksheet_BeforeDoubleClick
Formülünü incelemek için bir hücre seçin.
ABC
1GörevSorumluDurum
2Rapor hazırlamaAyşe DemirTamam
3Fatura kontrolüMehmet YıldızTamam
4Stok sayımıElif KayaTamam
5Sevkiyat planıHasan Çelik
6Müşteri aramasıZeynep Arslan
GörevlerExcelDepo v1.0.0
C2 ve C4 hücreleri boş olduğu için makro bu hücrelere sırasıyla Tamam ve Tamam yazdı. C3 hücresine çift tıklansaydı dolu olduğu için içeriği temizlenirdi. Durum sütunu dışındaki hücrelerde işlev hemen çıktığından Cancel False kalır ve Excel hücreleri her zamanki gibi düzenlemeye açar.

2. Ürün adına çift tıklayıp sipariş önerisi hesaplama​

Stok tablosunda ürün adına (A sütunu) çift tıklandığında, stok asgari düzeyin altındaysa asgari stokun iki katına tamamlayacak miktar Sipariş Önerisi sütununa (D) yazılsın; stok yeterliyse 0 yazılsın. Kodu Stok Önerisi sayfasının kod modülüne yapıştırın. Makro A2, A3 ve A5 hücrelerine çift tıklanmış gibi çalışır.
VBA 28 satır
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = SiparisOner(Target)
End Sub

Public Function SiparisOner(ByVal Target As Range) As Boolean
    Dim stok As Double
    Dim asgari As Double

    ' Yalnızca A2:A6 aralığındaki tek hücre işlenir
    If Target.Cells.Count > 1 Then Exit Function
    If Target.Column <> 1 Then Exit Function
    If Target.Row < 2 Or Target.Row > 6 Then Exit Function

    ' Aynı satırdaki stok (B) ve asgari stok (C) değerlerini oku
    stok = Target.Offset(0, 1).Value
    asgari = Target.Offset(0, 2).Value

    ' Sonucu aynı satırdaki D sütununa yaz
    If stok < asgari Then
        Target.Offset(0, 3).Value = asgari * 2 - stok
    Else
        Target.Offset(0, 3).Value = 0
    End If

    SiparisOner = True
End Function
Worksheet_BeforeDoubleClick
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünStokAsgari StokSipariş Önerisi
2Kalem1201000
3Defter3580125
4Dosya6060
5Klasör185082
6Zımba9040
Stok ÖnerisiExcelDepo v1.0.0
Kalem satırında stok asgari düzeyin üzerinde olduğu için D2 hücresine 0 yazıldı. Defter ürününde stok yetersiz olduğundan D3 hücresi 125 değerini aldı; Klasör için ise sonuç D5 hücresinde 82 olarak görünür. Çift tıklanmayan Dosya ve Zımba satırlarının D hücreleri boş kalır. Kod, Offset ile aynı satırdaki komşu hücrelere ulaşarak sütun harflerini sabit yazmadan çalışır.

3. Şehre çift tıklayıp şehir toplamını yazma​

Satış tablosunda şehir adına (B sütunu) çift tıklandığında o şehrin toplam satışı, aynı satırın Şehir Toplamı (D) hücresine yazılsın. Toplam, SumIf çalışma sayfası işleviyle hesaplanır. Kodu Şehir Toplamı sayfasının kod modülüne yapıştırın. Makro B2, B3 ve B5 hücrelerine çift tıklanmış gibi çalışır.
VBA 25 satır
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = SehirToplami(Target)
End Sub

Public Function SehirToplami(ByVal Target As Range) As Boolean
    Dim toplam As Double

    ' Yalnızca B2:B7 aralığındaki tek hücre işlenir
    If Target.Cells.Count > 1 Then Exit Function
    If Target.Column <> 2 Then Exit Function
    If Target.Row < 2 Or Target.Row > 7 Then Exit Function

    ' Tıklanan şehrin satışlarını topla
    toplam = Application.WorksheetFunction.SumIf(Me.Range("B2:B7"), Target.Value, Me.Range("C2:C7"))

    ' Sonucu iki sütun sağdaki hücreye yaz ve biçimlendir
    With Target.Offset(0, 2)
        .Value = toplam
        .NumberFormat = "#,##0.00"
    End With

    SehirToplami = True
End Function
Worksheet_BeforeDoubleClick
Formülünü incelemek için bir hücre seçin.
ABCD
1PersonelŞehirSatışŞehir Toplamı
2Ali Şahinİstanbul12.500,0036.600,00
3Burcu AydınAnkara9.800,0021.100,00
4Cem Koçİstanbul15.200,00
5Derya Erİzmir7.400,007.400,00
6Emre TanAnkara11.300,00
7Fatma Işıkİstanbul8.900,00
Şehir ToplamıExcelDepo v1.0.0
B2 hücresindeki İstanbul için D2 hücresine 36.600,00, B3 hücresindeki Ankara için D3 hücresine 21.100,00 yazıldı. B5 hücresindeki İzmir için D5 hücresi 7.400,00 değerini aldı. Kodda Me, kodun bulunduğu çalışma sayfasını belirtir; böylece aralıklar etkin sayfaya göre değil her zaman bu sayfaya göre okunur.

Kullanırken dikkat edin​

  • Cancel = True yazmayı unutmayın: Hücre değerini kendiniz değiştiriyorsanız yordamın sonunda Cancel = True yazın. Yazmazsanız Excel çift tıklamanın varsayılan eylemini de uygular ve hücre düzenleme moduna geçer; bu durumda kullanıcı yazdığınız değeri hemen düzenlenir halde görür.
  • Kapsamı daraltın: Olay sayfadaki her çift tıklamada çalışır. Yordamın başında Target.Column, Target.Row ya da Intersect ile yalnızca ilgilendiğiniz aralığı seçin ve diğer durumlarda Exit Sub ile çıkın; aksi halde kullanıcı başka hücreleri normal biçimde düzenleyemez ya da beklenmedik değişiklikler olur.
  • Birden çok hücre ve başlıklar: Satır ya da sütun başlığına çift tıklandığında Target birden çok hücreyi kapsayabilir. Target.Value gibi tek hücre varsayan kodlar bu durumda hata verir; bu yüzden Target.Cells.Count ile tek hücre olduğunu doğrulayın.
  • Olay yalnızca sayfa modülünde çalışır: Yordamı standart modüle yazarsanız Excel onu olay olarak tanımaz ve hiçbir şey olmaz. Yordam ilgili sayfanın kod modülünde, adı ve parametreleri tam olarak belirtildiği gibi yazılmış olmalıdır. Dosyayı makro içermeyen .xlsx olarak kaydederseniz kodlar silinir.
  • Değer yazmak başka olayları tetikler: Yordam içinde bir hücreye değer yazmak Worksheet_Change olayını tetikleyebilir. İki olayı birlikte kullanıyorsanız Application.EnableEvents = False ile olayları geçici olarak kapatın, işlem bitince True'ya döndürün. Hata olasılığında True'ya dönüşü garanti etmek için bir hata yakalama yapısı kullanın; aksi halde olaylar kapalı kalır.
  • İlgili konular:
    • Worksheet_BeforeRightClick: sağ tıklamadan önce çalışan sayfa olayı
    • Worksheet_SelectionChange: seçim değiştiğinde çalışan sayfa olayı
    • Worksheet_Change: hücre değeri değiştiğinde çalışan sayfa olayı
    • Workbook_SheetBeforeDoubleClick: çalışma kitabındaki tüm sayfalar için çift tıklama olayı
    • Application.EnableEvents: olayların çalışmasını açıp kapatan özellik
    • Intersect: iki aralığın kesişimini bulan yöntem
    • Range.Offset: bir hücreden satır ve sütun uzaklığıyla başka hücreye ulaşma
    • ETOPLA: koşula uyan değerleri toplayan çalışma sayfası işlevi (VBA'da WorksheetFunction.SumIf)
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
15
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst