AW: Namen von Prozeduren auslesen
14.11.2025 01:57:06
Yal
Moin Siegfried,
bei Gemini folgende Frage gestellt
"Welche VBA Code muss ich in Excel verwenden, um alle Procedure-Zeilen (SUB, function, ...) in allen Modulen zu extrahieren und in einem Arbeitsblatt abzulegen?"
Und diesen Code bekommen:
Sub ProzedurDefinitionenExtrahieren()
' Verweis auf 'Microsoft Visual Basic for Applications Extensibility 5.3' erforderlich!
Dim wsOutput As Worksheet
Dim wb As Workbook
Dim vbc As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim lngLine As Long
Dim strLine As String
Dim lngRow As Long
Set wb = ThisWorkbook
' Neues Arbeitsblatt erstellen oder das vorhandene 'Prozeduren' verwenden
On Error Resume Next
Set wsOutput = wb.Worksheets("ProzedurListe")
On Error GoTo 0
If wsOutput Is Nothing Then
Set wsOutput = wb.Worksheets.Add(After:=wb.Sheets(wb.Sheets.Count))
wsOutput.Name = "ProzedurListe"
Else
' Vorhandene Daten löschen
wsOutput.UsedRange.Clear
End If
' Kopfzeilen schreiben
lngRow = 1
wsOutput.Cells(lngRow, 1).Value = "Komponente"
wsOutput.Cells(lngRow, 2).Value = "Zeilennummer"
wsOutput.Cells(lngRow, 3).Value = "Definition"
lngRow = lngRow + 1
' Alle Komponenten durchlaufen
For Each vbc In wb.VBProject.VBComponents
' Nur Komponenten mit Code verarbeiten (Standardmodule, Klassen, Formulare, Tabellenblätter)
If vbc.Type = vbext_ct_StdModule Or _
vbc.Type = vbext_ct_ClassModule Or _
vbc.Type = vbext_ct_Document Or _
vbc.Type = vbext_ct_MSForm Then
Set CodeMod = vbc.CodeModule
' Alle Zeilen im CodeModul durchlaufen
For lngLine = 1 To CodeMod.CountOfLines
strLine = Trim(CodeMod.Lines(lngLine, 1))
' Prüfen, ob die Zeile eine Prozedur-Definition enthält
If StrComp(Left(strLine, 3), "Sub", vbTextCompare) = 0 Or _
StrComp(Left(strLine, 8), "Function", vbTextCompare) = 0 Or _
StrComp(Left(strLine, 10), "Private Sub", vbTextCompare) = 0 Or _
StrComp(Left(strLine, 11), "Public Sub", vbTextCompare) = 0 Or _
StrComp(Left(strLine, 14), "Private Function", vbTextCompare) = 0 Or _
StrComp(Left(strLine, 13), "Public Function", vbTextCompare) = 0 Then
' Ergebnisse in das Arbeitsblatt schreiben
wsOutput.Cells(lngRow, 1).Value = vbc.Name
wsOutput.Cells(lngRow, 2).Value = lngLine
wsOutput.Cells(lngRow, 3).Value = strLine
lngRow = lngRow + 1
End If
Next lngLine
End If
Next vbc
' Formatierung
With wsOutput.UsedRange
.Columns.AutoFit
.Font.Name = "Consolas" ' Bessere Lesbarkeit für Code
.Rows(1).Font.Bold = True
End With
wsOutput.Activate
MsgBox "Die Prozedur-Definitionen wurden erfolgreich im Arbeitsblatt 'ProzedurListe' extrahiert.", vbInformation
End Sub
nicht getestet, aber sieht sehr ähnlichen aus, zu einem Code, den Ich vor ein paar Jahren per Hand und mit biologischer Intelligenz geschrieben hatte.
VG
Yal (+Gemini)