Я использую версию 1904 Excel (последний ежемесячный выпуск Office 365).
Я пытаюсь добавить пользовательский ComboBox на ленту со списком, который может измениться во время выполнения.
Два обратных вызова никогда не вызывают, независимо от того, что я делаю: getItemLabel
и getItemID
.ComboBox, таким образом, никогда не заполняется никакими данными.Другие 2 Обратных вызова вызываются как ожидается, getItemCount
и onChange
.
Я бы подумал, что 2 неработающие обратные вызовы будут запущены сразу после getItemCount
, но я могу видеть только то, что код проходит getItemCount
, когда я отлаживаю, куда идет код.
Ниже приведен фрагмент моего XML-файла, который я добавляю в свой лист Excel с помощью бесплатного Редактора пользовательского интерфейса для Microsoft Office :
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="rxIRibbonUI_onLoad">
<ribbon>
<tabs>
<tab id="xlSherlockTab" label="Share Register" keytip="K" insertBeforeMso="TabHome">
<group id="customGroupSettings" label="Settings">
<comboBox id="cboSearchIssuer" label="Issuer" getItemCount="RibbonUI.SearchIssuer_getItemCount" getItemID="RibbonUI.SearchIssuer_getItemId" getItemLabel="RibbonUI.SearchIssuer_getItemLabel" onChange="RibbonUI.SearchIssuer_Click"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Экстракт соответствующегочасть кода VBA, размещенная в стандартном модуле под названием RibbonUI
:
'Callback for customUI.onLoad
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
MsgBox "ribbon_onLoad"
RibbonManager.SetRibbon ribbonParameter:=ribbon
ribbon.InvalidateControl ("cboSearchIssuer")
End Sub
''''''''''''''''''''
''rxcboSearchIssuer
''''''''''''''''''''
'Callback for rxcboSearchIssuer onChange
Sub SearchIssuer_Click(control As IRibbonControl, text As String)
MsgBox text
RibbonManager.GetRibbon().InvalidateControl ("cboSearchIssuer")
End Sub
'Callback for rxcboSearchIssuer getItemCount
Sub SearchIssuer_getItemCount(control As IRibbonControl, ByRef returnedVal)
MsgBox DASHBOARD.ListObjects(1).ListRows.Count
MsgBox control.id
returendVal = DASHBOARD.ListObjects(1).ListRows.Count
End Sub
''NOT BEING CALLED FROM HERE ONWARDS....
'Callback for rxcboSearchIssuer getItemLabel
Sub SearchIssuer_getItemLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
returnedVal = "Harry: " & CStr(index) 'DASHBOARD.ListObjects(1).ListRows(index).Range(1, 3)
End Sub
Sub SearchIssuer_getItemID(control As IRibbonControl, index As Integer, ByRef id)
id = "cbo" & CStr(index)
End Sub