VBA-Spezialthema "Auto-Makros"
Allgemeines über das Thema "Auto-Makros"
Interessantes über Auto-Makros
Auto_Open-Makro auf der ersten Codezeile anhalten
Aufruf eines Auto-Makros mit "Call" oder "RunAutoMacros"
Ungewöhnliches Verhalten der RunAutoMacros-Methode
Doppelte Deklaration einer Auto-Makro-Prozedur
Diese Seite ist in Bearbeitung! |
Allgemeines über das Thema "Auto-Makros"
Sehr wahrscheinlich kennen die meisten Excel-Anwender und -Programmierer den Zweck von so genannten Auto-Makros.
Weitere Informationen |
|
Interessantes über Auto-Makros
Stellen Sie sich einmal vor, Sie möchten eine Arbeitsmappe öffnen, ohne dass ein allfällig enthaltenes Auto_Open-Makro (oder die Workbook_Open-Prozedur)
Anweisung Application.Caller in Auto_Open- oder Auto_Close-Prozedur.
Sub Auto_Open()
MsgBox Application.Caller
End Sub
Auto_Open-Makro auf der ersten Codezeile anhalten
Stellen Sie sich einmal vor, Sie möchten eine Arbeitsmappe öffnen, ohne dass ein allfällig enthaltenes Auto_Open-Makro (oder die Workbook_Open-Prozedur) ausgeführt werden soll.
|
|
|
Aufruf eines Auto-Makros mit "Call" oder "RunAutoMacros"
Call Auto_Open
- oder -
ThisWorkbook.RunAutoMacros which:=xlAutoOpen
Sub Auto_Open()
MsgBox Application.Caller
End Sub
Bei Aufrufen der Auto_Open-Prozedur mit "Call Auto_Open" erzeugt die Abfrage von Application.Caller den Laufzeitfehler 13.
The "Call Auto_Close" can cause the error 13. Use "ThisWorkbook.RunAutoMacros which:=xlAutoClose" instead of "Call". This example shows why:
Sub TestAutoClose()
On Error GoTo ErrorHandler
Err.Raise 62 'Simulate error 62
Exit Sub
ErrorHandler:
MsgBox Err.Number & ": " & Err.Description
Call Auto_Close
'ThisWorkbook.RunAutoMacros which:=xlAutoClose
End Sub
Sub Auto_Close()
MsgBox Application.Caller
End Sub
Check these tests:
- When you start the "TestAutoClose" in the VBE, you'll get the error 13.
Because the error is raised within the errorhandler, you can't trap him.
- When you start the procedure in Excel (ToolBar Button, CommandButton, embedded Object
...), you'll get no error!
Now set the "Call ..." as comment and use
"RunAutoMacros" instead.
- When you start the proc in the VBE or in Excel, you receive no error.
Ungewöhnliches Verhalten der RunAutoMacros-Methode
Das Starten von Auto-Makros mittels der RunAutoMacros-Methode funktioniert in bestimmten Situationen nicht korrekt. Immer wenn zwei Auto-Makros nacheinander innerhalb der gleichen Prozedur aufgerufen werden, wird der zweite Aufruf nicht ausgeführt.
Sub ExecuteAutoMacro()
ThisWorkbook.RunAutoMacros which:=xlAutoOpen
ThisWorkbook.RunAutoMacros which:=xlAutoClose
Debug.Print "Fertig"
End Sub
Sub Auto_Open()
Debug.Print "Auto_Open-Makro"
End Sub
Sub Auto_Close()
Debug.Print "Auto_Close-Makro"
End Sub
Weitere Informationen |
|
Doppelte Deklaration einer Auto-Makro-Prozedur
Bekanntlich befindet sich das Auto_Open-Makro in einem Standardmodul.
Sub Auto_Open()
MsgBox "Auto_Open"
End Sub
Public Sub Auto_Open()
MsgBox "Auto_Open"
End Sub
Private Sub Auto_Open()
MsgBox "Auto_Open"
End Sub
Der Gültigkeitsbereich der Prozedur ist egal.
Beim Kompilieren des Programmes wird eine mehrfach vorhandene Auto_Open-Prozedur nicht erkannt.

Aufruf-Sequenz:
1. Workbook_Open
2. Workbook_Activate
3. Workbook_WindowActivate
4. Auto_Open
Aufruf-Sequenz (ohne Speichern):
1. Workbook_BeforeClose
2. Auto_Close
3. Workbook_WindowDeactivate
4. Workbook_Deactivate
Aufruf-Sequenz (mit Speichern):
1. Workbook_BeforeClose
2. Auto_Close
3. Rückfrage "Änderungen speichern?"
4. Workbook_WindowDeactivate
5. Workbook_Deactivate
Auto_Close wird ausgeführt, bevor die Rückfrage "Sollen Ihre Änderungen in <Datei.xls> gespeichert werden?" erscheint.
Zuletzt aktualisiert am
6.05.2005 / 17:00 Uhr
© 2002-2005 by Philipp von Wartburg, CH-8916 Jonen
Alle Rechte vorbehalten