Freigeben über


Abrufen der Namen von Makros aus einer Excel-Arbeitsmappe mithilfe von Visual Basic 6.0

Zusammenfassung

In diesem Schritt-für-Schritt-Artikel wird die Verwendung von Visual Basic 6.0 zum Abrufen der Namen von Makros aus einer Excel-Arbeitsmappe beschrieben.

Anforderungen

In den folgenden Artikeln werden die empfohlenen Hardware, Software, Netzwerkinfrastruktur, Kenntnisse und Service Packs beschrieben, die Sie benötigen:

  • Excel 2000, Excel 2002, Office Excel 2003 oder Office Excel 2007
  • Excel-Makros
  • Visual Basic for Applications

Erstellen einer Excel-Arbeitsmappe mit zwei Makros

  1. Starten Sie Excel. Eine neue leere Arbeitsmappe wird erstellt.

  2. Drücken Sie ALT+F11, um den Visual Basic-Editor zu starten.

  3. Doppelklicken Sie im Projekt-Explorer auf "ThisWorkbook ", um den Code-Editor zu starten.

  4. Fügen Sie den folgenden Code für zwei einfache Makros in den Code-Editor ein:

    Option Explicit
    
    Sub Macro_A()
        MsgBox "This is Macro A"
    End Sub
    
    Sub Macro_B()
        MsgBox "This is Macro B"
    End Sub
    
  5. Schließen Sie den Visual Basic-Editor, und kehren Sie zur Tabellenkalkulationsansicht zurück.

  6. Speichern Sie die Arbeitsmappe in Excel 2003 und in früheren Versionen von Excel als C:\Abc.xls.

    Speichern Sie die Arbeitsmappe in Excel 2007 als arbeitsmappe mit Makros mit dem Namen "C:\Abc.xlsm".

  7. Schließen Sie die Arbeitsmappe, und beenden Sie Excel.

Erstellen einer Visual Basic-Anwendung zum Auflisten der Makros in der Arbeitsmappe

  1. Erstellen Sie in Visual Basic 6.0 ein neues Standard EXE-Projekt.

  2. Klicken Sie im Menü "Projekt " auf "Verweise". Wählen Sie im Dialogfeld "Verweise " die folgenden Verweise aus:

    • Microsoft Visual Basic for Applications Extensibility 5.3
    • Für Microsoft Excel 2000: Microsoft Excel 9.0-Objektbibliothek
    • Für Microsoft Excel 2002: Microsoft Excel 10.0-Objektbibliothek
    • Für Microsoft Office Excel 2003: Microsoft Excel 11.0-Objektbibliothek
    • Für Microsoft Office Excel 2007: Microsoft Excel 12.0-Objektbibliothek
  3. Klicken Sie auf OK.

  4. Fügen Sie dem Formular eine Schaltfläche hinzu. Die Schaltfläche hat den Standardnamen "Command1".

  5. Fügen Sie dem Formular ein Listenfeld hinzu. Das Listenfeld hat den Standardnamen "List1".

  6. Definieren Sie eine Klickereignishandlerprozedur für die Schaltfläche. Verwenden Sie den folgenden Code für dieses Verfahren, um Informationen zu den Makros anzuzeigen, die in C:\Abc.xls definiert sind:

    Private Sub Command1_Click()
        ' Declare variables to access the Excel workbook.
        Dim objXLApp As Excel.Application
        Dim objXLWorkbooks As Excel.Workbooks
        Dim objXLABC As Excel.Workbook
    
    ' Declare variables to access the macros in the workbook.
        Dim objProject As VBIDE.VBProject
        Dim objComponent As VBIDE.VBComponent
        Dim objCode As VBIDE.CodeModule
    
    ' Declare other miscellaneous variables.
        Dim iLine As Integer
        Dim sProcName As String
        Dim pk As vbext_ProcKind
    
    ' Open Excel, and open the workbook.
        Set objXLApp = New Excel.Application
        Set objXLWorkbooks = objXLApp.Workbooks    
        Set objXLABC = objXLWorkbooks.Open("C:\ABC.XLS")
    
    ' Empty the list box.
        List1.Clear
    
    ' Get the project details in the workbook.
        Set objProject = objXLABC.VBProject
    
    ' Iterate through each component in the project.
        For Each objComponent In objProject.VBComponents
    
    ' Find the code module for the project.
            Set objCode = objComponent.CodeModule
    
    ' Scan through the code module, looking for procedures.
            iLine = 1
            Do While iLine < objCode.CountOfLines
                sProcName = objCode.ProcOfLine(iLine, pk)
                If sProcName <> "" Then
                    ' Found a procedure. Display its details, and then skip 
                    ' to the end of the procedure.
                    List1.AddItem objComponent.Name & vbTab & sProcName
                    iLine = iLine + objCode.ProcCountLines(sProcName, pk)
                Else
                    ' This line has no procedure, so go to the next line.
                    iLine = iLine + 1
                End If
            Loop
            Set objCode = Nothing
            Set objComponent = Nothing
        Next
    
    Set objProject = Nothing
    
    ' Clean up and exit.
        objXLABC.Close
        objXLApp.Quit
    End Sub
    
    

Testen des Beispiels

  1. Erstellen Sie die Anwendung, und führen Sie sie aus.
  2. Klicken Sie auf die Befehlsschaltfläche. Im Listenfeld werden die Namen aller Makros und der Arbeitsmappe, die sie enthalten, wie folgt angezeigt: ThisWorkbook Macro_A ThisWorkbook Macro_B

Problembehandlung

Aufgrund erweiterter Sicherheitsbestimmungen in Excel 2002, Excel 2003 und Excel 2007 erhalten Sie möglicherweise die folgende Fehlermeldung aus dem Visual Basic-Programm, wenn Sie Excel 2002, Excel 2003 oder Excel 2007 verwenden: Der programmgesteuerte Zugriff auf Visual Basic Project ist nicht vertrauenswürdig.

Weitere Informationen zu diesem Problem und dessen Behebung erhalten Sie, indem Sie auf die folgende Artikelnummer klicken, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

282830 PRB: Programmgesteuerter Zugriff auf Office XP VBA-Projekt wird verweigert

References

Weitere Informationen finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

Microsoft Office-Entwicklung mit Visual Studio

Weitere Informationen finden Sie in folgendem Artikel der Microsoft Knowledge Base:

219905 Dynamisches Hinzufügen und Ausführen eines VBA-Makros aus Visual Basic