动态更改功能区';s按钮标签Excel
我正在使用以下XML代码为Excel加载项创建自定义功能区动态更改功能区';s按钮标签Excel,excel,xml,vba,ribbon,Excel,Xml,Vba,Ribbon,我正在使用以下XML代码为Excel加载项创建自定义功能区 <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="ComdinheiroTab" label="COMDINHEIRO">
<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>
加载功能区时,标签名称将根据变量loggedIn的值成功更改。然而,我希望我可以在程序执行期间更改标签的值。是否可以使用VB代码调用getLabel事件?是否需要刷新我的功能区以便再次调用此事件?是的,以后可以运行“获取”回调。为此,您需要创建一个模块级或全局级变量来保存“ribbon UI”对象。该对象有两个有用的方法:Invalidate和InvalidateControl。第一个触发功能区XML中的所有“get”回调。第二个只触发指定控件的回调
加载功能区时,必须将功能区ui指定给此对象。为了实现这一点,您需要功能区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>
只要过程有权访问ribbonUI
对象,调用什么过程都不重要
有关这方面的更多信息,请参阅MSDN文章@Ihidan如果Cindy的建议解决了您的问题,您可能希望将其标记为
答案
,以便其他读者(如我)可以更好地从中受益。
<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>
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