Office関連

[VBA]CommandBars(“○○”).Controls.Addでメニューを追加できなくなった。

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

CustomizeContextMenu_01

Office 2010で同じコードを実行しても下図のようにメニューは追加されません。

CustomizeContextMenu_02

ですが、ShowPopupメソッドを実行してみると、ちゃんとメニューが追加されていることが確認できます。

CustomizeContextMenu_03

ユーザインタフェースがコマンドバーからリボンに変わったことで、右クリックメニューの仕様も変更されたようです。

といっても、右クリックメニューをカスタマイズする方法はちゃんと用意されており、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

CustomizeContextMenu_04

XMLを編集してリボンをカスタマイズする、という手間は掛かってしまいますが、どうしても右クリックメニューをカスタマイズしたい、という場合には一度試してみてはいかがでしょうか。

関連記事

  1. Office関連

    代替テキストを削除するPowerPointマクロ

    PowerPointの図やSmartArt、グループやグラフといった視…

  2. Office関連

    PDFファイルに差し込み印刷するVBAマクロ

    このページにもあるように、AcrobatはOLEオートメーション機能に…

  3. Office関連

    フッターにページ番号と総ページ数を挿入するWordマクロ

    以前書いた、フッターに「ページ番号 / 総ページ数」を挿入するWord…

  4. Office関連

    Google スライドで新規プレゼンテーションを作成するVBAマクロ

    ここ数日PowerPointのマクロに加え、Google Apps S…

  5. Office関連

    テキストボックスの中にある表を操作するWordマクロ

    Yahoo!知恵袋で、「Wordマクロでテキストボックスの中にある表の…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP