「クイック アクセス ツール バーに独自マクロ(自作ボタン)を追加して、アドインとして登録したい」という質問をいただきました。
これまで、クイック アクセス ツール バーに独自マクロを追加する方法に関しては、いくつか記事を書いてきましたが(下記参照)、良い機会なのでまとめ直してみたいと思います。
- クイックアクセスツールバーからPowerPointマクロを実行するアドインの紹介
- https://www.ka-net.org/blog/?p=1636
- 「クイックアクセスツールバーからPowerPointマクロを実行するアドイン」のコード
- https://www.ka-net.org/blog/?p=5056
- クイックアクセスツールバーのボタンイメージを好きな画像にする(2)
- http://www.ka-net.org/ribbon/ri52.html
クイック アクセス ツール バーに独自ボタンを追加する方法
- まずはXMLを書いて、Custom UI Editorを使ってリボンをカスタマイズします。もちろん、Custom UI Editorを使わずファイルを編集しても問題はありません。
- 1.のファイルを開くと、「Sample Tab」タブに「サンプル」ボタンが追加されているのが確認できます。
- アプリケーションのオプション画面から「クイック アクセス ツール バー」を開きます。
- 「コマンドの選択」では1.でカスタマイズしたタブを選択し、「クイック アクセス ツール バーのユーザー設定」では、「すべてのドキュメントに適用 (既定)」ではなく「(1.のファイル名) に適用」を選択します。
- クイック アクセス ツール バーに登録したいボタンを選択し、「追加」ボタンをクリックします。
- 「OK」ボタンをクリックしてオプション画面を閉じた後、ファイルを上書き保存すれば作業終了です。
リボン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
上記ファイルをアドイン形式(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>





















いつも勉強させていただいています。
でやってみると、7番目の”印刷”の項目が表示されません。
この項目は使えないのでしょうか?
よろしくお願いいたします。
佐藤様
当ブログ管理人です。
コメント中にXMLを記載されたのでしょうか?
であれば、コードが消えてしまっているようですので、大変お手数ですが、XMLコードを「[xml][/xml]」タグで囲っていただけますでしょうか?
ありがとうございます。
2行目と3行目の間に
を入力しました。(これで表示されるでしょうか?)
佐藤様
当ブログ管理人です。
「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>私の不理解から言葉不足で、私の意図が伝わらずすみません。
<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等で区分けする必要が無ければ、上で書いた通り、
> オプション画面・クイック アクセス ツール バーで、「(対象ファイル名) に適用」にした上で、「コマンドの選択」から任意のコントロールを追加
クイック アクセス ツール バーのカスタマイズで直接コントロールを追加してしまえば、リボンをカスタマイズする必要はありません。
きぬあさ様
ありがとうございました。
希望していたことができるようになり、一通り解決しました。
いくつか理解できました。
一つは、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に変わり、ファイルを横に並べて表示するとリボンもクイックアクセスツールバーも見ずらくなってしまい、何とか「クイックアクセスツールバーのアイコンをまとめる」ことをしてみたいと思っていました。
そこで今回、「すべてのドキュメントに適用できるアドインの紹介」となったので、大変うれしく思い、しばらくぶりで試してみました。
今後もよろしくお願いします。