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

2014年11月の人気記事前のページ

KB2553154の更新プログラムをアンインストールするVBScript次のページ

関連記事

  1. Windows 10

    起動中のMicrosoft EdgeからタイトルとURLを取得するVBAマクロ(UI Automat…

    当ブログでは、Microsoft Edgeを外部から操作するプログラム…

  2. Office関連

    Officeファイルから作成者などのプロパティを取得するVBScript

    下記記事でも書いていますが、xlsxやdocxといった、OOXML形式…

  3. アイコン一覧

    Office 365アイコン(imageMso)一覧を作成するにあたって

    Office 2013のアイコン一覧を公開してから4年ほど経ち、その間…

  4. Office関連

    VBAを学ぶときの参考資料

    知人から「Excelのマクロを勉強したいんだけど、どうやって勉強したら…

  5. Office関連

    Acrobatを使ってPDFファイルをNアップするVBAマクロ

    VBAで、B5サイズのPDFファイルを横並びにしてB4サイズのPDFフ…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP