You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel Ribbon ComboBox切换工作表后不刷新问题求助

问题:Excel Ribbon ComboBox切换工作表时不刷新显示

我正在设置一个用于选择工作表的Ribbon ComboBox,此前存在两个问题:

  1. 选择工作表时,ComboBox不会刷新显示;
  2. 保存并重新打开工作簿后,ComboBox默认显示第一个选项。

目前第二个问题已解决,但第一个问题仍存在:点击工作表标签切换时,ComboBox无法自动刷新显示当前激活的工作表。我猜测可能是读写注册表的变量放置位置有误?是否应放在单独模块中?另外,RibUI.InvalidateControl "ComboBox001"同时存在于ThisWorkbook和回调模块中是否合理?

现有代码

XML部分

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="LoadRibbon">
    <ribbon>
        <tabs>
            <tab id="Tabv3.1" label="TOOLS" insertAfterMso="TabHome">                  
                <group id="GroupDemo2" 
                label="SelectSheet"
                imageMso="AddInManager">
                    <comboBox id="ComboBox001"
                    label="comboBox001"
                    getText="ComboBox001_GetText"
                    onChange="ComboBox001_OnChange">
                        <item id="ItemOne"
                        label="One"/>
                        <item id="ItemTwo"
                        label="Two"/>
                        <item id="ItemThree"
                        label="Three"/>
                    </comboBox>
                </group>     
            </tab>
        </tabs>
    </ribbon>
</customUI>

回调模块(RibbonCallbacks)VBA代码

Option Explicit
Public RibUI As IRibbonUI
Public Const myApp As String = "RibbApp", mySett As String = "Settings", myVal As String = "Value"

Sub LoadRibbon(Ribbon As IRibbonUI)
    Set RibUI = Ribbon
    RibUI.InvalidateControl "ComboBox001"
End Sub

'Callback for ComboBox001 onChange
Sub ComboBox001_OnChange(control As IRibbonControl, id As String)
    Select Case id
        Case "One"
            ThisWorkbook.Sheets("Sheet1").Select
        Case "Two"
            ThisWorkbook.Sheets("Sheet2").Select
        Case "Three"
            ThisWorkbook.Sheets("Sheet3").Select
    End Select
    RibUI.InvalidateControl "ComboBox001"
    SaveSetting myApp, mySett, myVal, id
End Sub

'Callback for ComboBox001 getText
Sub ComboBox001_getText(control As IRibbonControl, ByRef returnedVal)
  Dim comboVal As String
    comboVal = GetSetting(myApp, mySett, myVal, "No Value") 'read it from Registry
    If comboVal <> "No Value" Then
      returnedVal = comboVal
    End If
End Sub

ThisWorkbook中的VBA代码

Private Sub Workbook_Open()

End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    RibUI.InvalidateControl "ComboBox001"
End Sub

内容的提问来源于stack exchange,提问作者user23636411

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:11:02