リボン関連

[リボン・カスタマイズ]クイック アクセス ツール バーに独自ボタンを追加してアドイン化する方法

「クイック アクセス ツール バーに独自マクロ(自作ボタン)を追加して、アドインとして登録したい」という質問をいただきました。

これまで、クイック アクセス ツール バーに独自マクロを追加する方法に関しては、いくつか記事を書いてきましたが(下記参照)、良い機会なのでまとめ直してみたいと思います。

クイック アクセス ツール バーに独自ボタンを追加する方法

  1. まずはXMLを書いて、Custom UI Editorを使ってリボンをカスタマイズします。もちろん、Custom UI Editorを使わずファイルを編集しても問題はありません。
  2. リボンXML
    <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
      <ribbon>
        <tabs>
          <tab id="tabSample" label="Sample Tab">
            <group id="grpSample" label="Sample Group">
              <button id="btnSample" label="サンプル" size="large" imageMso="HappyFace" onAction="btnSample_onAction" />
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>
    標準モジュール
    Option Explicit
    
    Public Sub btnSample_onAction(control As IRibbonControl)
      MsgBox control.ID, vbInformation + vbSystemModal
    End Sub
  3. 1.のファイルを開くと、「Sample Tab」タブに「サンプル」ボタンが追加されているのが確認できます。
  4. アプリケーションのオプション画面から「クイック アクセス ツール バー」を開きます。
  5. コマンドの選択」では1.でカスタマイズしたタブを選択し、「クイック アクセス ツール バーのユーザー設定」では、「すべてのドキュメントに適用 (既定)」ではなく「(1.のファイル名) に適用」を選択します。
  6. クイック アクセス ツール バーに登録したいボタンを選択し、「追加」ボタンをクリックします。
  7. OK」ボタンをクリックしてオプション画面を閉じた後、ファイルを上書き保存すれば作業終了です。

上記ファイルをアドイン形式(Excelの場合はxlam)で保存し、Office アプリケーションで読み込めば、アドインとして動作させることが可能です。

その他注意事項

上記のカスタマイズでは、タブ(tabSample)を表示させたままにしていましたが、tab要素のvisible属性の値を「false」にすれば、タブを非表示にした上で、クイック アクセス ツール バーに独自ボタンを追加することができます。

また、上記ではbutton要素をクイック アクセス ツール バーに追加していますが、menu要素等、他の要素を追加することもできます。

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="tabSample" label="Sample Tab" visible="false">
        <group id="grpSample" label="Sample Group">
          <menu id="mnuSample" label="サンプル メニュー" imageMso="SadFace">
            <button id="btnSample1" label="サンプルボタン1" imageMso="_1" />
            <button id="btnSample2" label="サンプルボタン2" imageMso="_2" />
            <button id="btnSample3" label="サンプルボタン3" imageMso="_3" />
            <button id="btnSample4" label="サンプルボタン4" imageMso="_4" />
            <button id="btnSample5" label="サンプルボタン5" imageMso="_5" />
          </menu>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

【アイカツフレンズ!】ちゃお×セブン-イレブンキャンペーンのカードをゲットしました。前のページ

ダウンロードフォルダーのパスを取得するVBScript次のページ

関連記事

  1. Office関連

    Office 2016で“ヤツ”を召喚してみた。

    4月1日にMicrosoft Office公式アカウント、MSOffi…

  2. Office関連

    Office XP Developer Toolsでリボン対応のCOMアドインを作成する。

    「Visual Basic 6でリボン対応のアドインを作成する」ではV…

  3. Office関連

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

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

  4. リボン関連

    複数のtoggleButton要素の中から1つだけしかオンにできないようにする(2)

    「複数のtoggleButton要素の中から1つだけしかオンにできない…

  5. Office関連

    YouTube動画挿入アドイン for PowerPoint

    前回の記事でPowerPoint 2013でYouTubeの動画が挿入…

  6. リボン関連

    Office Ribbon Editorはウィルス?

    私のHP「Office Ribbon Editorの紹介」でも紹介して…

コメント

  • コメント (7)

  • トラックバックは利用できません。

    • 佐藤 豊
    • 2018年 6月 06日 3:36pm

    いつも勉強させていただいています。

    でやってみると、7番目の”印刷”の項目が表示されません。
    この項目は使えないのでしょうか?

    よろしくお願いいたします。

    • 佐藤様

      当ブログ管理人です。
      コメント中にXMLを記載されたのでしょうか?
      であれば、コードが消えてしまっているようですので、大変お手数ですが、XMLコードを「[xml][/xml]」タグで囲っていただけますでしょうか?

    • 佐藤 豊
    • 2018年 6月 07日 1:11pm

    ありがとうございます。

    2行目と3行目の間に

    <control idMso="FileNewDefault" visible="true" />
    <control idMso="FileOpen" visible="true" />
    <control idMso="FileSave" visible="true" />
    <control idMso="FileSaveAs" visible="true" />
    <control idMso="FilePrintQuick" visible="true" />
    <control idMso="PrintPreviewAndPrint" visible="true" />
    <control idMso="GroupPrintPreviewPrint" visible="true" />
    

    を入力しました。(これで表示されるでしょうか?)

    • 佐藤様

      当ブログ管理人です。
      「GroupPrintPreviewPrint」はgroup要素ですので、別groupに分ける必要があります。
      (下記は一例です。分かりやすいように各コントロールを元の要素で定義しています。)

      <?xml version="1.0" encoding="utf-8"?>
      <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
        <ribbon>
          <tabs>
            <tab id="tabControl" label="Control Tab">
              <group id="grpControl" label="Control Group">
                <button idMso="FileNewDefault" visible="true" />
                <button idMso="FileOpen" visible="true" />
                <button idMso="FileSave" visible="true" />
                <button idMso="FileSaveAs" visible="true" />
                <button idMso="FilePrintQuick" visible="true" />
                <button idMso="PrintPreviewAndPrint" visible="true" />
              </group>
              <group idMso="GroupPrintPreviewPrint" visible="true" />
            </tab>
          </tabs>
        </ribbon>
      </customUI>

      ただ、既存コントロールをクイック アクセス ツール バーに追加してアドイン配布する場合は、オプション画面・クイック アクセス ツール バーで、「(対象ファイル名) に適用」にした上で、「コマンドの選択」から任意のコントロールを追加すれば良いので、必ずしもXMLでカスタマイズする必要はありません。

      ちなみに、「(対象ファイル名) に適用」にしてクイック アクセス ツール バーを追加すると、ファイルをZip解凍した際、userCustomizationフォルダ→customUI.xmlファイルが作成されていることが確認できます。

      ご指定のコントロールをクイック アクセス ツール バーに追加した場合、customUI.xmlファイルは、下記のようになるかと思います。

      <mso:customUI xmlns:mso="http://schemas.microsoft.com/office/2006/01/customui">
        <mso:ribbon>
          <mso:qat>
            <mso:documentControls>
              <mso:control idQ="mso:FileNewDefault" visible="true" />
              <mso:control idQ="mso:FileOpen" visible="true" />
              <mso:control idQ="mso:FileSave" visible="true" />
              <mso:control idQ="mso:FileSaveAs" visible="true" />
              <mso:control idQ="mso:FilePrintQuick" visible="true" />
              <mso:control idQ="mso:PrintPreviewAndPrint" visible="true" />
              <mso:control idQ="mso:GroupPrintPreviewPrint" visible="true" />
            </mso:documentControls>
          </mso:qat>
        </mso:ribbon>
      </mso:customUI>
    • 佐藤 豊
    • 2018年 6月 08日 4:12pm

    私の不理解から言葉不足で、私の意図が伝わらずすみません。

              <menu id="mnuSample" label="サンプル メニュー" imageMso="SadFace">
                <button id="btnSample1" label="サンプルボタン1" imageMso="_1" />
                <button id="btnSample2" label="サンプルボタン2" imageMso="_2" />
                <button id="btnSample3" label="サンプルボタン3" imageMso="_3" />
                <button id="btnSample4" label="サンプルボタン4" imageMso="_4" />
                <button id="btnSample5" label="サンプルボタン5" imageMso="_5" />
              </menu>
    

    の中の

                <button id="btnSample1" label="サンプルボタン1" imageMso="_1" />
                <button id="btnSample2" label="サンプルボタン2" imageMso="_2" />
                <button id="btnSample3" label="サンプルボタン3" imageMso="_3" />
                <button id="btnSample4" label="サンプルボタン4" imageMso="_4" />
                <button id="btnSample5" label="サンプルボタン5" imageMso="_5" />
    

    の部分を単純に

                <control idMso="FileNewDefault" visible="true" />
                <control idMso="FileOpen" visible="true" />
                <control idMso="FileSave" visible="true" />
                <control idMso="FileSaveAs" visible="true" />
                <control idMso="FilePrintQuick" visible="true" />
    	    <control idMso="PrintPreviewAndPrint" visible="true" />
                <control idMso="GroupPrintPreviewPrint" visible="true" />
                <control idMso="PageSetupPageDialog" visible="true" />
    

    に置き換えれば、
    idMso=”GroupPrintPreviewPrint”
    の部分も並んで表示されるものと期待したのですが、
    それは

        <mso:qat>
          <mso:documentControls>
            <mso:control idQ="mso:FileNewDefault" visible="true" />
            <mso:control idQ="mso:FileOpen" visible="true" />
            <mso:control idQ="mso:FileSave" visible="true" />
            <mso:control idQ="mso:FileSaveAs" visible="true" />
            <mso:control idQ="mso:FilePrintQuick" visible="true" />
            <mso:control idQ="mso:PrintPreviewAndPrint" visible="true" />
            <mso:control idQ="mso:GroupPrintPreviewPrint" visible="true" />
          </mso:documentControls>
        </mso:qat>
    

    の部分を見て思ったわけなのですが、しかし、そうではないのですね。
    “サンプル メニュー”(”SadFace”アイコン)の下に
    idMso=”GroupPrintPreviewPrint”
    が他の
    idMso=”FilePrintQuick”
    などと並んで順番に表示されるようにはならないものでしょうか。

    • 佐藤様

      当ブログ管理人です。

      > “サンプル メニュー”(”SadFace”アイコン)の下にidMso=”GroupPrintPreviewPrint”が他のidMso=”FilePrintQuick”などと並んで順番に表示されるようにはならないものでしょうか。

      menu要素の子要素としてgroup要素(GroupPrintPreviewPrintは元々group要素)が定義できないため、残念ながらそのままでは表示できません。
      (control要素としてgroupを扱える、クイック アクセス ツール バー(qat)内のものとは別物)

      下記のように「GroupPrintPreviewPrint」グループ内にあるコントロールをmenu等で追加してはいかがでしょうか?

      <?xml version="1.0" encoding="utf-8"?>
      <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
        <ribbon>
          <tabs>
            <tab id="tabControl" label="Control Tab" visible="false">
              <group id="grpControl" label="Control Group">
                <menu id="mnuControl" label="Controls" imageMso="Info">
                  <button idMso="FileNewDefault" visible="true" />
                  <button idMso="FileOpen" visible="true" />
                  <button idMso="FileSave" visible="true" />
                  <button idMso="FileSaveAs" visible="true" />
                  <button idMso="FilePrintQuick" visible="true" />
                  <button idMso="PrintPreviewAndPrint" visible="true" />
                  <menu id="mnuPrintPreviewPrint" label="印刷" imageMso="FilePrint">
                    <button idMso="FilePrint" visible="true" />
                    <button idMso="PageSetupPageDialog" visible="true" />
                  </menu>
                </menu>
              </group>
            </tab>
          </tabs>
        </ribbon>
      </customUI>

      menu等で区分けする必要が無ければ、上で書いた通り、

      > オプション画面・クイック アクセス ツール バーで、「(対象ファイル名) に適用」にした上で、「コマンドの選択」から任意のコントロールを追加

      クイック アクセス ツール バーのカスタマイズで直接コントロールを追加してしまえば、リボンをカスタマイズする必要はありません。

    • 佐藤 豊
    • 2018年 6月 09日 3:01pm

    きぬあさ様

    ありがとうございました。
    希望していたことができるようになり、一通り解決しました。

    いくつか理解できました。
    一つは、idMso=”FilePrint”を使えば良かったことです。
    これまで
    オプション画面・クイック アクセス ツール バーで
    idMso=”FilePrint”
    を見つけることができず、
    idMso=”GroupPrintPreviewPrint”
    をクイックアクセスツールバーに追加していました。
    そして、
    idMso=”GroupPrintPreviewPrint”
    の使い方を知らないまま単純に他のコントロールと並べて使えるものと思ったのです。

    idMso=”FilePrint”があること、menu等で区分けする方法があることを教えていただきました。
    たいへん、ありがとうございました。

    旧ホームページの方で
    「クイックアクセスツールバーのアイコンをまとめる」
    http://www.ka-net.org/ribbon/ri51.html
    を読んだときには、
    「(※ すべてのドキュメントに適用されたQATではなく個別のドキュメントに適用されたQATが対象です)。」
    と書いてあったので、すべてのドキュメントに適用されたQATを対象とするには、危険が伴うか何か難しいい理由があるものと考えて、それから先には進めませんでした。

    Excel 2013 からはMDIからSDIに変わり、ファイルを横に並べて表示するとリボンもクイックアクセスツールバーも見ずらくなってしまい、何とか「クイックアクセスツールバーのアイコンをまとめる」ことをしてみたいと思っていました。
    そこで今回、「すべてのドキュメントに適用できるアドインの紹介」となったので、大変うれしく思い、しばらくぶりで試してみました。

    今後もよろしくお願いします。

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP