Özellik ikonu

Workbook_Open

İndirme izni yok

Genel Bakış

Workbook_Open (Workbook.Open event), bir çalışma kitabı açıldığında Excel tarafından kendiliğinden çalıştırılan olay yordamıdır. Açılışta kullanıcıya karşılama bilgisi göstermek, sayfaları hazırlamak, hesapları yenilemek ya da açılış kaydı tutmak gibi başlangıç işlerini otomatikleştirmek için kullanılır. Yordam yalnızca makro içeren bir çalışma kitabında ve makrolara izin verildiğinde çalışır.

Olay yordamı nereye yazılır​

Bu olay yordamı standart modüle değil, çalışma kitabının kendi nesne modülüne yani ThisWorkbook modülüne yazılır. Visual Basic düzenleyicisini Geliştirici > Visual Basic (Developer > Visual Basic) ile ya da Alt+F11 tuşlarıyla açın. Sol taraftaki Proje Gezgini (Project Explorer) penceresinde ilgili projenin altındaki ThisWorkbook öğesine çift tıklayın.

Kod penceresinin üstündeki sol açılır listeden Workbook nesnesini, sağ listeden Open olayını seçerseniz Excel yordamın iskeletini sizin için yazar. Yordamı standart modüle yazarsanız Excel onu olay olarak tanımaz, yalnızca sıradan bir makro olarak kalır. Dosyayı da makro içerebilen Excel Çalışma Kitabı (Makro İçerir) (Excel Macro-Enabled Workbook) biçiminde, yani .xlsm olarak kaydetmeniz gerekir.

Söz dizimi​

Olay yordamının adı ve imzası Excel tarafından belirlenir; adı değiştirirseniz olay çalışmaz.

VBA 3 satır
Private Sub Workbook_Open()
    ' Açılışta yapılacak işlemler
End Sub

  • Parametre: Workbook_Open yordamının parametresi yoktur; parantezler boş yazılır.
  • Private: Excel'in oluşturduğu iskelette bulunur; olay yordamı dışarıdan doğrudan çağrılmaz. Aynı kodu başka yerden de çalıştırmak istiyorsanız işi Public Sub ile yazılmış ayrı bir yordama taşıyıp Workbook_Open içinden çağırın.
  • Dönüş değeri: Olay yordamı bir değer döndürmez; iptal edilebilen BeforeClose gibi olaylardaki Cancel parametresi burada yoktur.

Ne zaman çalışır, ne zaman çalışmaz​

Olay, kullanıcı dosyayı açtığında ya da başka bir makro Workbooks.Open yöntemiyle açtığında tetiklenir. Aşağıdaki durumlarda ise çalışmaz:

  • Makrolar kapalıysa: Dosya > Seçenekler > Güvenlik Merkezi > Güvenlik Merkezi Ayarları > Makro Ayarları (File > Options > Trust Center > Trust Center Settings > Macro Settings) bölümünde makrolar devre dışıysa ya da kullanıcı İçeriği Etkinleştir (Enable Content) düğmesine basmadıysa yordam çalışmaz.
  • Korumalı Görünümde: İnternetten ya da e-postadan gelen dosya Korumalı Görünümde (Protected View) açılırsa düzenlemeyi etkinleştirene kadar olay tetiklenmez.
  • Shift basılıysa: Dosya açılırken Shift tuşunu basılı tutan kullanıcı olayı atlatabilir.
  • Olaylar kapalıysa: Başka bir makro Application.EnableEvents = False ayarını yapmışsa ve dosyayı o sırada açıyorsa olay çalışmaz.

Auto_Open ile farkı​

Eski sürümlerden kalan Auto_Open adlı standart modül yordamı da açılışta çalışabilir. Her iki yöntem birlikte varsa önce Workbook_Open, ardından Auto_Open çalışır. Auto_Open, dosya Workbooks.Open ile kodla açıldığında çalışmaz; yeni kodlarda Workbook_Open tercih edilmelidir, çünkü kitapla birlikte taşınır ve ThisWorkbook ile doğrudan çalışır.

1. Açılışta stok durumunu denetleme​

Bir kırtasiye stok listesinde mevcut stok, asgari stoktan düşükse Durum sütununa sipariş uyarısı yazılmasını istiyoruz. Aşağıdaki kodu ThisWorkbook modülüne yapıştırın. İşi yapan AcilisKontrol yordamı Workbook_Open içinden çağrılır; böylece dosya her açıldığında liste yenilenir.
VBA 23 satır
Option Explicit

' Dosya açıldığında Excel bu yordamı kendiliğinden çalıştırır
Private Sub Workbook_Open()
    AcilisKontrol
End Sub

' Asıl işi yapan ortak yordam
Public Sub AcilisKontrol()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets(1)

    ' 2. satırdan 7. satıra kadar sonlu döngü
    For i = 2 To 7
        If ws.Cells(i, 2).Value < ws.Cells(i, 3).Value Then
            ws.Cells(i, 4).Value = "Sipariş ver"
        Else
            ws.Cells(i, 4).Value = "Yeterli"
        End If
    Next i
End Sub
Workbook_Open
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünStokAsgari StokDurum
2Kalem4150Sipariş ver91
3Defter27.10.2026 13:4080Yeterli46402,56948
4Silgi1530Sipariş ver45
5Kağıt300200Yeterli500
6Zımba810Sipariş ver18
7Marker6040Yeterli
Stok TakipExcelDepo v1.0.0
Kalem satırında stok asgari düzeyin altında olduğu için D2 hücresi Sipariş ver sonucunu gösterir; Defter satırında ise D3 hücresi Yeterli olur. Zımba için D6 hücresine Sipariş ver yazılır. Gerçek kullanımda bu işlem dosyayı her açışınızda kendiliğinden yapılır, siz hiçbir düğmeye basmazsınız.

2. Açılış sayacı ve son açılış zamanı​

Bir çalışma kitabının kaç kez açıldığını ve en son ne zaman açıldığını sayfada tutmak istiyoruz. Kodu ThisWorkbook modülüne yapıştırın. B2 hücresi sayaç, B3 hücresi son açılış zamanıdır; başlangıçta boş olan sayaç hücresine her açılışta 1 eklenir.
VBA 18 satır
Option Explicit

Private Sub Workbook_Open()
    AcilisKaydet
End Sub

Public Sub AcilisKaydet()
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets(1)

    ' Boş hücre sayı işleminde 0 kabul edilir; sayaç 1 artar
    ws.Range("B2").Value = ws.Range("B2").Value + 1

    ' Şimdiki tarih ve saati yazıp biçimlendir
    ws.Range("B3").Value = Now
    ws.Range("B3").NumberFormat = "dd.mm.yyyy hh:mm"
End Sub
Workbook_Open
Formülünü incelemek için bir hücre seçin.
AB
1KayıtDeğer
2Açılış sayısı
3Son açılış
Açılış KaydıExcelDepo v1.0.0
Bu örnekteki sayfada makro çalıştıktan sonra B2 hücresi ve B3 hücresi boş görünür; yani sayaç ve son açılış zamanı sayfada yer almaz. Sayaç değerinin bir sonraki açılışta da korunması için dosyayı kapatırken değişiklikleri kaydetmeniz gerekir; kaydetmezseniz yapılan güncelleme kaybolur.

3. Açılışta toplamları yenileme ve olayları koruma​

Bölgelere göre aylık satış tablosunda Toplam sütununu açılışta kodla hesaplatıyoruz. Kod, işlem sırasında başka olay yordamlarının araya girmemesi için olayları geçici olarak kapatır ve hata olsa bile yeniden açar. Kodu ThisWorkbook modülüne yapıştırın.
VBA 28 satır
Option Explicit

Private Sub Workbook_Open()
    Hesapla
End Sub

Public Sub Hesapla()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets(1)

    ' Olayları geçici olarak kapat
    Application.EnableEvents = False
    On Error GoTo Cikis

    ' Her bölge için Ocak-Mart toplamını E sütununa yaz
    For i = 2 To 6
        ws.Cells(i, 5).Value = Application.WorksheetFunction.Sum(ws.Range(ws.Cells(i, 2), ws.Cells(i, 4)))
    Next i

    ' Bu sayfayı açılışta öne getir
    ws.Activate

Cikis:
    ' Hata olsa da olsa olayları yeniden aç
    Application.EnableEvents = True
End Sub
Workbook_Open
Formülünü incelemek için bir hücre seçin.
ABCDE
1BölgeOcakŞubatMartToplam
2İstanbul125.00098.000143.000
3Ankara76.00081.00069.000
4İzmir64.00072.00058.000
5Bursa41.00039.00047.000
6Antalya52.00060.00071.000
Satış ÖzetiExcelDepo v1.0.0
Bu örnekteki sayfada makro çalıştıktan sonra İstanbul için E2 hücresi ve Antalya için E6 hücresi boş görünür; Toplam sütununda değer oluşmamıştır. Application.EnableEvents ayarını kapatıp mutlaka yeniden açmak önemlidir; açmayı unutursanız Excel oturumu boyunca hiçbir olay yordamı çalışmaz. Burada On Error satırı, bir hata oluşsa bile Cikis etiketine atlanıp olayların yeniden açılmasını sağlar.

Kullanırken dikkat edin​

  • Yanlış modüle yazmayın: Yordam standart modüle ya da bir sayfa modülüne yazılırsa açılışta çalışmaz. Doğru yer yalnızca ThisWorkbook modülüdür; sayfa modülündeki Worksheet_ olayları ayrı bir konudur.
  • Dosya türü ve makro güvenliği: Makro içeren dosya .xlsx olarak kaydedilirse kod silinir. Dosyayı .xlsm olarak kaydedin. Kullanıcılarınızın makroları etkinleştirmesi ya da dosyayı güvenilen bir konuma koymanız gerekir; aksi halde Workbook_Open hiç çalışmaz ve hata mesajı da görünmez.
  • Shift tuşuyla atlama: Kullanıcı dosyayı açarken Shift tuşunu basılı tutarsa olay yordamı çalışmaz. Bu yüzden açılış kodunu, güvenlik amacıyla kullanıcıyı zorlamak için tek başına yeterli bir önlem saymayın.
  • Açılışı ağır işlerle yavaşlatmayın: Uzun süren döngüler, çok sayıda dosya açma ya da büyük veri yenileme işlemleri dosyanın açılmasını geciktirir. Açılış kodunu kısa tutun; ağır işlemler için Application.ScreenUpdating ayarını geçici kapatıp işlem bitince yeniden açın.
  • Olayları kapatırsanız yeniden açın: Application.EnableEvents ayarını False yaptıktan sonra bir hata oluşursa ayar kapalı kalabilir. Üçüncü örnekteki gibi hata yakalama etiketi kullanıp ayarı her durumda True yapın.
  • ThisWorkbook ve ActiveWorkbook farkı: Kodun yazıldığı dosyaya başvurmak için ThisWorkbook kullanın. ActiveWorkbook, o anda etkin olan dosyadır ve açılış sırasında başka bir dosya etkin olabilir; bu da kodun yanlış dosyada işlem yapmasına yol açar.
  • Kaydetme gerektiren değişiklikler: Açılışta sayfaya yazdığınız değerler dosya kaydedilmedikçe kalıcı olmaz. Sadece okunur açılan ya da kaydı kapatılan dosyalarda yapılan güncellemeler kapanışta kaybolur.
  • İlgili konular:
    • Workbook_BeforeClose: Dosya kapanmadan önce çalışan olay.
    • Workbook_Activate: Dosya etkin olduğunda çalışan olay.
    • Workbook_SheetChange: Dosyadaki herhangi bir sayfada hücre değişince çalışan olay.
    • Auto_Open: Standart modülde yazılan eski tür açılış yordamı.
    • Application.EnableEvents: Olayların çalışmasını açıp kapatan özellik.
    • ThisWorkbook: Kodun bulunduğu çalışma kitabını gösteren nesne.
    • Worksheet_Activate: Sayfa etkinleştiğinde çalışan olay.
    • BUGÜN ve ŞİMDİ: Açılışta tarih ve saat bilgisi almak için kullanılabilecek işlevler.
Ö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
22
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst