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

    Office 365 APIをVBAから呼び出す(1)

    2015年4月に公開されたOffice Teamのブログ記事「Toda…

  2. Office関連

    Visio Onlineの機能をJavaScriptで拡張する方法

    @mokudaiさんからのバトンを引き継ぎまして、「Office 36…

  3. Office関連

    OfficeのコマンドID(コントロールID)リストがGitHubで公開されました。

    前回の記事でも触れていますが、メインストリームサポート期間内のOffi…

  4. Office関連

    PowerPointのマクロを共有化して使う方法

    記事のタイトルだけ見るとちょっと分かりづらいですが、要するにWordの…

  5. Office関連

    コマンドマクロ一覧(Word 2013)

    Word 2013に組み込まれている「コマンドマクロ」のコマンド名、説…

  6. Office関連

    段落内改行を一括置換するOutlookマクロ

    「段落内改行 置換 Outlook マクロ」といったキーワードでのアク…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP