Legen Sie ein CommandBar „Popup“ Untermenü Symbol dynamisch
-
12-10-2019 - |
Frage
Ich versuche nur, um dies zu bestätigen: In Office 2003, ich möchte ein eigenes Untermenü erstellen - was in CommandBar parlance als Popup (msoControlPopup) bekannt ist - zur Laufzeit, und legen Sie ein Bild dafür. Mit einem CommandBarButton ist dies sehr einfach
Set btn1 = mnu.Controls.Add(msoControlButton, temporary:=True)
btn1.Caption = "Btn1"
btn1.Picture = stdole.LoadPicture("C:\temp\test.bmp")
Aber mit einem CommandBarPopup oder CommandBarControl vom Typ msoControlPopup, versagt es
Set sub1 = mnu.Controls.Add(msoControlPopup, temporary:=True)
sub1.Caption = "Sub1"
'object doesn't support this property or method for next line
sub1.Picture = stdole.LoadPicture("C:\temp\test.bmp")
Der msoControlPopup Typ scheint keine .Style
Eigenschaft entweder zu ermöglichen, das ist, wie Office, was bestimmt zu zeigen - Symbol, Text, sowohl - auf der Kontrolle. Ich habe gefunden, das noch nicht bewiesen, so hielte eine letzte Hoffnung, dass ich etwas falsch mache, und es ist in der Tat eine Möglichkeit, ein Symbol auf einem Untermenü zur Laufzeit eingefügt werden.
Vielen Dank für jedes Licht Sie vergießen können.
Lösung
Ok gut mehr Tumbleweeds. Ich bin ziemlich sicher, dass die Antwort auf diese, so kann es nicht getan werden. Und hier ist mein „Beweis“: Keiner der Untermenüs in integrierten haben Symbole (die ich nicht bis wusste nach Ich stellte den oben, und wenn man den obigen Code ausführen, gehen Sie zu Extras> Anpassen in der Menüleiste, dann klicken Sie auf das Testmenü es fallen nach unten, und der rechten Maustaste auf Sub1, sollten Sie alle Tasten und Stil Optionen abgeblendet. Rechtsklick auf btn1, und sie sind zur Verfügung sehen.
Jede andere Gedanken immer noch willkommen.
Andere Tipps
Natürlich, wenn Sie auf das Bild oder FaceID des Untermenüs Überschrift festlegen müssen, die nicht eine verfügbare Methode für Untermenü Schriften ist, aber wenn Sie das Bild oder FaceID im Untermenü einstellen wollen selbst modifiziert I-Code von hier dies zu tun:
Public Sub newSubMenu()
Dim menuBar As CommandBar
Dim newMenu As CommandBarControl
Dim menuItem As CommandBarControl
Dim subMenuItem As CommandBarControl
CommandBars("Sub Menu Bar").Delete
Set menuBar = CommandBars.Add(menuBar:=False, Position:=msoBarPopup, Name:="Sub Menu Bar", Temporary:=True)
Set newMenu = menuBar.Controls.Add(Type:=msoControlPopup)
newMenu.Caption = "&First Menu"
Set newMenu = menuBar.Controls.Add(Type:=msoControlPopup)
newMenu.Caption = "&Second Menu"
Set newMenu = menuBar.Controls.Add(Type:=msoControlPopup)
newMenu.Caption = "&Third Menu"
Set menuItem = newMenu.Controls.Add(Type:=msoControlButton)
With menuItem
.Caption = "F&irst Sub"
.FaceId = "356"
.OnAction = "myTest"
End With
Set menuItem = newMenu.Controls.Add(Type:=msoControlButton)
With menuItem
.Caption = "S&econd Sub"
.FaceId = "333"
.OnAction = "otherTest"
End With
Set menuItem = newMenu.Controls.Add(Type:=msoControlPopup)
menuItem.Caption = "Sub Menus"
Set subMenuItem = menuItem.Controls.Add(Type:=msoControlButton)
With subMenuItem
.Caption = "Item 1"
.FaceId = 321
.OnAction = "firstMacro"
End With
Set subMenuItem = menuItem.Controls.Add(Type:=msoControlButton)
With subMenuItem
.Caption = "Item 2"
'.FaceId = 432
.Picture = stdole.StdFunctions.LoadPicture("C:\temp\test.bmp")
.OnAction = "secondMacro"
End With
CommandBars("Sub Menu Bar").ShowPopup
End Sub
Getestet habe ich diese und es scheint zu funktionieren für beide FaceID des geladen und Bilder.
Natürlich die „auf der Laufzeit“ beeinflussen zu bekommen, würde ich setze diese in einer Funktion empfehlen, die jedes Mal, wenn der Benutzer auf einem bestimmten Steuerelement geklickt aufgerufen wurden.
Es könnte weiter Griff variable Bilder auch hier aufgewendet werden.
Hope, das hilft.