Поле со списком на ленте Excel: как настроить обратный вызов onChange

Настройка поля со списком в пользовательской ленте.

Не понимаю, как создать обратный вызов onChange.

Это XML-код комбобокса:

<group id = "GroupDemo2" 
    label = "SelectSheet"
    autoScale = "true"
    imageMso = "AddInManager">
    <comboBox id = "ComboBox001"
        label = "comboBox001”
        sizeString=“XXXX”
        onChange = "RibbonCallbacks.ComboBox001OnChange"
        getText = "RibbonCallbacks.ComboBox001GetText">
        <item id = "ItemOne”
            label=“One”/>
        <item id = "ItemTwo”
            label=“Two”/>
        <item id = "ItemThree”
            label=“Three”/>
    </comboBox>
</group>     

Я попробовал это, но это ничего не делает:

Sub ComboBox001OnChange(control As IRibbonControl, id As String)
    Select Case id
        Case "ItemOne”
            Sheets("Sheet1”).Select
        Case "ItemTwo”
            Sheets("Sheet2”).Select
        Case "ItemThree”
            Sheets("Sheet3”).Select
    End Select
End Sub

Спасибо!


99
2

Ответы:

Возникла проблема с вашей цитатой. Они не прошли проверку. После исправления цитаты она проверена и, похоже, будет работать.

<customUI xmlns = "http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon>
        <tabs>
            <tab id = "customTab" label = "Contoso" insertAfterMso = "TabHome">
                <group id = "GroupDemo2" 
                label = "SelectSheet"
                autoScale = "true"
                imageMso = "AddInManager">
                    <comboBox id = "ComboBox001"
                    label = "comboBox001"
                    sizeString = "XXXX"
                    onChange = "RibbonCallbacks.ComboBox001OnChange"
                    getText = "RibbonCallbacks.ComboBox001GetText">
                        <item id = "ItemOne"
                        label = "One"/>
                        <item id = "ItemTwo"
                        label = "Two"/>
                        <item id = "ItemThree"
                        label = "Three"/>
                    </comboBox>
                </group>     
            </tab>
        </tabs>
    </ribbon>
</customUI>

По поводу второго саба. Проверьте документ Microsoft на наличие поля со списком в ленточном поиске getText и решите, нужно ли оно вам. https://learn.microsoft.com/en-us/dotnet/api/system.windows.controls.ribbon.ribboncombobox?view=windowsdesktop-8.0#events


Решено
  • Замените двойную кавычку полной ширины (Юникод) символом половинной ширины в коде XLM и VBA.

Формы половинной и полной ширины

  • Имя обратного вызова Sub должно быть ComboBox001_OnChange, подчеркивание отсутствует.

  • Возвращаемое значение idOne вместо ItemOne.

-- XML
<group id = "GroupDemo2" 
    label = "SelectSheet"
    imageMso = "AddInManager">    
    <comboBox id = "ComboBox001"
        label = "comboBox001"
        onChange = "ComboBox001_OnChange">
        <item id = "ItemOne"
            label = "One"/>
        <item id = "ItemTwo"
            label = "Two"/>
        <item id = "ItemThree"
            label = "Three"/>
    </comboBox>
</group>   

-- Callback VBA Code 
Sub ComboBox001_OnChange(control As IRibbonControl, id As String)
    Select Case id
        Case "One"
            Sheets("Sheet1").Select
        Case "Two"
            Sheets("Sheet2").Select
        Case "Three"
            Sheets("Sheet3").Select
    End Select
End Sub