Вам нужно добавить функцию обратного вызова в XML-код ленты в редакторе пользовательского интерфейса, а затем добавить соответствующий код в проект VBA, который будет вызываться, когда вкладка ленты становится недействительной. Обратный вызов, который вам нужен, чтобы установить выбранный элемент для раскрывающегося списка, — это либо getSelectedItemIndex
, либо getSelectedItemID
, в зависимости от того, хотите ли вы выбрать элемент по индексу или по идентификатору. Поскольку вы не предоставили никакого кода, мой пример является общим (и не проверенным):
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
person
Olle Sjögren
schedule
24.04.2017