填写自定义功能区组合框(运行时)

问题描述 投票:0回答:1

我在用CustomEditor(XML)创建的自定义功能区中有一个组合框。

当我按下Excel工作表中的命令按钮时,我想修改组合框元素。

            <comboBox id="Combo3" getItemCount="Módulo4.Número_Elementos_Combobox" getItemID="Módulo4.Identificador_Items" getItemLabel="Módulo4.Texto_Items" image="Foto_Excel" onChange="Módulo1.Todos_Los_Combos">
            </comboBox>

非常感谢。问候。何塞。

excel vba ribbon ribbon-control ribbonx
1个回答
0
投票

您需要使用功能区对象的InvalidateControl method来使缓存无效,并更新组合框。

[首先,如果尚未这样做,则需要在RibbonX代码中为customUI标签包含一个onLoad参数。此参数将指定打开工作簿时要执行的VBA回调过程,以便可以创建功能区对象。

然后,您需要包括针对getItemCount,getItemLabel和getItemID的VBA回调过程。当组合框无效时,将调用getItemCount。然后依次调用getItemLabel和getItemID。

getItemCount过程是您在其中指定要在组合框中包含多少个项目的地方。结果,getItemLabel和getItemID都被调用了相同的次数,因此可以相应地更新ID和标签。

然后,当然,您需要包括将分配给您的按钮的过程,这实际上会使组合框无效。

由于您尚未提供所有相关详细信息,因此以下示例希望您能够适应您的需求。

RibbonX代码

<!--RibbonX Visual Designer 2.33 for Microsoft Excel CustomUI14 . XML Code produced on 2020/05/16-->
<customUI 
    xmlns="http://schemas.microsoft.com/office/2009/07/customui"
    onLoad="Initialize">
    <ribbon >
        <tabs >
            <tab 
                id="Tab1"
                label="Tab1">
                <group 
                    id="Group1"
                    label="Group1">
                    <comboBox 
                        id="Combo3"
                        label="MyCombobox"
                        getItemCount="Combo3_getItemCount"
                        getItemID="Combo3_getItemID"
                        getItemLabel="Combo3_getItemLabel"
                        getText="Combo3_getText"
                        onChange="Combo3_onChange"/>
                </group >
            </tab >
        </tabs >
    </ribbon >
</customUI >

VBA代码

Option Explicit

Dim myRibbon As IRibbonUI

'Callback for customUI.onLoad
Sub Initialize(ribbon As IRibbonUI)
    Set myRibbon = ribbon
End Sub

'Callback for Combo3 getItemCount (called once when the combobox is invalidated)
Sub Combo3_getItemCount(control As IRibbonControl, ByRef returnedVal)
    returnedVal = 10 'the number of items for combobox
End Sub

'Callback for Combo3 getItemID (called 10 times when combobox is invalidated)
Public Sub Combo3_getItemID(control As IRibbonControl, index As Integer, ByRef id)
    id = "ComboboxItem" & index + 1
End Sub

'Callback for Combo3 getItemLabel (called 10 times when combobox is invalidated)
Sub Combo3_getItemLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
    returnedVal = "Item" & index + 1
End Sub

'Callback for Combo3 getText
Sub Combo3_getText(control As IRibbonControl, ByRef returnedVal)
    returnedVal = "" 'clears the text from the combobox
End Sub

'Callback for Combo3 onChange
Sub Combo3_onChange(control As IRibbonControl, text As String)
    MsgBox "You have chosen " & text
End Sub

Sub UpdateCombo3()
    myRibbon.InvalidateControl "Combo3" 'invalidates the cache for the combobox
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.