Özellik ikonu

RunAutoMacros

İndirme izni yok

Genel Bakış

RunAutoMacros (Workbook.RunAutoMacros), bir çalışma kitabında saklanan Auto_Open, Auto_Close, Auto_Activate ya da Auto_Deactivate adlı otomatik makroyu kodla çalıştıran yöntemdir. Excel bu makroları normalde kitap açılırken ya da kapanırken kendisi çalıştırır; ancak kitap başka bir makro tarafından açıldığında çalışmazlar. Bu yöntem, otomatik makroyu istediğiniz anda kendiniz başlatmanızı sağlar.

Söz dizimi​

Yöntem, hedef Workbook nesnesi üzerinde çağrılır ve bir değer döndürmez:
VBA 4 satır
ifade.RunAutoMacros(Which)

' Örnek kullanım
ThisWorkbook.RunAutoMacros xlAutoOpen
  • ifade: Otomatik makrosu çalıştırılacak Workbook nesnesi (ThisWorkbook, ActiveWorkbook ya da Workbooks("Rapor.xlsm") gibi).
  • Which: Hangi otomatik makronun çalıştırılacağını belirten XlRunAutoMacro sabiti. Zorunludur, varsayılan değeri yoktur.
Yöntem bir değer döndürmediği için parantezsiz, Call kullanmadan yazabilirsiniz.

Which sabitleri​

Which bağımsız değişkeni için şu sabitler kullanılır:
  • xlAutoOpen (1): Kitaptaki Auto_Open makrosunu çalıştırır.
  • xlAutoClose (2): Kitaptaki Auto_Close makrosunu çalıştırır. Kitabı kapatmaz, yalnızca makroyu çalıştırır.
  • xlAutoActivate (3): Auto_Activate adlı makroyu çalıştırır.
  • xlAutoDeactivate (4): Auto_Deactivate adlı makroyu çalıştırır.
Günümüzde Auto_Activate ve Auto_Deactivate yerine Workbook_Activate ve Workbook_Deactivate olayları tercih edilir.

Otomatik makrolar ne zaman çalışır​

Auto_Open ve Auto_Close, standart bir modülde (Ekle > Modül (Insert > Module)) parametresiz bir Sub olarak yazılır. Kitabı kullanıcı Excel arayüzünden açtığında Auto_Open, kapattığında Auto_Close kendiliğinden çalışır. Kitap Workbooks.Open ile kodla açılırsa Auto_Open çalışmaz; makro güvenliği nedeniyle makrolar kapalıysa da çalışmaz. İşte bu durumda RunAutoMacros devreye girer: kitabı kodla açtıktan sonra açılış makrosunu kendiniz başlatırsınız.

Yöntem yalnızca bu adlı makroları çalıştırır. Workbook_Open gibi olay yordamlarını tetiklemez. Her otomatik makro adı kitapta yalnız bir kez geçmelidir; aynı ad birden çok modülde yer alırsa yalnızca ilk bulunan çalıştırılır.

1. Auto_Open ve Auto_Close makrolarını kodla çalıştırma​

Bu örnekte kitabın standart modülünde hem Auto_Open hem Auto_Close makrosu vardır. Auto_Open, Günlük sayfasındaki C2 hücresine bir metin yazar; Auto_Close için ise tablodaki C3 hücresi bu denemede boş kalır. AcilisKapanisDene yordamı bu iki makroyu RunAutoMacros ile sırayla çalıştırır. Kodu yeni bir standart modüle yapıştırın. Auto_Open ve Auto_Close adları kitapta başka hiçbir modülde bulunmamalıdır.
VBA 17 satır
Option Explicit

' Kitap açılırken (ya da RunAutoMacros xlAutoOpen ile) çalışır
Public Sub Auto_Open()
    ThisWorkbook.Worksheets("Günlük").Range("C2").Value = "Auto_Open çalıştı"
End Sub

' Kitap kapanırken (ya da RunAutoMacros xlAutoClose ile) çalışır
Public Sub Auto_Close()
    ThisWorkbook.Worksheets("Günlük").Range("C3").Value = "Auto_Close çalıştı"
End Sub

' Otomatik makroları kitabı açıp kapatmadan kodla çalıştırır
Public Sub AcilisKapanisDene()
    ThisWorkbook.RunAutoMacros xlAutoOpen
    ThisWorkbook.RunAutoMacros xlAutoClose
End Sub
RunAutoMacros
Formülünü incelemek için bir hücre seçin.
ABC
1AşamaMakroSonuç
2AçılışAuto_OpenAuto_Open çalıştı
3KapanışAuto_Close
GünlükExcelDepo v1.0.0
AcilisKapanisDene çalışınca önce xlAutoOpen ile Auto_Open makrosu başlar ve C2 hücresine Auto_Open çalıştı yazılır. Ardından xlAutoClose ile RunAutoMacros çağrılır; ancak bu denemede C3 hücresinde görünen değer '' olup hücre boştur, yani Auto_Close makrosunun metni sayfaya yazılmamıştır. Kitap bu sırada kapanmaz.

2. Kodla açılan kitabın açılış makrosunu başlatma​

Bu örnek dosya açtığı için çalıştırılmaz, sonucu sözle anlatılır. Diyelim ki aynı klasörde Rapor.xlsm adlı, standart modülünde Auto_Open makrosu bulunan başka bir kitabınız var. Aşağıdaki kod bu kitabı önce Dir ile arar, bulursa Workbooks.Open ile açar ve RunAutoMacros ile açılış makrosunu başlatır. Kodu bu kitapta yeni bir standart modüle yapıştırın; bu modülde Auto_Open ve Auto_Close adlı yordam tanımlamayın, çünkü bu adlar kitapta bir kez geçmelidir.
VBA 20 satır
Option Explicit

Public Sub RaporKitabiniAcVeBaslat()
    Dim yol As String
    Dim kt As Workbook

    ' Rapor.xlsm bu kitapla aynı klasörde olmalı
    yol = ThisWorkbook.Path & "\Rapor.xlsm"

    If Dir(yol) = "" Then
        MsgBox "Rapor.xlsm bulunamadı.", vbExclamation
        Exit Sub
    End If

    ' Kodla açılan kitapta Auto_Open kendiliğinden çalışmaz
    Set kt = Workbooks.Open(Filename:=yol)

    ' Açılış makrosunu kendimiz başlatıyoruz
    kt.RunAutoMacros Which:=xlAutoOpen
End Sub
RunAutoMacros
Formülünü incelemek için bir hücre seçin.
ABC
1AdımİşlemKullanılan öğe
21Dosyanın varlığını denetleDir
32Kitabı kodla açWorkbooks.Open
43Açılış makrosunu başlatRunAutoMacros
Rapor KitabıExcelDepo v1.0.0
Makro çalıştırıldığında Rapor.xlsm bulunamazsa uyarı iletisi görünür ve yordam sona erer. Dosya bulunursa kitap açılır; kodla açıldığı için Auto_Open kendiliğinden çalışmaz, ancak sonraki RunAutoMacros satırı kitabın Auto_Open makrosunu çalıştırır. Bu örnek dosya ve ileti kutusu kullandığı için burada çalıştırılmamıştır; tabloda yalnızca adımlar özetlenmiştir.

3. Which sabitlerinin sayısal değerleri​

Bu örnek RunAutoMacros çağırmaz; yönteme verilebilecek dört sabitin sayısal değerlerini sayfaya yazar. Böylece xlAutoOpen yerine 1 yazmanın da aynı sonucu verdiğini görebilirsiniz. Kodu yeni bir standart modüle yapıştırın; bu modülde Auto_Open ya da Auto_Close yordamı yoktur.
VBA 12 satır
Option Explicit

Public Sub SabitDegerleriniYaz()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sabitler")

    ' Her sabitin sayısal değerini C sütununa yaz
    ws.Range("C2").Value = xlAutoOpen
    ws.Range("C3").Value = xlAutoClose
    ws.Range("C4").Value = xlAutoActivate
    ws.Range("C5").Value = xlAutoDeactivate
End Sub
RunAutoMacros
Formülünü incelemek için bir hücre seçin.
ABC
1SabitÇalıştırdığı makroDeğer
2xlAutoOpenAuto_Open1
3xlAutoCloseAuto_Close2
4xlAutoActivateAuto_Activate3
5xlAutoDeactivateAuto_Deactivate4
SabitlerExcelDepo v1.0.0
Makro çalışınca C sütununa sabitlerin değerleri yazılır: xlAutoOpen için 1, xlAutoClose için 2, xlAutoActivate için 3 ve xlAutoDeactivate için 4. Dolayısıyla RunAutoMacros xlAutoOpen yazmak ile RunAutoMacros 1 yazmak aynı işi görür; ancak sabit adı kodu daha okunur kılar.

Kullanırken dikkat edin​

  • Yalnız ilk bulunan makro çalışır: Aynı adlı Auto_Open ya da Auto_Close yordamı birden çok modülde bulunursa RunAutoMacros yalnızca ilk bulduğunu çalıştırır. Her otomatik makro adının kitapta yalnız bir kez geçmesine dikkat edin.
  • Makro doğru yerde olmalı: Otomatik makroyu standart bir modülde, parametresiz bir Sub olarak yazın. ThisWorkbook ya da sayfa modülüne yazılan Auto_Open bu amaçla kullanılmaz. Ad da birebir Auto_Open, Auto_Close biçiminde olmalıdır.
  • xlAutoClose kitabı kapatmaz: RunAutoMacros xlAutoClose çağrısı yalnızca Auto_Close makrosunu çalıştırmayı hedefler; kitabı kapatmaz. Kitabı kapatmak için Workbook.Close yöntemini ayrıca çağırmanız gerekir. Örnek 1'de bu çağrıdan sonra C3 hücresi boş kaldığı için Auto_Close içindeki kodun sayfaya bir şey yazdığı görülmemiştir; makronun etkisini kendi kitabınızda sınayın.
  • Olay yordamlarını tetiklemez: Yöntem Workbook_Open ve Workbook_BeforeClose gibi olayları çalıştırmaz; yalnızca adı Auto_ ile başlayan makrolara etki eder. Yeni geliştirdiğiniz çözümlerde genellikle olay yordamları tercih edilir; RunAutoMacros ise eski kitaplardaki otomatik makrolarla çalışırken işe yarar.
  • Makro güvenliği: Kitabın makroları güvenlik ayarları nedeniyle devre dışıysa otomatik makro çalıştırılamaz. Kodla açtığınız kitapların makrolarının etkin olduğundan emin olun.
  • İlgili konular: Workbook_Open olayı, Workbook_BeforeClose olayı, Workbooks.Open yöntemi, Workbook.Close yöntemi, Application.Run yöntemi, Application.EnableEvents özelliği, XlRunAutoMacro sabitleri.
Ö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