概要
記述したマクロをいつでも・どこでも実行できるようにするために「リボンに登録する」テクニックがあります。
事前知識としてリボン登録は
①:Excelのオプションから設定する「リボンのユーザー設定」
②:カスタムXMLの設定
の2通りがありますが、今回は②:カスタムXMLの設定のほうを指します。
①の方法は簡単にマクロをリボンに登録できますが、Excelブックを外部に配布した際にはその設定は引き継がれなかったり、引き継ぐにも特殊な処理が必要だったりと汎用性が低いです。
対して、②は①に対してXMLデータを自ら記述する必要があるため(参考)、設定においては難易度が非常に高くなります。しかし、配布先でも同様にリボンからマクロが実行できるようになるためより汎用性が高い設定となります。さらに大きなメリットとして次のようなものがあります。
・アイコンの種類を幅広く設定できる
・アイコンは好きな画像を登録することもできる
・アイコンのサイズは大小選択できる
・実行するマクロをラッパー関数化することで、より幅広い実装ができるようになる(実行マクロのショートカット自動登録による連続実行、実行↔コード表示切替、実行履歴保存)
ただ、②は「XMLデータを自ら記述する」というのが非常に敷居の高い技術であるため、なかなか②のメリットの恩恵が受けづらいというのが悲しいところです。
その現状を解決するのが今回紹介する「リボンXMLエディター」です。「リボンXMLエディター」はカスタムXMLの設定を飛躍的に簡素化することが可能となります。
リボンXML設定の実用例
百聞は一見に如かずということで、実際にリボンXML設定のよる実用例を紹介します。
マニュアルメーカーbyE ver1.17以降
当方が開発したツール「マニュアルメーカーbyE (以下:MME)」はver1.16まで各種機能をコマンドボタンから実行する形式でしたが、ver1.17以降はリボンに登録して実行できるようにしています。
従来のコマンドボタン設置だと、
・ボタンを文字や色でしか表現できないので、違いが分かりづらい
・シートの表示サイズにボタンのサイズが影響される
などのデメリットがありましたが、これらがリボンに移設することで解決しています。
開発専用アドイン「IkiAddin.xlam」
当方が開発作業で使用している専用アドイン「IkiAddon.xlam」で実行できる開発効率化機能をリボン登録でまとめています。
これら1つ1つを説明するのはかなり長尺になるので割愛しますが、「いつでも・どこでも」実行できるマクロを常にリボンから呼び出せるので非常に役に立っています。
「自分専用の開発アドイン(xlamファイル)の作成」に関しては自著にて解説していますので、ぜひご参考に:https://gihyo.jp/book/2024/978-4-297-14023-6
リボンXMLエディターを使わない場合
概要の「参考」でもリンク先を貼ったように、ExcelファイルのXMLデータを自分で変更する必要があります。
XMLデータの編集には「Custom Ui Editor Tool」というものを利用します。
Custom Ui Editor Tool参考:https://www.saka-en.com/office/custom-ui-editor-tool-install/
このXMLデータですが、日本語など全角文字がちゃんと表示されなかったり、設定したアイコン(imageMSO)はXMLデータからは何を選んでいるかは分かりません。なにより直感的に作業は不可能です。
imageMSO参考:https://www.ka-net.org/blog/?p=11351
リボンXMLエディターを使った場合
ここではリボンXMLエディターの便利さを実感いただくために、その便利機能を抜粋して説明します。
登録可能なマクロを一覧表示
「マクロ一覧出力」機能で選択ブックの中で記述してあるマクロのうち、リボンに登録可能なマクロを一覧で表示します。
XMLデータを表に変換
そのままだと見にくいXMLデータを、編集しやすいように表形式に変換します。この表をそのままExcel操作で変更し、改めてXMLデータの変換することも可能です。
アイコンの検索・選択フォーム
リボンに設定するアイコンをImageMSOの中から検索・選択できる機能
文字列検索によって抽出したアイコンから選択することで、より素早くアイコンを選択することができるようになる。
登録マクロの選択入力フォーム
リボンに登録するマクロを「モジュール」→「プロシージャ一覧」の順番で選択入力ができるようにしています。さらに、登録済みのマクロ(プロシージャ名)を右クリックすると、そのコードを閲覧でき「どのような処理だったか」をすぐに確認できます。
リボンXMLエディターの詳細使い方
ようやくですが、リボンXMLエディターの詳細の使い方を順序を追って説明いたします。
①初期設定1(UiEditorの起動パス)
最初にインストール済みのCustomUIEditorのフルパスを取得して、入力しておきます。
これで「UiEditer起動」ボタンでいつでも起動できるようになります。
CustomUIEditerのインストール先参考(再掲):
②初期設定2(各種設定)
「設定」シートにてそのほかの各種設定を行います。「アイコン選択フォーム」「アイコン画像のコメント表示」についてはデフォルトでほとんど大丈夫です。
「ラッパー関数名」については「ラッパー関数」について詳しく説明する必要があるので、一旦ここでは割愛します。
③既存のXML表示
すでに記述済みのXMLデータがある場合ですが、ブックを選択してそのブックのXMLデータの中身を確認します。
④XMLデータを表形式に変換
③にて中身を確認したXMLデータをすべてコピーして「XML入力」シートに貼り付け、「XMLを編集UIに変換」ボタンで表形式に変換します。
⑤「XML編集」シートにてXMLデータの編集
表形式になったXMLデータを「XML編集」シートにて行挿入や消去などの通常のExcel操作も交えつつ、ボタンなどを利用して簡単に編集できます。
⑥XML表からXMLデータへ変換
「XML編集」シートで作成したXMLの表を、XMLデータに変換します。
⑦XMLデータを反映
⑥までで作成したXMLデータを選択ブックへ反映させる作業です。
Custom UI Editorにコピーした後に、ブックを閉じて、Custom UI Editorにて保存。そして、改めてブックを起動させてリボンの変更結果がすぐに確認できます。
ラッパー関数について
ここで使用しているラッパー関数はリボンから実行するマクロを、すべて同じ関数(ラッパー関数)を介して実行することで、共通の処理を持たせることを実現しています。リボンXMLエディターもこのラッパー関数を使用する前提で開発しているので、ここでラッパー関数について理解を進めていただきます。
まず公開ツールであるMMEで説明すると、MMEで記述しているラッパー関数は次のようなものを記述しています。
プロシージャ名は「RibbonOnAction」としていますが、別になんでもよいですが、引数に「control」というIRibbonControl型が与えられています。
今更の説明ですが、実はこの引数「control」を入れておかないと、そのマクロ(プロシージャ)はリボンには登録ができません。ですので、既存のマクロをリボンに登録しようと思った場合は、それらすべてに別個、引数「control」を用意したプロシージャを準備する必要があります。
ここで引数controlについて説明すると、これはクリックされたリボンの情報を持っています。上記のRibbonOnActionでは変数「ProcName」を「control.IDプロパティ」で取得しています。このIDプロパティは「xml編集」シートのF列のidで設定した「実行する関数名(マクロ名)」となっております。この関数名(ProcName)をもとに
・Application.Runで実行したり
・Application.Gotoでコードを表示したり
・Application.OnKeyで連続実行用のショートカットを設定したり
などいろんなことができるようになります。
ちなみにMMEに記述しているラッパー関数は様々な機能を実装しているため、少し複雑となっておりますが、「実行するだけ」のラッパー関数であれば下記のようなものだけでも大丈夫です。
Public Sub RibbonOnAction(control As IRibbonControl)
'リボンからマクロ実行用のラッパー関数
Dim ProcName As String: ProcName = control.ID
Application.Run ProcName
End Sub
実際にリボンXMLエディターでリボンを設定するブックには、このようなラッパー関数を1つ記述してリボンを設定するようにしてください。
また説明が舞い戻りますが、初期設定において設定する「ラッパー関数名」はその際に記述したラッパー関数の関数名を入力しておけば「xml編集」シートでボタンから簡単に入力できるようになります。
リボンXMLエディターのダウンロード
リボンXMLエディターのダウンロード先です。
圧縮ファイルを解凍して「リボンXMLエディター ver1.04 xlsm」を「imageMso」フォルダとセットで利用するようにしてください。
Comments