VBA

VBA リボンの追加に挑戦

業務上、本当によくExcelを使う。

業務フローが完全に整理されていて無駄のないシステムができあがっているのが理想だが、現実はなかなか厳しい。色々なところにちょっとしたマクロを組み込むことで効率が上がるので、今までチョコチョコと作ってきた。

広告


マクロを作る上で一つだけ壁があった。それはリボン。Office 2000時代、ツールバーへのボタン追加ができないまま放置、気付いたらツールバーはリボンに変わっていた。

ツールバー・リボンにボタンが付けられれば、今、この瞬間に選択しているセルやセル範囲を加工できて便利だが、今までは全く別の方法でこれを実現してきた。

今回、自分だけでなく同僚も使うツールを作ることを思い立った関係で、リボンに機能追加させることが必要事項となったため、色々と調べてみた。

なお、マクロそのものの作り方については知っている前提で記載する

 

リボンにボタンを付けてマクロを呼び出す

結論からすると、やることは4つ。古いやり方とかが混ざっているかもしれないが、動くからいいかなと。

  1. マクロ入りブックを作る。
  2. マクロ入りブックにリボンを追加し、リボンのボタンなどからマクロを起動できるようにする。
  3. マクロ入りブックをアドインにする。
  4. アドインをExcelに登録する。

マクロを普通に作り、マクロ動作条件やマクロの呼び出しをリボンに設定する感じ。特に難しいことはなかった。

 

1. マクロ入りブックを作る。

新規にブックを作成し、とりあえず、メッセージボックスにおなじみの「Hello World!」を表示するだけのマクロを作成する。 マクロ自体はシートでも、ブックでも、標準モジュールでも問題はなさそうだが、今回は標準モジュールに実装した。

関数の引数は ByVal control As IRibbonControl としている。
ブックは「テスト.xlsm」という名前で保存した。

※なお、標準モジュール名は「AppLib」という名前に変更していることに注意。(5/10追記)

 

2.マクロ入りブックにリボンを追加し、リボンのボタンなどからマクロを起動できるようにする。

Excelブックの実態はZIPファイルになっているみたい。 拡張子をxlsmからzipに変えて展開すると、以下のファイルが展開される。

テスト.xlsm
├ [Content_Types].xml
├ _rels\
│  └ .rels           (1) 変更:ここに(2)へのリレーション情報を追記
├ customUI\
│  └ customUI14.xml  (2) 追加:リボンのカスタマイズ内容を記載
├ docProps\
│  ├ app.xml
│  └ core.xml 
└ xl\
    ├ sharedStrings.xml
    ├ styles.xml 
    ├ vbaProject.bin
    ├ workbook.xml
    ├ _rels\
    │  └ workbook.xml.rels
    ├ theme\
    │  └ theme1.xml
    └ worksheets\
        ├ sheet1.xml
        ├ sheet2.xml
        └ sheet3.xml

 

なるほどなぁ、という感じ。

テキストファイルで .rels や customUI14.xml を書いてzipファイルに格納すれば、それでリボンは追加できる。が、拡張子をxlsmからzipに変えて展開し、編集してまたzip圧縮し、拡張子をxlsmに戻す・・・というのをデバッグするときに何度も行うのは面倒なので、ツールを使用する。

会社で使うことを考えて、ライセンス的にまず問題なさそうなマイクロソフト製品 Custom UI Editor For Microsoft Office を使わせていただいた(このツール、日本語が使えない問題あり)。
先日、久しぶりにリボンに追加するタイプのマクロを作ることになってツールを探したら日本語対応しており、ライセンスも問題がなさそうな形になっていた。
GitHub / office-custom-ui-editor

インストールに若干手間がかかるけれども、ここで詳しく教えてくれている。
初心者備忘録 / Custom UI Editorの最新版がGitHubで公開されました。 ※2019/05/20追記

このツールでマクロ入りブックを開き、今回はターゲットが Excel 2010 なので、Office 2010 Custom Part を追加、そこに xml 形式でリボンの中身を定義する。

 

リボンの中身としてはとりあえずこれを。

customUI\customUI14.xml

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="CustomTab" label="HelloWorldTab">
        <group id="TestGroup" label="Test Group">
          <button id="TestButton1" label="Hello!!" 
            size="large" imageMso="MeetingsToolAppointmentRecurrence" 
            screentip="Hello!" 
            onAction="AppLib.HelloWorld" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

※AppLibとしたのは、HelloWorld関数を書いた標準モジュールの名前をAppLibに変えているから。モジュール名は呼び出す関数をかいたモジュール名にする。

追加したら、ファイルを保存する。

結果として、(1)ファイルはこうなった。

_rels\.rels

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/><Relationship Id="Rcffae9ff90eb427a" Type="http://schemas.microsoft.com/office/2007/relationships/ui/extensibility" Target="customUI/customUI14.xml"/></Relationships>

 

Excelでこのマクロ入りブックを開くとリボンが表示され、ボタンを押せば Hello World! メッセージが表示される。

 

3. マクロ入りブックをアドインにする。

動作が確認できたら、マクロ入りブックをアドインにする。

 

保存ボタンを押すと

この拡張子は、選択したファイル形式には使用できません。[ファイル名]ボックスでファイル拡張子を変更するか、[ファイルの種類]ボックスで別のファイル形式を選択してください。

 

というメッセージが表示される。OKボタンを押すと、アドインとして保存ができる。

この時のアドインの保存先は、 C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\AddIns となる(もちろん、Usersディレクトリを移動している場合にはこの限りではない)。

 

4.アドインをExcelに登録する。

ファイルを保存するだけだとアドインとして動作しない。 Excelを起動してアドインを登録する。

ファイル→オプション

アドイン→Excelアドイン選択→設定

今回はテストというブック名でファイル保存したので、テストというアドイン名になっている。これを選択してOKする。

以上でアドインとして登録ができ、Excelを起動するとリボンが表示されるようになった。

 

アドインの削除

アドインを削除するには…

  • Excelを起動し、アドイン登録の要領で「アドイン」画面を開き、チェックマークを外してOKボタンをクリックする。
  • C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\AddIns にアドインとして保管したブック(xlamファイル)を削除

でOK。

 

謝辞

今回は様々なサイトを参考にさせていただいた。 心より感謝致します。

■マイクロソフト
2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 1/3)
2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 2/3)
2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 3/3)
※パート 1/3 で概要を理解、パート 2/3 で使用できるコントロール情報が分かる。

Office 2010 のコンテキスト メニューのカスタマイズ
※今回は触っていないが、コンテキストメニューもカスタマイズできるらしい。

Office 2010 Add-In: Icons Gallery
※リボンで使えるOfficeのアイコンが見られるツール。

■その他

Open XML Developper Custom UI Editor Tool ※今回使用したツールをダウンロードした。
GitHub / office-custom-ui-editor
初心者備忘録 / Custom UI Editorの最新版がGitHubで公開されました。 

※最新版ツールのダウンロードと、そのインストール方法。

初心者備忘録 Office関連
※やってみて分かってから見ると、情報量が多く超有用。オススメ。

Excelでお仕事!「配布の問題」
※アドインを作っていつも最後の壁になっていた「Excelを起動するたびにアドインブックが表示されてしまう問題」をあっさり解決してくれた。ブックのプロパティが鍵だった。

広告

コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他