Aktuelle Seite:
/vba/vbamakronamen.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXP  
Beispiel anzeigen
Makro/Datei speichern
Print

Wer kennt vielleicht nicht folgendes Problem:
Da hat man in die Symbol- oder Menüleiste eine ganze Reihe eigener Makros eingefügt und auch aussagekräftige Namen vergeben, und dann weiss man nicht mehr, in welcher Dokumentvorlage sich diese Makros befinden und wie sie heißen.

Eigentlich sollte es nicht so schwer sein, an die Makro-Informationen heranzukommen, werden doch alle Informationen beim Einfügen in eine Leiste angezeigt.
Leider gehen diese Informationen größtenteils beim Umbenennen verloren, so dass die Modul- und Vorlagennamen erst wieder ermittelt werden müssen.

Das folgende Makro durchläuft alle Control-Einträge der angegebene Symbol- oder Menüleiste. Über die .OnAction-Eigenschaft wird der Makroname ausgelesen, wobei sich dieser aus dem Modul- gefolgt vom Prozedurnamen zusammensetzt. In der Funktion  fkt_IstFVVorhanden wird dann die zugehörende Dokumentvorlage gesucht.

Sub MenueMakroErmitteln()  
' Ermitteln, wie ein MenüMakro heisst und _  
  in welcher Vorlage es gespeichert ist.  
' Fängt Fehler bei  
On Error Resume Next 
Dim cbTest As CommandBar 
Dim ctlTest As CommandBarControl 
Dim strRet, msg, strProz, strLeiste As String 
Dim iRet As Integer 
strLeiste = "Test"
' Für eine Symbolleiste "Test"  
Set cbTest = CommandBars(strLeiste)
If cbTest Is Nothing Then 
  MsgBox "Symbolleiste >" & strLeiste & "< nicht gefunden!", vbCritical, "Fehler"
  Exit Sub 
End If 
' Für die Menüleiste  
'Set cbTest = CommandBars("Menu Bar")  
For Each ctlTest In cbTest.Controls
' Für den Menüleisteneintrag "Eigenes"  
'For Each ctlTest In cbTest.Controls("Eigenes").Controls  
  ' Nur für eingene Makros  
  With ctlTest
    If .BuiltIn = False Then 
      msg = .Index & ".Eintrag:" & vbCrLf 
      msg = msg & "Name:" & vbTab & .Caption & vbCrLf 
      strProz = Right(.OnAction, Len(.OnAction) - InStr(1, .OnAction, "."))
      msg = msg & "Makro:" & vbTab & strProz & vbCrLf 
      strMod = Left(.OnAction, InStr(1, .OnAction, ".") - 1)
      msg = msg & "Modul:" & vbTab & strMod & vbCrLf 
      strRet = fkt_IstFVVorhanden(strMod)
      msg = msg & "Vorlage:" & vbTab & strRet & vbCrLf 
      If .Index = cbTest.Controls.Count Then 
        msg = msg & vbCrLf 
        iRet = MsgBox(msg, vbInformation, "Makronamen im Menü ermitteln")
      Else 
        msg = msg & vbCrLf & vbCrLf & vbTab & "Nächster Eintrag?"
        iRet = MsgBox(msg, vbYesNo, "Makronamen im Menü ermitteln")
        If iRet = 7 Then Exit Sub 
      End If 
    End If 
  End With 
Next ctlTest
Set cbTest = Nothing 
End Sub  

In der Funktion fkt_IstFVVorhanden wird der als Aufrufparameter angegebene Modulname mit allen Einträgen in allen verfügbaren Dokumentvorlagen verglichen. Wird der Modulname gefunden, wird der Name der Dokumentvorlage, die dieses Modul beinhaltet, zurückgeliefert.

Public Function fkt_IstFVVorhanden(ByVal strProz As String) As String  
Dim MyProj  As VBProjects 
Dim MyComp  As VBComponents 
Dim MyComp2  As VBComponent 
Dim i, j As Integer 
fkt_IstFVVorhanden = "->Nicht vorhanden<-"
On Error Resume Next 
Set MyProj = Application.VBE.VBProjects
For i = 1 To MyProj.Count
  Set MyComp = Application.VBE.VBProjects(i).VBComponents
  If Not MyComp Is Nothing Then 
    For j = 1 To MyComp.Count
      If MyComp(j).Name = strProz And MyComp(j).Name <> "" Then 
        fkt_IstFVVorhanden = MyProj(i).Name & ".dot"
        Exit Function 
      End If 
    Next j
  End If 
Next i
End Function  

Wichtig:
Damit auf die Projekte und Module zugegriffen werden kann, muss in der IDE ein Verweis (Extras/Verweise) auf die

Microsoft Visual Basic for Applications Extensibility 5.3

gesetzt sein!


 www.chf-online.de/vba/vbamakronamen.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)