我正在使用自定义UI编辑器为Excel创建自定义选项卡,我有两个DropDown控件。我们称之为DropDown1和DropDown2。我的目标是每当我更改DropDown1选项时它会自动更改de DropDown2选择,但我不知道如何在DropDown控件中设置“SelectedItem”。
到目前为止,我有一个VBA函数,每当我更改DropDown1的选择时都会触发,我认为这可能会有所帮助。
答案 0 :(得分:1)
您需要在自定义UI编辑器中为功能区XML添加回调函数,然后在功能区选项卡失效时将相应的代码添加到要调用的VBA项目中。为下拉控件设置所选项目所需的回调是getSelectedItemIndex
或getSelectedItemID
,具体取决于您是要按索引还是按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