VBA: Menüs ändern und erzeugen

Benutzerdefinierte Menüs, ganz nach Wunsch!

Von: Lorenz Hölscher
Stand: 4. Mai 2011
Anmelden um Kommentare zu schreiben

Downloads zu diesem Beitrag

Über den Autor: Lorenz Hölscher

bild80517

Lorenz Hölscher ist freiberuflicher Dozent, Berater und Programmierer mit Schwerpunkt Anwendungs-Programmierung. Vorrangig widmet er sich Access, Word und Excel sowie begleitenden grafischen Arbeiten. Er legt viel Wert auf benutzerfreundliche Oberflächen und ordentliches Design in Optik und Programmierung. Zu Hilfe kommen ihm da seine langjährigen "branchenfremden" Erfahrungen als Architekt, Layouter und Designer.

Lorenz Hölscher bietet eigene Hilfeseiten an und hat bei Microsoft Press mehrere Bücher veröffentlicht zu Access 2007, Access 2007 VBA, Word 2007 VBA und Access 2010.

Beiträge des Autors als Atom-Feed Atom-Feed: Neues von akademie.de

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 Sub

Dabei 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.

Diese Seite ist für Mitglieder von akademie.de reserviert.

Möchten Sie die Mitgliedschaft 14 Tage kostenlos testen und den Beitrag komplett lesen?

Ich bin bereits Mitglied
Jetzt Probemitglied werden
Ich kann in den 14 Tagen Probezeit formlos z.B. per E-Mail stornieren. Wenn ich das nicht tue, entscheide ich mich für ein