如何在Custom DropDown Ribbon Control上设置所选项目

时间:2017-04-23 18:45:26

标签: excel vba excel-vba ribbon ribbonx

我正在使用自定义UI编辑器为Excel创建自定义选项卡,我有两个DropDown控件。我们称之为DropDown1和DropDown2。我的目标是每当我更改DropDown1选项时它会自动更改de DropDown2选择,但我不知道如何在DropDown控件中设置“SelectedItem”。

到目前为止,我有一个VBA函数,每当我更改DropDown1的选择时都会触发,我认为这可能会有所帮助。

1 个答案:

答案 0 :(得分:1)

您需要在自定义UI编辑器中为功能区XML添加回调函数,然后在功能区选项卡失效时将相应的代码添加到要调用的VBA项目中。为下拉控件设置所选项目所需的回调是getSelectedItemIndexgetSelectedItemID,具体取决于您是要按索引还是按ID选择项目。由于您没有提供任何代码,我的考试是一般的(并且没有经过测试):

功能区XML

<dropDown id="drpTest" label="Test dropdown" getSelectedItemIndex="drpTestGetSelectedItem" ></dropDown>

VBA回调

'Callback for drpTest getSelectedItemIndex
Sub drpTestGetSelectedItem(control As IRibbonControl, ByRef returnedVal)
    returnedVal = 1   '***** To select the item with index 1,
                      '***** replace with code to select the desired item
End Sub

修改

基于其他下拉列表选择索引的示例。在类似的解决方案中,我在一个控件的onAction函数中设置了一个值,并使用它在另一个控件中设置所选索引,如下所示:

功能区XML

<dropDown id="drpTest1" label="Test dropdown 1" onAction="drpTest1OnAction" ></dropDown>
<dropDown id="drpTest2" label="Test dropdown 2" getSelectedItemIndex="drpTest2GetSelectedItem" ></dropDown>

VBA回调

Global myRibbon As IRibbonUI
Global giIndex As Integer

'Callback for customUI.onLoad
Sub RibbonOnLoad(ribbon As IRibbonUI)
    '***** Save reference to ribbon object to invalidate
    Set myRibbon = ribbon
End Sub

'Callback for drpTest1 onAction
Sub drpTest1OnAction(control As IRibbonControl, id As String, index As Integer)
    '***** Set selected item variable for drpTest2
    giIndex = index
    '***** Tell Excel to redraw ribbon
    '(you could invalidate only parts of the ribbon with InvalidateControl
    'or InvalidateControlMso)
    myRibbon.Invalidate
End Sub

'Callback for drpTest2 getSelectedItemIndex
Sub drpTest2GetSelectedItem(control As IRibbonControl, ByRef returnedVal)
    '***** Return selected item for drpTest2 based on value stored in giIndex
    returnedVal = giIndex
End Sub