dynamic更改function区的button标签Excel

我正在使用以下一段XML代码为Excel加载项创build一个自定义function区。

<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代码来设置buttonlogin的标签:

 Sub getLabelLogin(control As IRibbonControl, ByRef returnedVal) if loggedIn = true then returnedVal = "Logged" else returnedVal = "Disconected" end if End Sub 

加载function区时,标签的名称将根据variablesloggedIn的值成功更改。 但是,我希望我可以在执行我的程序时更改标签的值。 是否有可能使用VB代码调用getLabel事件? 无论如何刷新我的丝带,所以这个事件会再次被调用?

是的,以后可以运行“get”callback。 为此,您需要创build一个模块或全局级variables来保存“function区UI”对象。 该对象有两个有用的方法:Invalidate和InvalidateControl。 第一个触发Ribbon XML中的所有 “get”callback。 第二个触发器只对指定的控件进行callback。

function区加载时,必须将您的function区UI分配给此对象。 为了实现这一点,您需要Ribbon XML的customUI标记中的onLoad属性以及VBA中的callback函数。

 <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 

只要过程有权访问ribbonUI对象,哪个过程调用InvalidateControl ribbonUI

有关这方面的更多信息,请参阅MSDN文章https://msdn.microsoft.com/zh-cn/library/aa338202(v=office.12)#OfficeCustomizingRibbonUIforDevelopers_Dynamically