ドロップダウンリストを動的に変化させる方法です。


リボンでドロップダウンリストを利用するには「dropDown」を使用します。
リボンで動的にListItemを切り替えるにはXMLの記述で「getItemLabel」を使用します。
「get」と付くので取得のみと思われがちですが、設定も出来ます。
以下の記述を解説すると「Combo1」を動的に切り替えたいので、XMLの「getItemLabel」は「Combo1」部分に記述します。VBAにはその時、設定したい値を設定します。
ボタンを押して更新するのはあくまで「Button1」をクリックした時にリスト内容を変更するので、VBAのInvalidateControlの記述は「Button1」のOnAtionに設定してある「Macro5」に記述します。
「Macro1」「Macro2」「Macro3」はファイルオープン時と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">
<dropDown id="Combo1" label="テストボックス" getItemCount="Module1.Macro1" getItemID="Module1.Macro2" getItemLabel="Module1.Macro3" onAction="Module1.Macro4" />
<button id="Button1" imageMso="FileSave" label="テストコマンド1" size="large" onAction="Module1.Macro5" />
</group >
</tab>
</tabs>
</ribbon>
</customUI>

VBA・標準モジュール、Module1の記述例:
Dim MyRibbon As IRibbonUI
Dim I As Variant
Sub MyAddInInitialize(Ribbon As IRibbonUI)
Set MyRibbon = Ribbon
I = Array("コピー", "貼り付け", "電卓")
End Sub
Sub Macro1(control As IRibbonControl, ByRef count)
count = UBound(I) + 1
End Sub
Sub Macro2(control As IRibbonControl, index As Integer, ByRef ID)
ID = "masta" & index
End Sub
Sub Macro3(control As IRibbonControl, index As Integer, ByRef label)
label = I(index)
End Sub
Sub Macro4(control As IRibbonControl, selectedId As String, selectedIndex As Integer)
MsgBox "「" & I(selectedIndex) & "」が選択されました"
End Sub
Sub Macro5(control As IRibbonControl)
I = Array("コピー", "切り取り")
MyRibbon.InvalidateControl "Combo1"
End Sub
リボンのカスタイマイズ方法トップ