リボン関連

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

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

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

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

  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>

関連記事

  1. Office関連

    メモ帳だけでOutlook用アドインを作ってみる。

    「SharpDevelopでExcel用COMアドインを作成する方法」…

  2. リボン関連

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

    「リボンのトグルボタン」で回答したコードです(下に記載しているコードは…

  3. Word

    リボンからプリンタを選択して簡単に印刷できるようにする(Word)

    今回はdynamicMenu要素のgetContent属性のコールバッ…

  4. Office関連

    [リボン・カスタマイズ]ユーザー名により表示するメニューを切り替える。

    今回はリボンをカスタマイズして、ファイルを開いたユーザー名によって表示…

  5. Office関連

    [リボン・カスタマイズ]カスタムタブを共有する。

    ※ 2015/2/18 コードに一部誤りがあったので修正しました。…

  6. リボン関連

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

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

コメント

  • コメント (7)

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

    • 佐藤 豊
    • 2018年 6月 06日

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

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

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

    • 佐藤様

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

    • 佐藤 豊
    • 2018年 6月 07日

    ありがとうございます。

    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日

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

              <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日

    きぬあさ様

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

    いくつか理解できました。
    一つは、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.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP