Özellik ikonu

Workbook_Activate

İndirme izni yok

Genel Bakış

Workbook_Activate (Workbook.Activate event), bir çalışma kitabı etkin kitap durumuna geçtiğinde Excel tarafından otomatik olarak çalıştırılan olaydır. Kitap her öne alındığında bir işlemin yapılmasını sağlar; örneğin özet hücrelerini yenilemek, durum bilgisi yazmak ya da belirli bir denetimi çalıştırmak için kullanılır.

Olay yordamı nereye yazılır​

Bu olay yordamı standart modüle değil, ilgili kitabın ThisWorkbook modülüne yazılır. Visual Basic Düzenleyicisi'nde (Alt+F11) Proje Gezgini'nde ThisWorkbook öğesine çift tıklayın. Kod penceresinin üstündeki sol listeden Workbook, sağ listeden Activate seçildiğinde Excel boş yordam iskeletini sizin için oluşturur.

Yordamın adı ve yazımı sabittir. Adı değiştirirseniz ya da yordamı başka bir modüle taşırsanız Excel olayı tanımaz ve yordam kendiliğinden çalışmaz.

Söz dizimi​

Olay yordamının genel biçimi şöyledir:
VBA 3 satır
Private Sub Workbook_Activate()
    ' Kitap etkin olduğunda yapılacak işlemler
End Sub
  • Parametre: Bu olayın parametresi yoktur. Yordam parantezleri boş yazılır.
  • Me: ThisWorkbook modülünün içinde Me ifadesi, olayın ait olduğu çalışma kitabını gösterir.
  • Dönüş değeri: Olay yordamı değer döndürmez; bir Sub olarak çalışır.

Ne zaman tetiklenir​

Olay, aynı Excel oturumunda açık olan bir kitap etkin kitap olduğunda çalışır. Başka bir kitaptan bu kitaba geçtiğinizde ya da kodla Workbook.Activate yöntemini çağırdığınızda tetiklenir.

  • Tetiklenmez: Aynı kitabın farklı pencereleri arasında geçişte bu olay çalışmaz; bunun için Workbook_WindowActivate kullanılır.
  • Tetiklenmez: Excel'den başka bir programa geçip geri döndüğünüzde kitap zaten etkin kitap olduğu için olay çalışmaz.
  • Karşıt olay: Kitap etkinliğini kaybederken Workbook_Deactivate olayı çalışır.
  • Olay kapalıysa: Application.EnableEvents özelliği False iken olay çalışmaz.

1. Kitap etkinleşince durum bilgisi yazmak​

Örnek sayfanın adı Durum olsun. Aşağıdaki kodu ThisWorkbook modülüne yapıştırın. Başka bir kitap açılıp bu kitap yeniden etkinleştirildiğinde olay çalışır ve B2 ile B3 hücrelerine bilgi yazar. Bu sınama için bir yardımcı makro yeni bir geçici kitap açar, bu kitabı etkinleştirir ve geçici kitabı kaydetmeden kapatır.
VBA 9 satır
Option Explicit

' ThisWorkbook modülüne yazılır
Private Sub Workbook_Activate()
    With Me.Worksheets("Durum")
        .Range("B2").Value = "Kitap etkin"
        .Range("B3").Value = "Olay çalıştı"
    End With
End Sub
Workbook_Activate
Formülünü incelemek için bir hücre seçin.
AB
1AlanSonuç
2Kitap durumuKitap etkin
3Olay bilgisiOlay çalıştı
DurumExcelDepo v1.0.0
Kitap yeniden etkinleştirildiğinde olay yordamı çalıştı. B2 hücresine Kitap etkin, B3 hücresine Olay çalıştı yazıldı. Bu hücreler olay çalışmadan önce boştu.

2. Toplamı kitap etkinleşince yenilemek​

Örnek sayfanın adı Satış Özeti olsun. Aylık satışlar B2:B6 aralığındadır. Kodu ThisWorkbook modülüne yapıştırın. Kitap her etkinleştiğinde C2 hücresindeki toplam yeniden hesaplanıp yazılır. Sınama için aynı yardımcı makro kullanılır.
VBA 10 satır
Option Explicit

' ThisWorkbook modülüne yazılır
Private Sub Workbook_Activate()
    Dim ws As Worksheet
    Set ws = Me.Worksheets("Satış Özeti")

    ' B2:B6 aralığındaki satışların toplamını C2 hücresine yaz
    ws.Range("C2").Value = Application.WorksheetFunction.Sum(ws.Range("B2:B6"))
End Sub
Workbook_Activate
Formülünü incelemek için bir hücre seçin.
ABC
1AySatış (TL)Toplam Satış
2Ocak12.50063.550
3Şubat9.800
4Mart14.300
5Nisan11.200
6Mayıs15.750
Satış ÖzetiExcelDepo v1.0.0
Olay çalıştığında C2 hücresine B2:B6 aralığının toplamı yazıldı: 63.550. Satış rakamlarını değiştirip başka bir kitaba geçerek geri döndüğünüzde toplam güncel değeriyle yeniden yazılır.

3. Stok durumunu kitap açılınca denetlemek​

Örnek sayfanın adı Stok Kontrol olsun. Stok miktarı B sütununda, asgari stok C sütunundadır. Kodu ThisWorkbook modülüne yapıştırın. Olay, her ürünün durumunu D sütununa yazar ve kritik ürün sayısını E2 hücresine koyar. Sınama için aynı yardımcı makro kullanılır.
VBA 23 satır
Option Explicit

' ThisWorkbook modülüne yazılır
Private Sub Workbook_Activate()
    Dim ws As Worksheet
    Dim i As Long
    Dim kritik As Long

    Set ws = Me.Worksheets("Stok Kontrol")

    ' 2. satırdan 7. satıra kadar her ürünü denetle
    For i = 2 To 7
        If ws.Cells(i, 2).Value < ws.Cells(i, 3).Value Then
            ws.Cells(i, 4).Value = "Kritik"
            kritik = kritik + 1
        Else
            ws.Cells(i, 4).Value = "Yeterli"
        End If
    Next i

    ' Kritik ürün sayısını yaz
    ws.Range("E2").Value = kritik
End Sub
Workbook_Activate
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünStokAsgari StokDurumKritik Adet
2Kalem120100Yeterli2
3Defter4060Kritik
4Dosya7550Yeterli
5Zımba1220Kritik
6Klasör9080Yeterli
7A4 Kağıt Kolisi3025Yeterli
Stok KontrolExcelDepo v1.0.0
Olay çalışınca her ürünün durumu D sütununa yazıldı; örneğin Defter satırı için D3 hücresi Kritik, Kalem satırı için D2 hücresi Yeterli oldu. Stoku asgari değerin altında kalan ürünlerin sayısı E2 hücresinde: 2.

Kullanırken dikkat edin​

  • Olayın yeri: Kod ThisWorkbook modülünde olmalıdır. Standart modüle ya da sayfa modülüne yazılan Workbook_Activate yordamı olay olarak çalışmaz; yalnızca sıradan bir yordam gibi kalır.
  • Kitap açılırken tetiklenme: Kitap açılırken Open olayının ardından Activate olayının da çalışabileceğini göz önünde bulundurun. Bu nedenle aynı işlemi hem Workbook_Open hem Workbook_Activate içine yazarsanız işlem iki kez yapılabilir. Yalnızca bir kez çalışması gereken işlemleri Workbook_Open içine koyun.
  • Pencere geçişleri: Aynı kitabın ikinci penceresine geçmek Workbook_Activate olayını tetiklemez. Pencere geçişlerine tepki vermek istiyorsanız Workbook_WindowActivate olayını kullanın.
  • Uzun işlemlerden kaçının: Kitap her etkinleştiğinde çalıştığı için olay içine ağır hesaplamalar ya da çok sayıda hücreyi dolaşan döngüler koymayın. Kitaplar arasında geçiş yavaşlar ve kullanıcı gecikmeyi fark eder.
  • Olayları kapatma: Application.EnableEvents özelliğini False yaptıysanız olay çalışmaz. Kodunuz hata verip yarıda kalırsa özellik False kalabilir; bu durumda olaylar çalışmaz. Anlık Pencere'ye Application.EnableEvents = True yazarak durumu düzeltebilirsiniz.
  • Sonsuz döngü riski: Olay içinde kitabı yeniden etkinleştiren bir kod (örneğin başka bir kitaba geçip geri dönen komutlar) yazarsanız olay kendini tekrar tekrar çağırabilir. Böyle bir durumda olayı geçici olarak EnableEvents ile kapatın.
  • Makro güvenliği: Kitap makro içerdiği için .xlsm biçiminde kaydedilmelidir. Makrolar devre dışıysa olay yordamı da çalışmaz.
  • İlgili konular:
    • Workbook_Open: Kitap açıldığında çalışan olay.
    • Workbook_Deactivate: Kitap etkinliğini kaybettiğinde çalışan olay.
    • Workbook_WindowActivate: Kitabın bir penceresi etkinleştiğinde çalışan olay.
    • Workbook_SheetActivate: Kitaptaki bir sayfa etkinleştiğinde çalışan olay.
    • Worksheet_Activate: Belirli bir sayfa etkinleştiğinde çalışan olay.
    • Application.EnableEvents: Olayların çalışmasını açıp kapatan özellik.
    • Workbook.Activate: Bir kitabı kodla etkinleştiren yöntem.
Ö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
12
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst