Menü-Einträge finden
Bisher war es immer sehr praktisch, dass die Menü-Einträge ihre Position nicht verändert haben. Spätestens bei solchen dynamischen Menüs oder auch schon beim Verändern eingebauter Menü-Einträge müssen Sie jedoch manchmal den gewünschten Menü-Eintrag erst suchen (lassen).
Dazu gibt es eine eigene FindControl-Methode einer Commandbar, die solche Menü-Einträge findet - oder auch nicht, denn sie enthält ein paar Tücken. Es gibt sie im Grunde in zwei Varianten, für eigene und für fremde Menü-Einträge.
Eigene Menü-Einträge finden
Wenn Sie eigene Menü-Einträge sicher wiederfinden möchten, sollten Sie diesen eine eindeutige Kennung geben, nämlich in der Tag-Eigenschaft. Die Suche nach einer Beschriftung ist riskant, denn das hier benutzte Wort "Spezial" könnte selbstverständlich von jedem anderen AddIn schon eingesetzt worden sein.
Daher sollten Sie die MacheMenue-Prozedur um die hier fett markierte Zeile ergänzen und erneut starten. Denken Sie immer auch daran, vorher EntferneSpezial auszuführen, damit nicht doch noch Duplikate vorhanden sind.
Sub MacheMenue() ' wie bisher With cbpSpezial .Caption = "Spe&zial" .BeginGroup = True .Tag = "akademieSpezial" ' wie bisher End Sub
Erst jetzt können Sie den Menü-Titel sicher wiederfinden, weil er ein eindeutiges Tag enthält. Das darf auch außerhalb eines Menü-Aufrufs geschehen, hier zu Testzwecken mit dem folgenden Code:
Sub MenueSpezialEintragFinden()
Dim cbpSpezial As CommandBarPopup
CustomizationContext = ThisDocument
Set cbpSpezial = Application.CommandBars("Menu bar").FindControl(msoControlPopup, , "akademieSpezial")
If cbpSpezial Is Nothing Then
MsgBox "Leider nicht gefunden...", vbCritical
Else
MsgBox "Treffer! Das Menü heißt: '" & cbpSpezial.Caption & "'"
End If
End SubDabei müssen Sie vor allem darauf achten, dass der Objekt-Typ stimmt! Hier wird ein Menütitel gesucht, der also als CommandBarPopup deklariert und mit msoControlPopup gefunden werden muss.
