Officeのユーザインタフェースがリボンに変わってから、下記のように「CommandBars(“○○”).Controls.Addでメニューを追加できなくなった」という質問を多く見かけるようになりました。
・図形選択時のコンテキストメニュー
http://www.moug.net/faq/viewtopic.php?t=70633
・Excel2010コンテキストメニューのカスタマイズについて
http://answers.microsoft.com/thread/729b54cf-0fb2-4d79-9f20-520eb640254e
・With Application__ With .CommandBars(“Shapes”)__
http://answers.microsoft.com/thread/f45d80ee-5a2d-40f0-8f38-6afa8d1bbf4d
・挿入した図形上で右クリックした時のメニューをマクロで非表示としたい。
http://answers.microsoft.com/thread/a351b326-457d-4a11-80fa-dbab078d531c
たしかにOffice 2003までは下記のようなコードで右クリックメニュー(コンテキストメニュー)に項目を追加することが出来たのですが、
Option Explicit Public Sub Sample() With Application.CommandBars("Shapes") _ .Controls.Add(Type:=msoControlPopup, Temporary:=True) .Caption = "My ContextMenu" With .Controls.Add(Type:=msoControlButton) .Caption = "My Menu" .FaceId = 59 .OnAction = "btnMenu_OnAction" End With End With End Sub Private Sub btnMenu_OnAction() MsgBox "こんにちは。", vbSystemModal + vbInformation End Sub
Office 2010で同じコードを実行しても下図のようにメニューは追加されません。
ですが、ShowPopupメソッドを実行してみると、ちゃんとメニューが追加されていることが確認できます。
ユーザインタフェースがコマンドバーからリボンに変わったことで、右クリックメニューの仕様も変更されたようです。
といっても、右クリックメニューをカスタマイズする方法はちゃんと用意されており、Office 2010以降では下記ページで説明しているように、リボンをカスタマイズすることによって、右クリックメニューをカスタマイズすることができます。
(残念ながらOffice 2007では同じ方法でカスタマイズすることはできません。)
・右クリックメニューをカスタマイズする(Word 2010)
//www.ka-net.org/ribbon/ri36.html
たとえば、上記コードのように図形選択時の右クリックメニューをカスタマイズする場合は下記のようなコード(下記はExcel向け)になります。
・リボンXML
<?xml version="1.0" encoding="utf-8"?> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <contextMenus> <contextMenu idMso="ContextMenuShape"> <menu id="mnuOrg" label="My ContextMenu"> <button id="btnMenu" label="My Menu" imageMso="HappyFace" onAction="btnMenu_onAction" /> </menu> </contextMenu> </contextMenus> </customUI>
・標準モジュール
Option Explicit Public Sub btnMenu_onAction(control As IRibbonControl) MsgBox "こんにちは。", vbSystemModal + vbInformation End Sub
XMLを編集してリボンをカスタマイズする、という手間は掛かってしまいますが、どうしても右クリックメニューをカスタマイズしたい、という場合には一度試してみてはいかがでしょうか。
この記事へのコメントはありません。