Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1628to1632
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makronamen auflisten

Makronamen auflisten
19.06.2018 13:35:59
Woto
Hallo zusammen,
wie kann ich die in eine Excel-Datei gespeicherten Makros ermitteln und als Liste ausgeben?
Hintergrund: Ich möchte mit Hilfe eines Formulars gespeicherte Makros ausführen. Dazu möchte ich als erstes die vorhandenen Makros in einer Liste anzeigen. Dann ein Makroname in der Liste markieren und über einen Button ausführen.
VG
Woto

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gibt's haufenweise in Google...
19.06.2018 13:45:22
Michael
Hallo,
bspw. https://excel.tips.net/T002715_Generating_a_List_of_Macros.html
oder. http://www.vbaexpress.com/kb/getarticle.php?kb_id=398
Sei Dir aber bewusst, dass Du dafür den Zugriff auf das VBA-Objektmodell freigeben musst!
LG
Michael
AW: Gibt's haufenweise in Google...
19.06.2018 13:49:34
Woto
Ok, vielen Dank. Ich hatte mit Google gesucht, aber leider nichts gefunden.
Deine Links werde ich mir gleich mal ansehen.
VG
Wolfgang
AW: Gibt's haufenweise in Google...
19.06.2018 15:01:02
Woto
Hallo,
ich habe das Beispiel vom ersten Link ausprobiert. Leider stürzt bei mir dann Excel ab.
Hier der Code:
Sub ListMacros()
Dim VBComp As VBComponent
Dim VBCodeMod As CodeModule
Dim oListsheet As Object
Dim StartLine As Long
Dim ProcName As String
Dim iCount As Integer
Application.ScreenUpdating = False
On Error Resume Next
Set oListsheet = ActiveWorkbook.Worksheets.Add
iCount = 1
oListsheet.[a1] = "Macro"
For Each VBComp In ThisWorkbook.VBProject.VBComponents
Set VBCodeMod = ThisWorkbook.VBProject.VBComponents(VBComp.Name).CodeModule
StartLine = VBCodeMod.CountOfDeclarationLines + 1
Do Until StartLine >= VBCodeMod.CountOfLines
oListsheet.[a1].Offset(iCount, 0).Value = VBCodeMod.ProcOfLine(StartLine,  _
vbext_pk_Proc)
iCount = iCount + 1
StartLine = StartLine + _
VBCodeMod.ProcCountLines(VBCodeMod.ProcOfLine(StartLine, vbext_pk_Proc),  _
vbext_pk_Proc)
Loop
Set VBCodeMod = Nothing
Next VBComp
Application.ScreenUpdating = True
End Sub

Die entsprechenden Verweise habe ich gemacht:
Userbild
Was mache ich falsch?
VG Wolfgang
Anzeige
AW: Gibt's haufenweise in Google...
19.06.2018 15:05:58
Woto
Vergessen zu erwähnen:
VBComp wurde kein Objekt zugewiesen.
Nach der Zeile "For Each VBComp In ThisWorkbook.VBProject.VBComponents" ist VBComp = nothing.
AW: Makronamen auflisten
19.06.2018 14:00:52
Nepumuk
Hallo Woto,
teste mal:
Option Explicit

Private Sub UserForm_Initialize()
    
    Dim objVBComponents As Object
    Dim lngLine As Long, ialngIndex As Long
    Dim strLastName As String, astrProcedures() As String
    
    'Alle oeffentlichen Prozeduren in Standardmodulen suchen
    For Each objVBComponents In ThisWorkbook.VBProject.VBComponents
        
        With objVBComponents.CodeModule
            
            'Nur in Standardmodulen
            If objVBComponents.Type = 1 Then
                
                'Schleife ueber alle Zeilen im Modul
                For lngLine = 1 To .CountOfLines
                    
                    'Prozedurname gefunden
                    If .ProcOfLine(lngLine, 0) <> vbNullString Then
                        
                        'Neuer Prozedurname
                        If .ProcOfLine(lngLine, 0) <> strLastName Then
                            
                            'Zeile ist nicht leer
                            If Trim$(.Lines(lngLine, 1)) <> vbNullString Then
                                
                                'Wenn es keine Function ist
                                If .Lines(lngLine, 1) Like "*Sub *()" Then
                                    
                                    'Name der Prozedur merken
                                    strLastName = .ProcOfLine(lngLine, 0)
                                    
                                    'Prozedur ist nicht Privat
                                    If Left$(.Lines(lngLine, 1), 7) <> "Private " Then
                                        
                                        'Prozedurne und Modulname an Listbox übergeben
                                        Call ListBox1.AddItem(pvargItem:=strLastName)
                                        
                                    End If
                                End If
                            End If
                        End If
                    End If
                Next
            End If
        End With
    Next
End Sub

Gruß
Nepumuk
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige