Untermenüs
Untermenü anlegen
Wie oben bereits erwähnt, können Sie natürlich auch innerhalb eines eigenen Menüs Untermenüs anlegen. Dazu ändert sich der Typ des Menüeintrags von msoControlButton auf msoControlPopUp, damit dort wieder ein Menü ausklappen kann.
Der folgende Code bereitet schon ein Untermenü vor, welches später mal alle Absätze des Dokuments nennt und die Möglichkeit bietet, einen davon zu markieren. Wie Sie sehen, wird das Untermenü dabei gar nicht wirklich angelegt, sondern lediglich eine Sub-Prozedur SammleAbsaetze aufgerufen:
Sub MacheMenue()
Dim cbpSpezial As CommandBarPopup
Dim cbbEintrag As CommandBarButton
CustomizationContext = ThisDocument
Set cbpSpezial = Application.CommandBars("Menu bar").Controls.Add(msoControlPopup)
With cbpSpezial
.Caption = "Spe&zial"
.OnAction = "SpezialAnpassen"
.BeginGroup = True
Set cbbEintrag = cbpSpezial.Controls.Add(msoControlButton)
With cbbEintrag
.Caption = "&Info..."
.OnAction = "ZeigeInfo"
End With
With cbpSpezial.Controls.Add(msoControlButton)
.Caption = "&Grafik ändern"
.OnAction = "GrafikAendern"
End With
With cbpSpezial.Controls.Add(msoControlPopup)
.Caption = "Gehe zu Absatz"
.OnAction = "SammleAbsaetze"
End With
End With
End Sub
Sub SammleAbsaetze()
End SubDie Sub-Prozedur SammleAbsaetze muss vorhanden sein, darf aber noch leer sein. Dann präsentiert sich das Menü wie im folgenden Bild:
Das Untermenü hat noch keine Einträge
Untermenü-Einträge dynamisch anlegen
Die tatsächlichen Einträge werden erst beim Klick auf den "Gehe zu Absatz"-Eintrag dynamisch erzeugt. Zu Testzwecken sollen erst einmal ein paar wenige Einträge angefügt werden, damit Sie die Technik und eventuelle Probleme dabei kennenlernen:
Sub SammleAbsaetze()
Dim cbpSammeln As CommandBarPopup
Dim intI As Integer
Set cbpSammeln = Application.CommandBars("Menu bar").Controls("Spezial").CommandBar.Controls(3)
With cbpSammeln.CommandBar.Controls
For intI = 1 To 5
With .Add(msoControlButton)
.Caption = "Test " & intI
.OnAction = "TesteEintrag"
.Tag = intI
End With
Next
End With
End Sub
Sub TesteEintrag
End SubSobald Sie diese Prozedur mit dem obigen Code ergänzt haben, zeigt die Auswahl im Menü tatsächlich die gewünschten Testeinträge an, wie das folgende Bild zeigt:
Das Untermenü enthält nun die dynamisch erzeugten Einträge.
Untermenü-Einträge löschen
Jeder weitere Aufruf des Untermenüs zeigt allerdings, dass jedes Mal neue Testeinträge hinzugefügt werden, auch wenn sie bereits vorhanden sind. Genau das stand ja auch nur im Code drin, daher muss er nun so erweitert werden, dass vorher alle Einträge im Untermenü gelöscht werden.
