Özellik ikonu

Workbook_SheetSelectionChange

İndirme izni yok

Genel Bakış

Workbook_SheetSelectionChange (Workbook.SheetSelectionChange event), açık çalışma kitabındaki herhangi bir çalışma sayfasında seçim değiştiğinde Excel tarafından otomatik tetiklenen kitap düzeyi olaydır. Her sayfaya ayrı ayrı kod yazmak yerine, tüm sayfalardaki hücre seçimlerini tek bir yordamdan izlemenizi sağlar. Seçilen hücreye göre bilgi göstermek, vurgulama yapmak ya da seçimi yönlendirmek için kullanılır.

Olay yordamı nereye yazılır​

Bu olay yordamı yalnızca ThisWorkbook modülünde çalışır. Standart modüle ya da sayfa modülüne yazarsanız Excel onu olay olarak tanımaz.
  • Adım 1: Alt+F11 tuşlarıyla Visual Basic Düzenleyicisi'ni açın.
  • Adım 2: Proje Gezgini'nde (Project Explorer) ilgili kitabın altındaki ThisWorkbook öğesine çift tıklayın.
  • Adım 3: Kod penceresinin üstündeki sol açılır listeden Workbook, sağ listeden SheetSelectionChange seçin. Excel yordamın ilk ve son satırını kendisi yazar.
Sayfa düzeyindeki karşılığı Worksheet_SelectionChange olayıdır; o yalnızca kendi sayfasının modülünde ve yalnızca o sayfa için çalışır. Kitap düzeyindeki bu olay ise hangi sayfada olduğunuzu Sh parametresiyle bildirir.

Söz dizimi​

Olay yordamının bildirimi şöyledir:
VBA 3 satır
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' Kodunuz buraya
End Sub
  • Sh: Seçimin değiştiği sayfayı temsil eden nesnedir (Object); zorunludur. Sayfa adına Sh.Name ile, hücrelerine Sh.Range ve Sh.Cells ile ulaşırsınız.
  • Target: Yeni seçilen hücre ya da aralıktır (Range); zorunludur. Tek hücre seçildiyse tek hücreli, bloğu seçildiyse çok hücreli bir aralık gelir.
Parametre adlarını değiştirebilirsiniz, ancak sırası ve türleri aynı kalmalıdır. Olay bir değer döndürmez ve iptal edilemez; seçim zaten değişmiş olarak gelir.

Ne zaman tetiklenir, nelere dikkat edilir​

Olay, kullanıcı fare ya da klavyeyle seçimi değiştirdiğinde, ayrıca bir makro Select ya da Activate yöntemiyle farklı bir hücre seçtiğinde çalışır. Grafik sayfalarında (chart sheet) tetiklenmez; yalnızca çalışma sayfalarında çalışır.
  • Sonsuz döngü riski: Yordamın içinde Select ile yeni bir seçim yaparsanız olay yeniden tetiklenir. Bunu önlemek için seçimi değiştirmeden önce Application.EnableEvents = False yazın, sonra mutlaka True yapın.
  • Değer yazmak seçimi değiştirmez: Hücrelere Value yazmak bu olayı tetiklemez; ancak Worksheet_Change ve Workbook_SheetChange olaylarını tetikleyebilir.
  • Sık çalışır: Her ok tuşu basışında olay çalıştığı için kodunuzu kısa ve hızlı tutun; ilk satırlarda Sh.Name ve Target ile gereksiz çalışmayı erkenden bitirin.

1. Seçilen adresi ve hücre sayısını yazdırma​

Senaryo: Stok tablosunda seçtiğiniz hücre ya da aralığın adresini ve kaç hücre içerdiğini D2 ve E2 hücrelerinde görmek istiyorsunuz. Aşağıdaki kodu Visual Basic Düzenleyicisi'nde ThisWorkbook modülüne yapıştırın.
VBA 12 satır
Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' Yalnızca Stok Takip sayfasında çalış
    If Sh.Name <> "Stok Takip" Then Exit Sub

    ' Seçilen adresi $ işaretleri olmadan yaz
    Sh.Range("D2").Value = Target.Address(False, False)

    ' Seçilen hücre sayısını yaz
    Sh.Range("E2").Value = Target.Cells.Count
End Sub
Workbook_SheetSelectionChange
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünAdetBirim FiyatSeçilen AdresHücre Sayısı
2Defter12024,50B3:C56
3Kalem3406,75
4Dosya8512,90
5Zımba6048,00
6Silgi2103,25
Stok TakipExcelDepo v1.0.0
Makro B3:C5 aralığını seçtiği anda olay çalışır. D2 hücresine seçilen adres (B3:C5), E2 hücresine seçimdeki hücre sayısı (6) yazılır. Sh.Name denetimi sayesinde kitaptaki diğer sayfalarda seçim yapmanız bu hücreleri etkilemez.

2. Seçilen personelin satırını işaretleme​

Senaryo: Personel listesinde bir hücre seçtiğinizde, o satırın E sütununda "Seçili" ifadesi ve kişinin adı görünsün; başka satıra geçince önceki işaret silinsin. Kodu ThisWorkbook modülüne yapıştırın.
VBA 18 satır
Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' Yalnızca Personel Listesi sayfasında çalış
    If Sh.Name <> "Personel Listesi" Then Exit Sub

    ' Birden çok hücre seçildiyse işlem yapma
    If Target.Cells.Count > 1 Then Exit Sub

    ' Seçim veri alanı (A2:D9) dışındaysa işlem yapma
    If Intersect(Target, Sh.Range("A2:D9")) Is Nothing Then Exit Sub

    ' Önceki işaretleri temizle
    Sh.Range("E2:E9").ClearContents

    ' Seçili satırın E hücresine personel adını yaz
    Sh.Cells(Target.Row, "E").Value = "Seçili: " & Sh.Cells(Target.Row, "A").Value
End Sub
Workbook_SheetSelectionChange
Formülünü incelemek için bir hücre seçin.
ABCDE
1Ad SoyadDepartmanŞehirMaaşSeçim
2Ayşe YılmazMuhasebeİstanbul28.500,00
3Mehmet DemirSatışAnkara31.200,00
4Fatma Kayaİnsan Kaynaklarıİzmir27.800,00
5Ali ÇelikÜretimBursa26.400,00Seçili: Ali Çelik
6Zeynep ArslanSatışAntalya30.100,00
7Mustafa ÖztürkLojistikKonya25.900,00
8Elif ŞahinMuhasebeEskişehir29.300,00
9Hasan AydınÜretimGaziantep26.900,00
Personel ListesiExcelDepo v1.0.0
Makro C5 hücresini seçer. Bu hücre 5. satırda olduğundan olay E5 hücresine işaret metnini yazar: Seçili: Ali Çelik. Başka bir satırdaki hücreyi seçtiğinizde E2:E9 aralığı önce temizlenir, işaret yeni satıra taşınır. Intersect denetimi, veri alanının dışındaki seçimlerde kodun çalışmasını engeller.

3. EnableEvents ile seçimi yönlendirme​

Senaryo: Fiyat listesinde ürün adı sütununu (A) seçen kullanıcı otomatik olarak aynı satırdaki fiyat hücresine (B) geçsin. Yordamın içinde Select kullanıldığı için olayın yeniden tetiklenmemesi adına EnableEvents kapatılır ve hata olsa bile açılması için etiketli bir çıkış kullanılır. Kodu ThisWorkbook modülüne yapıştırın.
VBA 19 satır
Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' Yalnızca Fiyat Listesi sayfasında çalış
    If Sh.Name <> "Fiyat Listesi" Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub

    ' A sütunundaki ürün adı seçilirse fiyat hücresine geç
    If Target.Column = 1 And Target.Row > 1 Then
        On Error GoTo Cikis
        Application.EnableEvents = False
        Target.Offset(0, 1).Select
        Sh.Range("D2").Value = Target.Address(False, False) & " -> " & Target.Offset(0, 1).Address(False, False)
    End If

Cikis:
    ' Olaylar her durumda yeniden açılır
    Application.EnableEvents = True
End Sub
Workbook_SheetSelectionChange
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünFiyatStokYönlendirme
2Çay85,50140A4 -> B4
3Şeker42,00320
4Zeytinyağı310,0075
5Makarna28,75510
6Pirinç65,00260
Fiyat ListesiExcelDepo v1.0.0
Makro A4 hücresini seçince olay çalışır, seçimi B4 hücresine kaydırır ve D2 hücresine yönlendirmenin kaydını yazar: A4 -> B4. Select satırından önce EnableEvents kapatıldığı için yeni seçim olayı yeniden tetiklemez. Cikis etiketi sayesinde bir hata olsa bile EnableEvents tekrar True yapılır.

Kullanırken dikkat edin​

  • EnableEvents'i mutlaka geri açın: Application.EnableEvents özelliğini False yaptıktan sonra True'ya döndürmeyi unutursanız Excel hiçbir olayı çalıştırmaz; kod yazmış olsanız bile olaylar sessizce devre dışı kalır. Hata ihtimaline karşı On Error ile etiketli bir çıkış kullanın. Sorun yaşarsanız Doğrudan Çalışma Penceresi'ne (Immediate Window) Application.EnableEvents = True yazarak durumu düzeltebilirsiniz.
  • Yanlış modüle yazmak: Yordam ThisWorkbook dışındaki bir modüle yazılırsa çalışmaz. Yordamın adı ve parametreleri de birebir doğru olmalıdır. En güvenli yol, kod penceresindeki açılır listelerden olayı seçmektir.
  • Sayfa düzeyi olayla birlikte çalışır: Aynı sayfada Worksheet_SelectionChange yordamı da varsa ikisi de çalışır. Aynı hücrelere yazan iki yordam birbirini ezebilir; görevleri bölüştürmeye özen gösterin.
  • Grafik sayfaları ve Geri Al: Olay yalnızca çalışma sayfalarında tetiklenir, grafik sayfalarında tetiklenmez. Ayrıca olay içinden hücreye değer yazan ya da biçimlendiren kodlar Excel'in Geri Al (Undo) yığınını temizler; bu yüzden kullanıcı yapılan işlemleri geri alamayabilir.
  • Çoklu seçimi ve performansı düşünün: Target tek hücre olmayabilir; Ctrl ile yapılan çoklu seçimlerde Target.Cells.Count ve Target.Areas.Count değerlerini denetleyin. Olay her seçimde çalıştığı için ağır döngüler, büyük aralık işlemleri ve ekran yenileme gerektiren kodlardan kaçının.
  • Makroların açık olması gerekir: Dosya .xlsx olarak kaydedilirse kod saklanmaz; makro içeren çalışma kitabı olarak .xlsm biçiminde kaydedin. Makrolar devre dışıysa olay hiç çalışmaz.
  • İlgili konular:
    • Worksheet_SelectionChange: Tek bir sayfanın seçim değişikliği olayı.
    • Workbook_SheetChange: Herhangi bir sayfada hücre değeri değiştiğinde çalışan olay.
    • Workbook_SheetActivate: Bir sayfa etkinleştirildiğinde çalışan olay.
    • Workbook_SheetBeforeDoubleClick: Çift tıklamadan önce çalışan kitap olayı.
    • Application.EnableEvents: Olayların çalışmasını açıp kapatan özellik.
    • Intersect: İki aralığın kesişimini bulan yöntem.
    • Range.Select ve Range.Offset: Hücre seçme ve kaydırma işlemleri.
    • ThisWorkbook: Kod içeren kitabı temsil eden nesne.
Ö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
17
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst