我有一個自定義的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
在我具體的工作簿中功能區應加載爲我有一個隱藏的表,從我的類模塊類讀取每個按鈕的值,以確定它是否應該顯示或不。一旦我閱讀了這個值,我該如何隱藏一個單獨的按鈕?我發現的所有例子似乎只能用於製表符。我可以將ribbonUI傳遞給類並通過每個控件循環嗎?我一直無法找到這樣做的方法。謝謝你的幫助!
,我打算給getVisible回調添加到我的XML,像這樣: <按鈕ID =「BT1」 getVisible =「ButtonVisible」 但我的色帶停止顯示,如果是畸形XML的。你不能在button標籤中使用這個屬性嗎? – db579
@ db579是否還在工作簿的VBProject中添加了「getVisible」子例程? (有點愚蠢的問題,但只是想確保你沒有忽視明顯的)另外,我注意到你在Group控件上使用了相同的'getVisible'自定義屬性。在我的應用程序中,**我不能在不同類型的控件上使用相同的回調/宏** - 如果您在組控件(「group1」)上使用'getVisible',請嘗試使用不同的回調(即使它是重複的代碼)在按鈕上。讓我知道,我可以嘗試在今晚晚些時候用一個按鈕進行測試。 –
是的,我沒有添加相應的宏到項目中,我從組中刪除了回調,所以不應該有任何衝突。我確實使用了獲取可見回調的選項卡,但是我給這個宏指定了一些不同的東西(我認爲getVisible =''位必須被調用才能工作? – db579