HERBERS Excel-Forum - VBA-Basics

Thema: Prozeduraufrufe

Inhaltsverzeichnis
  • 1 Die Aufruf-Syntax
  • 2 Die Programmierbeispiele
  • Die Aufruf-Syntax

    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:

    • Dateinamen mit Leerzeichen müssen im Run-Aufruf in Apostrophs gesetzt werden
    • Die mit Run aufgerufene Arbeitsmappe wird - wenn nicht geöffnet - im aktuellen Verzeichnis (CurDir) gesucht. Nicht machbar ist:
      
        Run "c:\mappe1.xls!Meldung"</li>
      
      

    Die Programmierbeispiele

    • Aufruf eines Makros in der aktuellen Arbeitsmappe ohne Paramterübergabe

      Das aufzurufende Unterprogramm befindet sich in einem Standardmodul der aufrufenden Arbeitsmappe.

      • Prozedur: CallSimple
      • Art: Sub
      • Modul: Standardmodul
      • Zweck: Unterprogramm aufrufen
      • Ablaufbeschreibung:
        • Makroaufruf
      • Code:
        
        Sub CallSimple()
           MsgBox "Ein normaler Aufruf!"
        End Sub
        
    • Aufruf einer Funktion in der aktueller Arbeitsmappe mit Parameterübergabe

      • Prozedur: CallFunction
      • Art: Sub
      • Modul: Standardmodul
      • Zweck: Funktion mit Parameter aufrufen und Funktionsergebnis melden
      • Ablaufbeschreibung:
        • Meldung eines von einer Funktion ermittelten Wertes
      • Code:
        
        
        Sub CallFunction()
           MsgBox "Anzahl der Punkte der Schaltfläche: " & vbLf & _
              CStr(GetPixel(ActiveSheet.Buttons(Application.Caller)))
        End Sub
        
    • Aufruf eines Makros in einer anderen Arbeitsmappe ohne Paramterübergabe

      • Prozedur: CallWkbA
      • Art: Sub
      • Modul: Standardmodul
      • Zweck: Makro einer anderen Arbeitsmappe ohne Parameter aufrufen
      • Ablaufbeschreibung:
        • Variablendeklaration
        • Arbeitsmappenname an String-Variable übergeben
        • Fehlerroutine starten
        • Arbeitsmappe an Objektvariable übergeben
        • Fehlerroutine beenden
        • Wenn die Arbeitsmappe nicht geöffnet ist...
        • Negativmeldung
        • Sonst...
        • Makro in anderer Arbeitsmappe starten
      • Code:
        
        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
        
        
    • Aufruf einer Funktion in einer anderen Arbeitsmappe mit Paramterübergabe

      • Prozedur: CallWkbB
      • Art: Sub
      • Modul: Standardmodul
      • Zweck: Funktion einer anderen Arbeitsmappe mit Parameter aufrufen
      • Ablaufbeschreibung:
        • Variablendeklaration
        • Arbeitsmappenname an String-Variable übergeben
        • Fehlerroutine starten
        • Arbeitsmappe an Objektvariable übergeben
        • Fehlerroutine beenden
        • Wenn die Arbeitsmappe nicht geöffnet ist...
        • Negativmeldung
        • Sonst...
        • Funktion in anderer Arbeitsmappe aufrufen und Ergebnis melden
      • Code:
        
        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
        
    • Aufruf eines Makros in einem Klassenmodul einer anderen Arbeitsmappe

      • Prozedur: CallWkbC
      • Art: Sub
      • Modul: Standardmodul
      • Zweck: Ein Makro im Klassenmodul einer anderen Arbeitsmappe aufrufen
      • Ablaufbeschreibung:
        • Variablendeklaration
        • Arbeitsmappenname an String-Variable übergeben
        • Fehlerroutine starten
        • Arbeitsmappe an Objektvariable übergeben
        • Fehlerroutine beenden
        • Wenn die Arbeitsmappe nicht geöffnet ist...
        • Negativmeldung
        • Sonst...
        • Makro in anderer Arbeitsmappe starten
      • Code:
        
        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
        
    • Word-Makro aus Excel-Arbeitsmappe aufrufen

      • Prozedur: CallWord
      • Art: Sub
      • Modul: Standardmodul
      • Zweck: Ein Makro in einem Word-Dokument aufrufen
      • Ablaufbeschreibung:
        • Variablendeklaration
        • Name des Worddokumentes an String-Variable übergeben
        • Wenn die Datei nicht existiert...
        • Negativmeldung
        • Sonst...
        • Word-Instanz bilden
        • Word-Dokument öffnen
        • Word-Makro aufrufen
        • Word-Instanz schließen
        • Objektvariable zurücksetzen
      • Code:
        
        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
        
    • Access-Makro aus Excel-Arbeitsmappe aufrufen

      • Prozedur: CallAccess
      • Art: Sub
      • Modul: Standardmodul
      • Zweck: Ein Makro in einer Access-Datenbank aufrufen
      • Ablaufbeschreibung:
        • Variablendeklaration
        • Name der Access-Datenbank an String-Variable übergeben
        • Wenn die Datei nicht existiert...
        • Negativmeldung
        • Sonst...
        • Acess-Instanz bilden
        • Access-Datenbank öffnen
        • Access-Makro aufrufen
        • Access-Instanz schließen
        • Objektvariable zurücksetzen
      • Code:
        
        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
        
    • Aufruf von Prozeduren in der aktuellen Arbeitsmappe mit variablen Makronamen

      • Prozedur: CallMacros
      • Art: Sub
      • Modul: Standardmodul
      • Zweck: Makros mit variablen Makronamen aufrufen
      • Ablaufbeschreibung:
        • Variablendeklaration
        • Das letzte 6 Zeichen des Namens der aufrufenden Schaltfläche an eine String-Variable übergeben
        • Meldung, dass jetzt zu dem Makro mit dem in der String-Variablen hinterlegten Namen verzweigt wird
        • Makro mit dem in der String-Variablen hinterlegten Namen aufrufen
      • Code:
        
        Sub CallMacros()
           Dim sMacro As String
           sMacro = Right(Application.Caller, 6)
           MsgBox "Ich verzweige jetzt zu " & sMacro
           Run sMacro
        End Sub