我正在使用以下XML代码为Excel加载项创建自定义功能区。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="ComdinheiroTab" label="COMDINHEIRO">
<group id="ComdinheiroButtons" label="Comdinheiro">
<button id="Login" getLabel="getLabelLogin" image="Login" size="large" onAction="OnActionLogin"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
我使用以下VBA代码为按钮登录设置标签:
Sub getLabelLogin(control As IRibbonControl, ByRef returnedVal)
if loggedIn = true then
returnedVal = "Logged"
else
returnedVal = "Disconected"
end if
End Sub
加载功能区时,标签的名称会根据变量loggedIn的值成功更改。但是我希望我可以在执行程序时更改标签的值。是否可以使用VB代码调用getLabel事件?无论如何都要刷新我的功能区,以便再次调用此事件吗?
答案 0 :(得分:12)
是的,可以运行&#34;得到&#34;稍后回调。为此,您需要创建一个模块或全局级变量来保存&#34;功能区UI&#34;宾语。该对象有两个有用的方法:Invalidate和InvalidateControl。第一个触发 all &#34; get&#34; Ribbon XML中的回调。第二个触发器仅针对指定的控件触发回调。
加载功能区时,必须将功能区ui指定给此对象。为了实现这一点,您需要Ribbon XML的customUI标记中的属性onLoad
及其在VBA中的回调。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="ribbonLoaded">
<ribbon startFromScratch="false">
<tabs>
<tab id="ComdinheiroTab" label="COMDINHEIRO">
<group id="ComdinheiroButtons" label="Comdinheiro">
<button id="Login" getLabel="getLabelLogin" image="Login" size="large" onAction="OnActionLogin"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
VBA:
Dim ribbonUI as IRibbonUI
Sub ribbonLoaded(ribbon as IRibbonUI)
Set ribbonUI = ribbon
End Sub
Sub UpdateTheLabel
ribbonUI.InvalidateControl("Login")
End Sub
Sub getLabelLogin(control As IRibbonControl, ByRef returnedVal)
if loggedIn = true then
returnedVal = "Logged"
else
returnedVal = "Disconected"
end if
End Sub
只要过程可以访问InvalidateControl
对象,过程调用ribbonUI
并不重要。
有关详细信息,请参阅MSDN文章https://msdn.microsoft.com/en-us/library/aa338202(v=office.12)#OfficeCustomizingRibbonUIforDevelopers_Dynamically