2
www.ChF-Online.de  

Makronamen von Menü- und Symbolleisteneinträgen ermitteln

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
 Verschiedenes
 Feld-Arbeiten
 Form-Sachen
aktiv aktiv Menü-/Symbolleisten
 Dynamische Symbole
 Symbolleisten ausblenden
aktiv  Menümakros identifizieren
 Menüleisten (I)
 Menüleisten (II)
 Menü-/Symbolleisten-Schutz
 Gruppenschaltflächen
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
 Fix-und-Fertiges/Projekte
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
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!


 Besucher: 4 online  |  28 heute  |  2628 diesen Monat  |  1593781 insgesamt | Seitenaufrufe: 62   Letzte Änderung: 24.06.2006 © 2001-14 Christian Freßdorf
  Was ist der Unterschied zwischen einer Dame und einem Diplomaten?
-- Sagt ein Diplomat "ja", meint er "vielleicht", sagt er "vielleicht", meint er "nein", und sagt er "nein", ist er kein Diplomat.
-- Sagt eine Dame "nein", meint sie "vielleicht", sagt sie "vielleicht", meint sie "ja", und sagt die "ja", ist sie keine Dame.
Charles Maurice de Talleyrand, 1754-1838, frz. Staatsmann
 powered by phpCMS and PAX