コマンドボタンの表示名を動的に変化させる方法です。
リボンで動的にlabelを切り替えるにはXMLの記述で「getLabel」を使用します。
「get」と付くので取得のみと思われがちですが、設定も出来ます。
ボタンを押して更新するのはあくまで「Button2」をクリックした時に表示名を変更するので、VBAのInvalidateControlの記述は「Button2」のOnAtionに設定してある「Macro2」に記述します。
「Macro1」はファイルオープン時とInvalidateControl実行時に実行されます。
また、XMLの「<customUI ・・>」に「onLoad="***"」を入れます。これはファイル起動時に自動的に実行するコードを意味します。
VBAの方では
XML・customUI.xmlの記述例:
<?xml version="1.0" encoding="Shift_JIS" ?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="MyAddInInitialize">
<ribbon>
<tabs>
<tab id="CustomTab" label="テスト">
<group id="Group1" label="テストグループ1">
<button id="Button1" imageMso="FileSave" getLabel="Module1.Macro1" size="large" onAction="Module1.Macro3" />
<toggleButton id="Button2" imageMso="FileClose" label="テストコマンド1" size="large" onAction="Module1.Macro2" />
</group >
</tab>
</tabs>
</ribbon>
</customUI>
VBA・標準モジュール、Module1の記述例:
Dim B As Boolean
Dim MyRibbon As IRibbonUI
Sub MyAddInInitialize(Ribbon As IRibbonUI)
Set MyRibbon = Ribbon
End Sub
Sub Macro3(control As IRibbonControl)
'Bの変数の値によって実行する内容を変える
If B = True Then
MsgBox "「オン」モードで実行します"
Else
MsgBox "「オフ」モードで実行します"
End If
End Sub
Sub Macro1(control As IRibbonControl, ByRef label)
'Bの変数の値によって表示文字を変える
If B = True Then
label = "O N"
Else
label = "OFF"
End If
End Sub
Sub Macro2(control As IRibbonControl, ByRef returnValue)
MsgBox IIf(returnValue, "オンにします", "オフにします")
'トグルボタンのオン、オフの状態を変数Bに代入
B = returnValue
'指定のIDのコマンドを更新する
MyRibbon.InvalidateControl "Button1"
End Sub
リボンのカスタイマイズ方法トップ