t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

改訂第3版 VBAリボンから呼び出すマクロに共通の前処理をつける方法

今日また違うやり方を思いついたので公開。
前回の記事はこちら。

マクロに共通処理をつけるところまでは前回の処理でうまくいっていたが、今回仕事で作成したアドインでグループごとに別の共通処理を呼び出す必要が出てきた。

それで考えたのが、tagで共通マクロを、idで個別マクロを識別する方法。
共通処理が無いマクロはtagにDummyを設定しておく。

CustomUI.xmlの内容はこちら。

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="SampleTab" label="○○タブ">

<group id="CustomGroupA" label="○○グループ">
<button id="Hello" imageMso="HappyFace" size="large" label="マクロA" tag="ooCommon" onAction="Start" />
<button id="GoodBye" imageMso="SadFace" size="normal" label="マクロB" tag="ooCommon" onAction="Start" />
</group>

<group id="CustomGroupB" label="××グループ">
<button id="Konnichiwa" imageMso="HappyFace" size="large" label="マクロC" tag="xxCommon" onAction="Start" />
<button id="Sayonara" imageMso="SadFace" size="normal" label="マクロD" tag="Dummy" onAction="Start" />
</group>

</tab>
</tabs>
</ribbon>
</customUI>

VB側の処理はこちら。

Sub Start(ByVal control As IRibbonControl)
    Application.Run control.Tag
    Application.Run control.ID
End Sub

Private Sub Dummy()
    '何もしないダミーマクロ
End Sub

Private Sub ooCommon()
    MsgBox "○○グループの共通処理!"
End Sub

Private Sub xxCommon()
    MsgBox "××グループの共通処理!"
End Sub

Private Sub Hello()
    MsgBox "Hello!"
End Sub

Private Sub GoodBye()
    MsgBox "Good Bye!"
End Sub

Private Sub Konnichiwa()
    MsgBox "こんにちは!"
End Sub

Private Sub Sayonara()
    MsgBox "さよなら!"
End Sub

本来IDはマクロの識別を目的としたものでは無いので、このやり方は好き嫌いが分かれるかもしれない。ただ、たまたま、マクロ名もIDも重複が許されないという点で要件は一致しているので、私はこういうやり方もアリだと思う。

リボンの機能はまだよく知らないので、他にもっとスマートなやり方を見つけたら再度改訂版を書こうと思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。