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ü erstellen

Benutzerdefinierte Menüs lassen sich in allen MS Office-Programmen einfach mit der Maus im Dialog zusammenstellen und sind dann fertig. Fertig? Nein, denn Lorenz Hölscher zeigt Ihnen, wie Sie da mit ein wenig VBA-Programmierung noch viel mehr herausholen.

Die folgenden Beispiele wurden in Word erstellt, funktionieren aber mit geringfügigen Änderungen (ThisDocument heißt in Excel ThisWorkbook oder in Access CodeDB) auch in den übrigen MS Office-Programmen.

Menü-Titel erstellen

Auch wenn sich ein einfaches Menü sehr schnell im SymbolleistenAnpassen-Dialog (Ansicht/Symbolleisten/Anpassen) erstellen lässt, bietet es doch Vorteile, schon dies per VBA zu erledigen. Zum einen lernen Sie dabei alle Strukturen und Befehle kennen, die Sie anschließend ohnehin benötigen. Zum anderen stehen Ihnen damit Möglichkeiten offen, die Sie sonst nicht hätten.

Der folgende Code fügt in der Standard-Menüleiste einen neuen Menütitel namens "Spezial" ein:

Sub MacheMenue()
      Dim cbpSpezial As CommandBarPopup

      CustomizationContext = ThisDocument
      Set cbpSpezial = Application.CommandBars("Menu bar").Controls.Add(msoControlPopup)

      With cbpSpezial
	 .Caption = "Spezial"
	 .BeginGroup = True
      End With
End Sub

Dabei müssen Sie beachten, dass ein Menütitel kein Menüeintrag (Typ msoControlButton bzw. Objekt CommandBarPopup) wie andere ist, sondern die Fähigkeit zum Ausklappen (Typ msoControlPopup bzw. Objekt CommandBarButton) braucht.

Außerdem wird der Menütitel technisch korrekt nicht der Symbolleiste selbst (Commandbars("Menu bar")), sondern ihrer Controls-Auflistung hinzugefügt. Das wird oft verwechselt und macht die Programmierung scheinbar unverständlich. Auch ein später noch hinzukommendes Untermenü verhält sich genauso, nur eben ein paar Ebenen tiefer.

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