Genel Bakış
RunAutoMacros (Workbook.RunAutoMacros), bir çalışma kitabında saklanan Aut
pen, 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.
pen 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 Aut
pen, kapattığında Auto_Close kendiliğinden çalışır. Kitap Workbooks.Open ile kodla açılırsa Aut
pen ç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. Aut
Bu örnekte kitabın standart modülünde hem Aut
pen hem Auto_Close makrosu vardır. Aut
pen, 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. Aut
pen ve Auto_Close adları kitapta başka hiçbir modülde bulunmamalıdır.
AcilisKapanisDene çalışınca önce xlAutoOpen ile Aut
pen makrosu başlar ve C2 hücresine Aut
pen ç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.
pen 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 Aut
pen ve Auto_Close adlı yordam tanımlamayın, çünkü bu adlar kitapta bir kez geçmelidir.
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 Aut
pen kendiliğinden çalışmaz, ancak sonraki RunAutoMacros satırı kitabın Aut
pen 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.
pen ya da Auto_Close yordamı yoktur.
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.
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.
Which sabitleri
Which bağımsız değişkeni için şu sabitler kullanılır:- xlAutoOpen (1): Kitaptaki Aut
pen 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.
Otomatik makrolar ne zaman çalışır
AutYö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. Aut
pen ve Auto_Close makrolarını kodla çalıştırma
Bu örnekte kitabın standart modülünde hem Aut
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.| A | B | C | |
|---|---|---|---|
| 1 | Aşama | Makro | Sonuç |
| 2 | Açılış | Auto_Open | Auto_Open çalıştı |
| 3 | Kapanış | Auto_Close |
GünlükExcelDepo v1.0.0
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 Aut
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.| A | B | C | |
|---|---|---|---|
| 1 | Adım | İşlem | Kullanılan öğe |
| 2 | 1 | Dosyanın varlığını denetle | Dir |
| 3 | 2 | Kitabı kodla aç | Workbooks.Open |
| 4 | 3 | Açılış makrosunu başlat | RunAutoMacros |
Rapor KitabıExcelDepo v1.0.0
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 Aut
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.| A | B | C | |
|---|---|---|---|
| 1 | Sabit | Çalıştırdığı makro | Değer |
| 2 | xlAutoOpen | Auto_Open | 1 |
| 3 | xlAutoClose | Auto_Close | 2 |
| 4 | xlAutoActivate | Auto_Activate | 3 |
| 5 | xlAutoDeactivate | Auto_Deactivate | 4 |
SabitlerExcelDepo v1.0.0
Kullanırken dikkat edin
- Yalnız ilk bulunan makro çalışır: Aynı adlı Aut
pen 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 Aut
pen bu amaçla kullanılmaz. Ad da birebir Aut
pen, 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.