ワークブックを開くと一度インスタンス化されるクラスを含むカスタム Excel リボンと Excel アドインがあります。クラスのいくつかの属性に基づいて、カスタム リボン (すべて同じタブ内) から特定のボタンを非表示にする必要があります。
私のカスタム リボンは次のとおりです。
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="loadCustom">
<ribbon>
<tabs>
<tab id="tab1" label="customTab" getVisible="GetVisible" tag="myTab">
<group id="grp1" label="Group1" imageMso="ViewFullScreenView" getVisible="GetVisible">
<button id="Bt1" size="large" label="Button1" imageMso="AccessListIssues" onAction="runBt1" visible="true"/>
<button id="Bt2" size="large" label="Button2" imageMso="AccessListTasks" onAction="runBt2" visible="true"/>
<button id="Bt3" size="large" label="Button3" imageMso="ControlLayoutStacked" onAction="runBt3" visible="true"/>
<button id="Bt4" size="large" label="Button4" imageMso="ControlLayoutTabular" onAction="runBt4" visible="true"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
次に、モジュールに次の VBA マクロを配置して、カスタム リボンをロードしたり無効にしたりします。
Public Sub loadCustom(ribbon As IRibbonUI)
Set RibUI = ribbon
If workbookTitle = "myWorkbook" Then
MyTag = "show"
Else
MyTag = False
RefreshRibbon MyTag
End If
End Sub
Sub GetVisible(control As IRibbonControl, ByRef visible)
If MyTag = "show" Then
visible = True
Else
If control.Tag Like MyTag Then
visible = True
Else
visible = False
End If
End If
End Sub
Sub RefreshRibbon(Tag As String)
MyTag = Tag
If RibUI Is Nothing Then
MsgBox "Error, Save/Restart your workbook"
Else
RibUI.Invalidate
End If
End Sub
リボンをロードする必要がある特定のワークブックには、クラス モジュール クラスが各ボタンの値を読み取り、表示するかどうかを決定する非表示のシートがあります。この値を読み取ったら、個々のボタンを非表示にするにはどうすればよいですか? 私が見つけたすべての例は、タブに対してのみ機能するようです。リボン UI をクラスに渡して、各コントロールをループすることはできますか? これを行う方法を見つけることができませんでした。助けてくれてありがとう!