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

    Microsoft Graph SDK for PHPを使ったAPIの呼び出しサンプル

    知らない間に(恐らくBuild 2017のタイミングに合わせて)Mic…

  2. Office関連

    SkyDriveの同期フォルダーのパスを取得するWordマクロ

    無料で使える便利なクラウドストレージ「SkyDrive」にはローカルフ…

  3. Office アドイン

    OfficeJS Snippet Explorerを使って新しいOffice アドインを体験する。

    前回の記事と打って変わって元のOffice アドインの記事に戻ります(…

  4. Office関連

    Office 2016 Preview for Windowsのサポート情報まとめ

    「Office のサポート ページ - support.office.…

  5. Office関連

    選択範囲をOneNoteに送るVBAマクロ

    OneNote プリンタードライバー(プリンター)を使ってドキュメント…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP