Özellik ikonu

Worksheet_Activate

İndirme izni yok

Genel Bakış

Worksheet_Activate (Worksheet.Activate event), bir çalışma sayfası etkin sayfa olduğu anda Excel'in kendiliğinden çalıştırdığı olay yordamıdır. Sayfaya her geçişte yapılmasını istediğiniz işleri (özet hesaplama, durum güncelleme, görünüm ayarı gibi) kullanıcı bir şeye basmadan otomatik yaptırmak için kullanılır.

Olay yordamı nereye yazılır​

Bu olay yalnızca ilgili sayfanın kendi kod modülünde çalışır. Visual Basic Düzenleyicisi'ni açmak için Geliştirici > Visual Basic (Developer > Visual Basic) komutunu ya da Alt+F11 tuşlarını kullanın. Sonra Proje Gezgini'nde ilgili sayfaya (ör. Sayfa1) çift tıklayın ya da sayfa sekmesine sağ tıklayıp Kod Görüntüle (View Code) deyin.

  • Doğru yer: Sayfanın kod modülü. Kod penceresinin üstündeki sol listeden Worksheet, sağ listeden Activate seçilirse Excel yordamın iskeletini kendisi yazar.
  • Yanlış yerler: Standart modül ve ThisWorkbook modülü. Yordam bu modüllere yazılırsa Excel onu olay olarak tanımaz, yalnızca sıradan bir yordam olarak kalır ve kendiliğinden çalışmaz.
  • Dosya türü: Makro içerdiği için çalışma kitabını Excel Makro Etkin Çalışma Kitabı (*.xlsm) olarak kaydedin.

Söz dizimi​

Olay yordamının adı sabittir ve yordam parametre almaz:

VBA 3 satır
Private Sub Worksheet_Activate()
    ' Sayfa etkinleştirildiğinde çalışacak kodlar
End Sub

  • Parametre: Yoktur. Olay, iptal edilebilen (Cancel) bir olay değildir; yani sayfaya geçişi engelleyemezsiniz.
  • Private: Excel'in oluşturduğu iskelette yer alır, kaldırmanıza gerek yoktur.
  • Me: Sayfa modülünde Me anahtar sözcüğü, kodun bulunduğu sayfayı gösterir. Range ya da Cells başına nesne yazılmazsa da bu sayfa kastedilir.

Ne zaman tetiklenir​

Olay, sayfa etkin sayfa durumuna geçtiğinde çalışır. Tipik durumlar:

  • Sekmeye tıklama: Kullanıcı başka bir sayfadan bu sayfanın sekmesine geçtiğinde.
  • Kodla geçiş: Activate ya da Select yöntemiyle sayfa etkinleştirildiğinde.
  • Sıra: Önce önceki sayfanın Worksheet_Deactivate olayı, sonra yeni sayfanın Worksheet_Activate olayı çalışır.

Çalışma kitapları arasında geçiş bu olayı tetiklemez; bunun için Workbook_Activate ve Workbook_WindowActivate olayları kullanılır. Çalışma kitabı açılırken o an etkin olan sayfa için bu olayın çalışmasına güvenmeyin; açılışta yapılacak işleri Workbook_Open olayına yazın. Tüm sayfalar için tek yerden izleme yapmak istiyorsanız ThisWorkbook modülündeki Workbook_SheetActivate olayını kullanın.

1. Sayfaya her girişte sayaç artırma​

Sayfa kod modülüne aşağıdaki yordamı yapıştırın. Sayfa her etkinleştirildiğinde E2 hücresindeki sayaç bir artar. Sayaç başlangıçta boşsa, tablodaki durumda E2 hücresinin iki değerini göstermesi sayfanın bu noktaya kadar iki kez etkinleştirildiği anlamına gelir.

TABLO (hücre = Excel'in gösterdiği değer):
A1 = Ürün
A2 = Kalem
A3 = Defter
A4 = Dosya
A5 = Zımba
A6 = Klasör
B1 = Adet
B2 = 40
B3 = 25
B4 = 60
B5 = 10
B6 = 30
C1 = Birim Fiyat
C2 = 12,50
C3 = 35,00
C4 = 8,75
C5 = 120,00
C6 = 22,00
D1 = Tutar
D2 = 500,00 (formül: =B2*C2)
D3 = 875,00 (formül: =B3*C3)
D4 = 525,00 (formül: =B4*C4)
D5 = 1.200,00 (formül: =B5*C5)
D6 = 660,00 (formül: =B6*C6)
E1 = Açılış Sayısı
E2 = 2
E3 =
E4 =
E5 =
E6 =
VBA 4 satır
Private Sub Worksheet_Activate()
    ' Sayfa etkinleştirilince açılış sayacını bir artırır
    Me.Range("E2").Value = Me.Range("E2").Value + 1
End Sub
Worksheet_Activate
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünAdetBirim FiyatTutarAçılış Sayısı
2Kalem4012,50500,002
3Defter2535,00875,00
4Dosya608,75525,00
5Zımba10120,001.200,00
6Klasör3022,00660,00
SiparişlerExcelDepo v1.0.0
Kurulum yordamı sayfayı etkinleştirdiğinde olay çalıştı ve E2 hücresi 2 değerini aldı. Sayfaya her geçişte bu sayı bir artar. Tutar sütunundaki ilk satırın sonucu 500,00 olarak hesaplanır.

2. Sayfa açılırken stok durumunu güncelleme​

Sayfanın kod modülüne yapıştırın. Sayfa etkinleştirilince her ürünün stoğu asgari stokla karşılaştırılır ve Durum sütununa sonuç yazılır. Döngü, A sütunundaki son dolu satıra kadar sonlu olarak çalışır.

TABLO (hücre = Excel'in gösterdiği değer):
A1 = Ürün
A2 = Tornavida
A3 = Matkap ucu
A4 = Eldiven
A5 = Vida seti
A6 = Boya
A7 = Çekiç
B1 = Stok
B2 = 45
B3 = 12
B4 = 80
B5 = 8
B6 = 33
B7 = 5
C1 = Asgari Stok
C2 = 20
C3 = 30
C4 = 50
C5 = 25
C6 = 15
C7 = 10
D1 = Durum
D2 = Yeterli
D3 = Sipariş ver
D4 = Yeterli
D5 = Sipariş ver
D6 = Yeterli
D7 = Sipariş ver
VBA 13 satır
Private Sub Worksheet_Activate()
    Dim son As Long, i As Long
    ' A sütunundaki son dolu satırı bulur
    son = Me.Cells(Me.Rows.Count, 1).End(xlUp).Row
    For i = 2 To son
        ' Stok asgari düzeyin altındaysa sipariş uyarısı yazar
        If Me.Cells(i, 2).Value < Me.Cells(i, 3).Value Then
            Me.Cells(i, 4).Value = "Sipariş ver"
        Else
            Me.Cells(i, 4).Value = "Yeterli"
        End If
    Next i
End Sub
Worksheet_Activate
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünStokAsgari StokDurum
2Tornavida4520Yeterli
3Matkap ucu1230Sipariş ver
4Eldiven8050Yeterli
5Vida seti825Sipariş ver
6Boya3315Yeterli
7Çekiç510Sipariş ver
Stok TakibiExcelDepo v1.0.0
Sayfa etkinleştirildiğinde olay çalıştı ve Durum sütunu doldu. Tornavida satırı için Yeterli, Matkap ucu satırı için Sipariş ver, Vida seti satırı için Sipariş ver sonucu yazıldı. Stok değerlerini değiştirip başka sayfaya geçip geri döndüğünüzde Durum sütunu yeniden hesaplanır.

3. Açık görev sayısını özetleme​

Sayfanın kod modülüne yapıştırın. Sayfa her açıldığında C sütunundaki "Açık" durumundaki görevler sayılır ve D2 hücresine yazılır. Bu yaklaşım, sayfaya girilen her bilgiyi elle yenilemek yerine güncel özeti hazır tutmak için uygundur.

TABLO (hücre = Excel'in gösterdiği değer):
A1 = Görev
A2 = Rapor hazırlama
A3 = Fatura kontrolü
A4 = Sunum taslağı
A5 = Toplantı notları
A6 = Sipariş takibi
A7 = Arşivleme
A8 = Bütçe planı
A9 = Müşteri araması
B1 = Sorumlu
B2 = Ayşe
B3 = Mehmet
B4 = Elif
B5 = Burak
B6 = Zeynep
B7 = Can
B8 = Selin
B9 = Ahmet
C1 = Durum
C2 = Açık
C3 = Tamam
C4 = Açık
C5 = Tamam
C6 = Açık
C7 = Tamam
C8 = Açık
C9 = Tamam
D1 = Açık Görev Sayısı
D2 = 4
D3 =
D4 =
D5 =
D6 =
D7 =
D8 =
D9 =
VBA 7 satır
Private Sub Worksheet_Activate()
    Dim acik As Long
    ' Durum sütunundaki Açık kayıtlarını sayar
    acik = Application.WorksheetFunction.CountIf(Me.Range("C2:C9"), "Açık")
    ' Sonucu özet hücresine yazar
    Me.Range("D2").Value = acik
End Sub
Worksheet_Activate
Formülünü incelemek için bir hücre seçin.
ABCD
1GörevSorumluDurumAçık Görev Sayısı
2Rapor hazırlamaAyşeAçık4
3Fatura kontrolüMehmetTamam
4Sunum taslağıElifAçık
5Toplantı notlarıBurakTamam
6Sipariş takibiZeynepAçık
7ArşivlemeCanTamam
8Bütçe planıSelinAçık
9Müşteri aramasıAhmetTamam
Görev ListesiExcelDepo v1.0.0
Sayfa etkinleştirilince olay çalıştı ve D2 hücresine açık görev sayısı olarak 4 yazıldı. Durum sütununda değişiklik yapıp başka sayfaya geçip döndüğünüzde sayı güncel durumu yansıtır.

Kullanırken dikkat edin​

  • Yordamın yeri ve adı: Yordam sayfa modülünde değilse ya da adı farklıysa olay çalışmaz. Örneğin Worksheet_Activate yerine Worksheet_Activated yazarsanız Excel hata vermez, ancak yordam hiçbir zaman tetiklenmez. Adı elle yazmak yerine kod penceresindeki listelerden seçin.
  • Sonsuz döngü riski: Olay içinde başka bir sayfayı etkinleştirirseniz o sayfanın Activate olayı tetiklenir. İki sayfa birbirini etkinleştiriyorsa sonsuz bir zincir oluşur. Gerekirse kod başında Application.EnableEvents = False yazıp işiniz bitince True yapın; True'ya döndürmeyi unutmayın, aksi takdirde tüm olaylar kapalı kalır.
  • Olayı kapatmak: Application.EnableEvents özelliği False iken Worksheet_Activate çalışmaz. Bir makro hata verip yarıda kalırsa bu özellik False olarak kalabilir ve olaylar hiç çalışmıyormuş gibi görünür. Bu durumda Hemen penceresine Application.EnableEvents = True yazarak durumu düzeltin.
  • Her geçişte çalıştığını unutmayın: Olay sayfaya her girişte çalışır. Ağır işlemleri (büyük döngüler, dış veri yenileme) buraya yazarsanız sayfalar arası geçiş yavaşlar. MsgBox gibi kullanıcıyı durduran ifadeleri de her geçişte göstermemeye özen gösterin.
  • Değişiklik olaylarıyla etkileşim: Activate içinde hücreye değer yazarsanız aynı sayfada Worksheet_Change olayı varsa o da tetiklenir. Bunu istemiyorsanız yazma işleminden önce Application.EnableEvents özelliğini kapatın.
  • İlgili konular: Worksheet_Deactivate, Workbook_SheetActivate, Workbook_Activate, Workbook_Open, Worksheet_Change, Worksheet_SelectionChange, Application.EnableEvents, Worksheet.Activate yöntemi, Me anahtar sözcüğü, EĞERSAY işlevi (VBA içinde CountIf olarak).
Ö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
11
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst