Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态更改功能区';s按钮标签Excel_Excel_Xml_Vba_Ribbon - Fatal编程技术网

动态更改功能区';s按钮标签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">

我正在使用以下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>
加载功能区时,标签名称将根据变量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