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

Getestet unter Word97Getestet unter Word2000  
Makro/Datei speichern
Print

Prinzipiell unterscheidet sich die Menüleiste nicht von den Symbolleisten. Jedoch ist sie nicht so flexibel und frei anpassbar wie die Symbolleisten; so kann z.B. keine weitere Menüleiste hinzugefügt werden.
Der Zugriff auf die einzelnen Controls (Einträge und Menüpunkte) erfolgt immer über das Objekt CommandBars("Menu Bar").
Das Hinzufügen eines weiteren Menüeintrages erfolgt über die Add-Methode der CommandBar-Controls, wobei theoretisch alle Control-Typen verwendet werden können.
Das folgende Beispiel fügt einen neuen Menüeintrag an letzter Stelle mit dem Namen "Neuer Eintrag" in die Menüleiste ein:

Sub MnuNeu()  
Dim msg, antw As String 
Set cbmnu = CommandBars("Menu Bar")
Set ctlmnu = cbmnu.Controls.Add(Type:=msoControlPopup, ID:=1, Temporary:=True)
With ctlmnu
  .Caption = "Neuer Eintrag"
End With 
End Sub 

Um dem Eintrag einen Menüpunkt hinzuzufügen, setzt man am Besten zuerst einen Verweis auf den Menüeintrag (hier "Neuer Eintrag"). Und nur wenn der Rückgabewert nicht Nothing (Zeile 5) ist, wird der Menüpunkt hinzugefügt (Zeile 6).
Anschließend werden die Beschriftung, das Symbol und die Aktion für den Menüpunkt festgelegt. Für die Aktion muss der Name einer Prozedur oder Funktion angegeben werden, wobei dieses Makro keine Parameter erwarten darf.


Beispiel
1    Sub MnuEintragNeu()  
2    Dim ctlumnu As CommandBarControl 
3    Set cbmnu = CommandBars("Menu Bar")
4    Set ctlmnu = cbmnu.FindControl(Type:=msoControlPopup, ID:=1)
5    If Not ctlmnu Is Nothing Then 
6      Set ctlumnu = ctlmnu.Controls.Add(Type:=msoControlButton, ID:=1, _
         Temporary:=True)
7      With ctlumnu
8        .Caption = "1. Menüpunkt"
9        .FaceId = "463"
10       .OnAction = "MyMakro"
11     End With 
12   End If 
13   End Sub  

Wenn ein Untermenüeintrag (msoControlPopup) hinzugefügt werden soll, muss die Zeile 6 folgendermaßen geändert werden:

6      Set ctlumnu = ctlmnu.Controls.Add(Type:=msoControlPopup, ID:=1, _
         Temporary:=True)

Hinweis:
Allerdings kann einem Untermenüeintrag kein Symbol über die FaceID-Eigenschaft zugewiesen werden, und es sollte auch keine Aktion ausgeführt werden.

Das Entfernen eines Menüpunktes kann auf verschiedene Wege erfolgen: Ist der Name des Menüeintrags und des Menüpunkts bekannt, kann er direkt angesprochen und gelöscht werden:

Sub MnuEintragLöschen()  
On Error Resume Next 
Dim cbmnu As CommandBar 
Dim ctldelete As CommandBarControl 
Set cbmnu = CommandBars("Menu Bar")
Set ctldelete = cbmnu.Controls("Neuer Eintrag").Controls("1. Menüpunkt")
If Not ctldelete Is Nothing Then ctldelete.Delete
End Sub  

Ist nur die Beschriftung bekannt, müssen alle Menüeinträge mit allen Menüpunkten durchlaufen und die Beschriftungen (.Caption-Eigenschaften) geprüft werden.

<< Zurück (Teil I)


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