3

Office 2003 では、実行時にカスタム サブメニュー (CommandBar 用語でポップアップ (msoControlPopup) と呼ばれるもの) を作成し、そのイメージを設定したいと考えています。CommandBarButton を使用すると、これは非常に簡単です。

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

ただし、msoControlPopup 型の CommandBarPopup または CommandBarControl では失敗します。

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

msoControlPopup タイプもプロパティを許可していないようです.Style。これは、Office がコントロールに表示するもの (アイコン、テキスト、両方) を決定する方法です。私はこれがまだ証明されていないので、何か間違ったことをしているという最後の希望を抱いています。実際、実行時にサブメニューにアイコンを挿入する方法があります。

あなたが流すことができる光をありがとう。

4

2 に答える 2

3

さて、タンブルウィードをもっと増やしましょう。私はこれに対する答えは、それができないということだと確信しています。そして、これが私の「証拠」です。組み込みのサブメニューにはアイコンがありません(上記を投稿するまで気づきませんでし。上記のコードを実行する場合は、メニューバーの[ツール]> [カスタマイズ]に移動し、[ [テスト]メニューでドロップダウンし、[Sub1]を右クリックすると、すべてのボタンとスタイルオプションが灰色で表示されます。Btn1を右クリックすると、それらが使用可能になります。

他の考えはまだ歓迎します。

于 2011-01-24T23:05:33.217 に答える
0

もちろん、サブメニューの見出しの画像または FaceID を設定する必要がある場合、それはサブメニューの見出しに使用できる方法ではありませんが、サブメニュー自体に画像または FaceID を設定する場合は、ここからコードを変更してこれを実現します。

 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

これをテストしたところ、FaceID と読み込まれた画像の両方で問題なく動作するようです。

もちろん、「実行時」の効果を得るには、ユーザーが特定のコントロールをクリックするたびに呼び出される関数にこれを配置することをお勧めします。

ここでも可変画像を処理するためにさらに費やされる可能性があります。

お役に立てれば。

于 2011-05-24T22:07:56.017 に答える