Die Syntax der Aufrufe von VBA-Programmen und -Unterprogrammen mit oder ohne Übergabe von Parametern kann sehr unterschiedlich sein. Achten Sie bitte bei Ihren VBA-Programmierungen darauf, daß Sie Unterprogramme, die sich in der gleichen Arbeitsmappe wie die aufrufende Prozedur befinden, immer mit Call aufrufen:
Call Unterprogramm
Das vorangestellte Call ist optional, sollte aber im Interesse der Übersichtlichkeit des Codes dennoch verwendet werden.
Weichen Sie von dieser Regel nur dann ab, wenn Sie aus Alaufgründen den Namen der aufzurufenden Unterprozedur variabel halten müssen. Weiter unten folgt hierfür ein Beispiel.
Befindet sich die aufzurufende Prozedur in einem Klassenmodul und der Aufruf erfolgt aus einem anderen Modul, so ist dem Aufruf die Klasse voranzustellen:
Call Tabelle1.Unterprogramm
Als Private deklarierte Funktionen können nicht aufgerufen werden.
Prozeduren in anderen Arbeitsmappen oder Anwendungen werden mit Run gestartet, wobei der Makroname zusammen mit dem Namen des Container-Dokuments als String übergeben wird:
Run "Mappe1!MeinMakro"
Hierbei ist zu beachten:
Run "c:\mappe1.xls!Meldung"</li>
Das aufzurufende Unterprogramm befindet sich in einem Standardmodul der aufrufenden Arbeitsmappe.
Sub CallSimple()
MsgBox "Ein normaler Aufruf!"
End Sub
Sub CallFunction()
MsgBox "Anzahl der Punkte der Schaltfläche: " & vbLf & _
CStr(GetPixel(ActiveSheet.Buttons(Application.Caller)))
End Sub
Sub CallWkbA()
Dim sFile As String
Dim wkb As Workbook
sFile = "vb07_test.xls"
On Error Resume Next
Set wkb = Workbooks(sFile)
On Error GoTo 0
If wkb Is Nothing Then
MsgBox "Die Testarbeitsmappe " & sFile & " wurde nicht gefunden!"
Else
Run sFile & "!Meldung"
End If
End Sub
Sub CallWkbB()
Dim sFile As String
Dim wkb As Workbook
sFile = "vb07_test.xls"
On Error Resume Next
Set wkb = Workbooks(sFile)
On Error GoTo 0
If wkb Is Nothing Then
MsgBox "Die Testarbeitsmappe " & sFile & " wurde nicht gefunden!"
Else
MsgBox Run(sFile & "!CallerName", Application.Caller)
End If
End Sub
Sub CallWkbC()
Dim sFile As String
Dim wkb As Workbook
sFile = "vb07_test.xls"
On Error Resume Next
Set wkb = Workbooks(sFile)
On Error GoTo 0
If wkb Is Nothing Then
MsgBox "Die Testarbeitsmappe " & sFile & " wurde nicht gefunden!"
Else
Run sFile & "!Tabelle1.CallClassModule"
End If
End Sub
Sub CallWord()
Dim wdApp As Object
Dim sFile As String
sFile = ThisWorkbook.Path & "\vb07_WordTest.doc"
If Dir(sFile) = "" Then
MsgBox "Test-Word-Dokument " & sFile & " wurde nicht gefunden!"
Else
Set wdApp = CreateObject("Word.Application")
wdApp.documents.Open sFile
wdApp.Run "Project.Modul1.WdMeldung"
wdApp.Quit
Set wdApp = Nothing
End If
End Sub
Sub CallAccess()
Dim accApp As Object
Dim sFile As String
sFile = ThisWorkbook.Path & "\vb07_AccessTest.mdb"
If Dir(sFile) = "" Then
Beep
MsgBox "Access-Datenbank wurde nicht gefunden!"
Else
Set accApp = CreateObject("Access.Application")
accApp.OpenCurrentDatabase sFile
accApp.Run "AcMeldung"
accApp.CloseCurrentDatabase
Set accApp = Nothing
End If
End Sub
Sub CallMacros()
Dim sMacro As String
sMacro = Right(Application.Caller, 6)
MsgBox "Ich verzweige jetzt zu " & sMacro
Run sMacro
End Sub