Question

Je suis juste essayer de le confirmer: Dans Office 2003, je veux créer un sous-menu personnalisé - ce qui est connu dans le langage CommandBar dans une fenêtre contextuelle (msoControlPopup) - lors de l'exécution, et définir une image pour elle. Avec un CommandBarButton, ce qui est très simple

Set btn1 = mnu.Controls.Add(msoControlButton, temporary:=True)
btn1.Caption = "Btn1"
btn1.Picture = stdole.LoadPicture("C:\temp\test.bmp")

Mais avec un CommandBarPopup ou CommandBarControl de type msoControlPopup, il échoue

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")

Le type de msoControlPopup ne semble pas permettre une propriété .Style soit, ce qui est de savoir comment Bureau détermine pour montrer - icône, texte, à la fois - sur le contrôle. Je ne l'ai pas trouvé cela encore prouvé, si je suis maintenant un dernier espoir que je fais quelque chose de mal, et il est, en fait, un moyen d'insérer une icône dans un sous-menu à l'exécution.

Merci pour toute lumière que vous pouvez jeter.

Était-ce utile?

La solution

Ok bien plus amarantes. Je suis sûr que la réponse à cette question est, il ne peut pas être fait. Et voici ma « preuve »: Aucun des sous-menus intégré des icônes (que je ne savais pas jusqu'à ce que après Je posté ci-dessus, et si vous exécutez le code ci-dessus, allez dans Outils> Personnaliser dans la barre de menu, puis cliquez sur le menu test pour laisser tomber vers le bas, et un clic droit sur Sub1, vous devriez voir toutes les options de bouton et le style grisés. Faites un clic droit sur bTN1, et ils sont disponibles.

Les autres pensées toujours les bienvenus.

Autres conseils

Bien sûr, si vous devez définir l'image ou FaceID de la rubrique du sous-menu, qui n'est pas une méthode disponible pour les titres du sous-menu, mais si vous souhaitez définir l'image ou FaceID le sous-menu lui-même, j'ai modifié le code ici pour y parvenir:

 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

J'ai testé cela et il semble fonctionner très bien pour les deux FaceID et de photos chargées.

Bien sûr, pour obtenir le « temps à courir » affect, je recommande de placer cela dans une fonction qui a été appelé à chaque fois que l'utilisateur a cliqué sur un contrôle spécifique.

Il pourrait encore être à la variable poignée dépensa images ici.

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top