Search code examples
excelxmldropdownribbonribbonx

Getting a Dropdown to Work in a Customised Excel Ribbon


So I'm creating a custom Ribbon using the Office RibbonX Editor and Excel. I want to display a simple dropdown that allows the user to switch between three worksheets.

I'm not sure why it's going wrong, but I keep running into three errors that correspond to the onAction attribute for each item:

Ln 8, Col 51: The 'onAction' attribute is not declared.
Ln 9, Col 51: The 'onAction' attribute is not declared.
Ln 10, Col 51: The 'onAction' attribute is not declared.

Here is my code:

XML (customUI14.xml file):

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon>
        <tabs>
            <tab id="customTab" label="DropDown" insertAfterMso="TabHome">
                <group id="customGroup" label="Custom Group">
                    
<dropDown id="dropDown1" label="Dropdown Box">
   <item id="dd01" label="Sheet1" imageMso = "_1" onAction="DDOnAction" />
   <item id="dd02" label="Sheet2" imageMso = "_2" onAction="DDOnAction" />
   <item id="dd03" label="Sheet3" imageMso = "_3" onAction="DDOnAction" />
</dropDown>

                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

VBA:

Sub DDOnAction(control As IRibbonControl, id As String, index As Integer)
    Select Case control.id
        Case "dd01"
            ActiveWorkbook.Sheets("Sheet1").Activate
        Case "dd02"
            ActiveWorkbook.Sheets("Sheet2").Activate
        Case "dd03"
            ActiveWorkbook.Sheets("Sheet3").Activate
    End Select
    
    End Sub

Solution

  • Hi the onAction attribute should placed in the dropdown and not in the item, So the XML is :

        <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
        <ribbon>
            <tabs>
                <tab id="customTab" label="DropDown" insertAfterMso="TabHome">
                    <group id="customGroup" label="Custom Group">
                        
    <dropDown id="dropDown1" label="Dropdown Box" onAction="DDOnAction"  >
       <item id="dd01" label="Sheet1" imageMso = "_1" />
       <item id="dd02" label="Sheet2" imageMso = "_2" />
       <item id="dd03" label="Sheet3" imageMso = "_3" />
    </dropDown>
    
                    </group>
                </tab>
            </tabs>
        </ribbon>
    </customUI>
    

    and the code is like this

    Sub DDOnAction(control As IRibbonControl, id As String, Index As Integer)
    Select Case Index
        Case 0
            ActiveWorkbook.Sheets("Sheet1").Activate
        Case 1
            ActiveWorkbook.Sheets("Sheet2").Activate
        Case 2
            ActiveWorkbook.Sheets("Sheet3").Activate
    End Select
    
    End Sub