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. Office関連

    [Word VBA]ルビ(ふりがな)ダイアログの操作に挑む(2)

    2016/10/28 追記:改良版のマクロを書きました。…

  2. Office関連

    Outlookを使ってGmail送信を行うVBAマクロ

    下記G Suite アップデート ブログにある通り、今年の6月には“安…

  3. Office関連

    Excel 2013 新関数一覧

    「関数一覧(Excel 2010)」と「関数一覧(Excel 2013…

  4. Office関連

    第4回Office 365勉強会に参加してきました。

    2013/3/2(土)に品川にあるMicrosoftオフィスでOffi…

  5. Excel

    ExcelとPowerPointに自動保存機能が追加されました。

    Excel 2016を使っていて、ふと気が付いたのが画面左上にある「自…

  6. Office関連

    Excel 2013で駅すぱあとWebサービス APIの「経路探索」を使ってみました。

    「「駅すぱあとWebサービス API無償提供」を利用してみました。」で…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP