Özellik ikonu

Workbook_WindowActivate

İndirme izni yok

Genel Bakış

Workbook_WindowActivate (Workbook.WindowActivate event), bir çalışma kitabının penceresi etkinleştirildiğinde, yani öne getirilip etkin pencere olduğunda Excel tarafından otomatik çalıştırılan olay yordamıdır. Pencereye göre yakınlaştırma, ızgara çizgisi, durum çubuğu iletisi gibi ayarları otomatik yapmak ya da etkinleştirmeleri kayda almak için kullanılır. Yordam, etkinleşen pencereyi bir Window nesnesi olarak parametre ile alır.

Olay yordamı nereye yazılır​

Bu olay yordamı bir standart modüle değil, çalışma kitabının kendi kod modülüne yazılmalıdır. Visual Basic Düzenleyicisi'nde (Alt+F11) Proje Gezgini'nde ilgili kitabın altındaki ThisWorkbook öğesine çift tıklayın. Kod penceresinin üstündeki sol açılır listeden Workbook, sağ listeden WindowActivate seçerseniz Excel yordamın iskeletini sizin için yazar.

Yordam standart modüle yazılırsa Excel onu olay olarak tanımaz ve hiçbir zaman kendiliğinden çalışmaz. Kitabı Excel Makro İçerebilen Çalışma Kitabı (*.xlsm) olarak kaydetmeyi ve makroların etkin olmasını unutmayın.

Söz dizimi​

Olayın yordam başlığı şu biçimdedir:
VBA 3 satır
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    ' Pencere etkinleştirildiğinde yapılacak işlemler
End Sub
  • Wn: Etkinleştirilen pencereyi temsil eden Window nesnesi; zorunludur, varsayılan değeri yoktur. Wn.Caption, Wn.Zoom, Wn.DisplayGridlines, Wn.ActiveSheet gibi özelliklerine bu parametre üzerinden erişirsiniz.
Parametre adını değiştirebilirsiniz (örneğin Pencere), ancak veri türü Window olmalıdır; aksi durumda Excel derleme hatası verir.

Ne zaman tetiklenir​

Olay, kitabın bir penceresi etkin olduğunda çalışır. Aynı kitaba Pencere > Yeni Pencere (View > New Window) ile ikinci bir pencere açtıysanız, pencereler arasında her geçişte ilgili pencere için olay oluşur. Excel 2013 ve sonrasında her kitap kendi penceresinde göründüğü için başka bir kitaba geçip geri döndüğünüzde de kitabın penceresi yeniden etkinleşir.

Aynı pencere içinde bir sayfadan diğerine geçmek bu olayı tetiklemez; bunun için Workbook_SheetActivate kullanılır. Kitabın etkinleşmesini yakalayan Workbook_Activate ile kitaptan ayrılan pencereyi yakalayan Workbook_WindowDeactivate olayları bu olayla birlikte çalışır. Tüm açık kitaplardaki pencereleri tek yerden izlemek isterseniz Application düzeyindeki WindowActivate olayını bir sınıf modülünde WithEvents ile tanımlayın.

Olay içinde dikkat edilecek noktalar​

  • Etkin sayfa türü: Wn.ActiveSheet bir grafik sayfası olabilir; çalışma sayfasına özgü özellikleri kullanmadan önce TypeName ile denetleyin.
  • Hızlı olun: Olay pencere her öne geldiğinde çalışır; yordamı kısa tutun, ağır döngü ve hesaplamalardan kaçının.
  • Yinelenen olaylar: Yordam içinde başka bir pencereyi etkinleştirirseniz olay zincirleme çalışabilir; bu tür kodlarda Application.EnableEvents değerini geçici olarak False yapın ve işiniz bitince True yapın.

1. Etkin pencere başlığını durum çubuğunda göstermek​

Aşağıdaki kodu ilgili kitabın ThisWorkbook modülüne yapıştırın. Kitabın penceresi her etkinleştirildiğinde pencere başlığı durum çubuğuna yazılır, pencereden ayrılınca durum çubuğu Excel'e geri verilir.
VBA 12 satır
Option Explicit

' ThisWorkbook modülüne yazın
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    ' Etkinleşen pencerenin başlığını durum çubuğunda göster
    Application.StatusBar = "Etkin pencere: " & Wn.Caption
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    ' Durum çubuğunu Excel'in denetimine geri ver
    Application.StatusBar = False
End Sub
Workbook_WindowActivate
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünŞehirAdetTutar
2Dizüstü BilgisayarAnkara12186.000,00
3Yazıcıİzmir834.400,00
4MonitörBursa1552.500,00
5KlavyeKonya4024.000,00
Satış ÖzetiExcelDepo v1.0.0
Bu örnek ekranda görünen bir iletiyi değiştirdiği için sayfadaki hücreler değişmez. Kitabın penceresini etkinleştirdiğinizde (başka bir kitaptan geri dönerek ya da ikinci bir pencereden geçerek) durum çubuğunda "Etkin pencere: " ifadesinin ardından kitabın adı görünür. Pencereden ayrıldığınızda WindowDeactivate yordamı durum çubuğunu eski haline getirir; bu yordam olmasaydı ileti başka bir kitaba geçtikten sonra da ekranda kalırdı.

2. Pencere görünümünü otomatik ayarlamak​

Kodu ThisWorkbook modülüne yapıştırın. Pencere etkinleştirildiğinde yakınlaştırma yüzde 90 yapılır, etkin sayfa bir çalışma sayfasıysa ızgara çizgileri gizlenir ve formül çubuğu açılır.
VBA 15 satır
Option Explicit

' ThisWorkbook modülüne yazın
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    ' Yakınlaştırmayı ayarla
    Wn.Zoom = 90

    ' Etkin sayfa grafik sayfası olabilir; önce türünü denetle
    If TypeName(Wn.ActiveSheet) = "Worksheet" Then
        Wn.DisplayGridlines = False
    End If

    ' Formül çubuğunu göster
    Application.DisplayFormulaBar = True
End Sub
Workbook_WindowActivate
Formülünü incelemek için bir hücre seçin.
ABCD
1Ad SoyadDepartmanŞehirMaaş
2Ayşe YılmazMuhasebeİstanbul42.000,00
3Mehmet DemirSatışAnkara38.500,00
4Fatma Kayaİnsan Kaynaklarıİzmir40.250,00
5Can ÖztürkBilgi İşlemBursa47.000,00
PersonelExcelDepo v1.0.0
Bu örnek de pencere ayarlarını değiştirir, hücre değerlerine dokunmaz. Kitabın penceresi her etkinleştirildiğinde sayfa yüzde 90 yakınlaştırmayla, ızgara çizgileri kapalı ve formül çubuğu açık olarak görünür. TypeName denetimi sayesinde etkin sayfa bir grafik sayfasıysa DisplayGridlines satırı atlanır ve hata oluşmaz. DisplayFormulaBar Excel genelinde geçerlidir; tüm kitaplarda etkisini göreceğiniz için bunu bilerek kullanın.

Bu örnek hücre değerlerini değiştirmediği için makro çalıştırılarak sonuç gösterilmez; ayarların etkisini kitabı kaydedip yeniden açarak ya da başka bir pencereye geçip dönerek görebilirsiniz.

Ek olarak, ayarın yalnızca etkin sayfaya uygulandığını unutmayın; diğer sayfalar kendi ızgara ayarını korur.

İpucu: ayarı tüm sayfalara uygulamak isterseniz bir For Each döngüsü ile Wn.ActiveSheet yerine her sayfayı etkinleştirmek gerekir; bu da olay içinde zincirleme tetiklemelere yol açabileceğinden önerilmez.

3. Pencere etkinleştirmelerini sayfaya kaydetmek​

Kodu ThisWorkbook modülüne yapıştırın. Kitaba ait herhangi bir pencere etkinleştirildiğinde Günlük sayfasındaki sayaç bir artırılır ve etkinleşen pencerenin başlığı yazılır. Sayfanın adı koddaki adla birebir aynı olmalıdır.
VBA 15 satır
Option Explicit

' ThisWorkbook modülüne yazın
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    Dim ws As Worksheet

    ' Kayıt sayfasını sayfa adıyla bul (etkin sayfaya bağlı kalma)
    Set ws = ThisWorkbook.Worksheets("Günlük")

    ' Etkinleştirme sayısını bir artır
    ws.Range("B2").Value = ws.Range("B2").Value + 1

    ' Etkinleşen pencerenin başlığını yaz
    ws.Range("B3").Value = Wn.Caption
End Sub
Workbook_WindowActivate
Formülünü incelemek için bir hücre seçin.
AB
1GöstergeDeğer
2Etkinleştirme sayısı0
3Son etkinleşen pencere
GünlükExcelDepo v1.0.0
Sayfa yukarıda ilk haliyle görünür. Kitabın penceresi her etkinleştirildiğinde B2 hücresindeki sayaç bir artar ve B3 hücresine pencerenin başlığı yazılır; örneğin ikinci bir pencere açıp pencereler arasında gezdiğinizde başlıklar "Kitap.xlsx:1" ve "Kitap.xlsx:2" biçiminde değişir. Hücreye başvuruyu ThisWorkbook.Worksheets("Günlük") ile sayfa adı üzerinden yaptığımız için etkin sayfa hangisi olursa olsun kayıt doğru yere yazılır. Olay, kitap açılırken de tetiklenebileceğinden sayaç ilk açılışta da artabilir.

Kullanırken dikkat edin​

  • Yordamı yanlış modüle yazmayın: Olay yordamı yalnızca ThisWorkbook modülünde çalışır. Standart modüle ya da sayfa modülüne yazdığınız Workbook_WindowActivate adlı yordam sıradan bir yordam olarak kalır ve kendiliğinden çalışmaz.
  • Olayların kapalı kalması: Başka bir makro Application.EnableEvents = False yaptıktan sonra hata nedeniyle durursa olaylar kapalı kalır ve yordamınız çalışmaz. Böyle bir durumda Doğrudan Pencere'ye Application.EnableEvents = True yazıp Enter tuşuna basın. Kodunuzda olayları kapattığınız her yerde mutlaka tekrar açın, hata durumları için de bir hata yakalayıcı kullanın.
  • Korumalı sayfalara yazma: Olay içinde bir sayfaya değer yazıyorsanız ve sayfa korumalıysa çalışma zamanı hatası alırsınız. Sayfayı koruması açık bırakmak istiyorsanız UserInterfaceOnly seçeneğiyle korumayı makro için geçerli kılın ya da yazma işlemini yapmadan önce korumayı kaldırıp sonra yeniden uygulayın.
  • Yük ve sık tetiklenme: Pencere her öne geldiğinde olay çalıştığı için yordamda ağır işlem yapmayın. Durum çubuğu ve görünüm ayarları gibi hızlı işlemler uygundur; uzun döngüler pencere geçişlerini yavaşlatır.
  • Ayarları geri almayı unutmayın: Application düzeyindeki ayarları (DisplayFormulaBar, StatusBar gibi) değiştirdiğinizde bunlar tüm Excel oturumunu etkiler. Pencere ayrılırken bu ayarları Workbook_WindowDeactivate içinde eski değerlerine döndürmeyi düşünün.
  • Excel sürümü: Excel 2013 ve sonrasında her kitap kendi penceresinde açıldığından (tek belge arayüzü) kitaplar arası geçişte bu olay beklediğinizden daha sık çalışabilir. Eski sürümlerde kitaplar tek ana pencerenin içinde göründüğü için davranış farklılık gösterebilir.
  • İlgili konular:
    • Workbook_Activate: Kitap etkinleştiğinde çalışır.
    • Workbook_WindowDeactivate: Pencere etkin olmaktan çıktığında çalışır.
    • Workbook_SheetActivate: Kitap içinde sayfa değiştiğinde çalışır.
    • Workbook_Open: Kitap açıldığında çalışır.
    • Application.WindowActivate: Tüm kitaplar için pencere etkinleşmesini izleyen Application olayı.
    • Window nesnesi: Zoom, Caption, DisplayGridlines, ActiveSheet gibi pencere özelliklerini barındırır.
    • Application.EnableEvents: Olayların çalışmasını açıp kapatır.
    • Application.StatusBar: Durum çubuğu iletisini belirler.
Ö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