
Ich verwende Excel 2007. Für diese Frage lautet der Name meiner Arbeitsmappe PrintCode.xlsm
Gibt es ein Makro oder einen VBA-Code, der alle Makronamen und den Code in der geöffneten Arbeitsmappe druckt?
Ich habe im Internet einige Beispiele gefunden, aber keines scheint zu funktionieren?
Antwort1
Ich habe das hier gefunden, es sieht so aus, als ob es das ist, was Sie brauchen:So rufen Sie die Namen von Makros aus einer Excel-Arbeitsmappe mithilfe von Visual Basic 6.0 ab:
Definieren Sie eine Click-Eventhandlerprozedur für die Schaltfläche. Verwenden Sie für diese Prozedur den folgenden Code, 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