为XLSM文件自定义功能区添加动态下拉菜单时OnAction报错
Excel自定义功能区动态下拉菜单点击报错解决
我正在给XLSM文件的自定义功能区添加一个动态下拉菜单,该菜单从Excel现有单元格区域生成列表,点击列表项需跳转到同名工作表。目前下拉菜单可正常生成,但点击时弹出错误提示:Wrong number of arguments or invalid property assignment。该功能区标签下已有正常工作的自定义按钮,推测问题出在XML代码或onAction子过程部分。
XML代码
<!-- Dynamic dropDown Group --> <group id="tool5" label="Sheet DropDown" autoScale="true"> <dropDown id="DropDown1" label= "Sheet Name" sizeString="WWWWWWWWWWWWW" supertip="Please select a sheet, add more sheetsname in Lookup sheet" imageMso="InsertExcelSpreadsheetMenu" getItemCount="GetDropdownItemCount" getItemLabel="DropdownItemLabel" onAction="SubdropDownAction" /> </group>
VBA代码
GetDropdownItemCount和DropdownItemLabel可正常工作(下拉列表已正确生成),当前onAction子过程代码如下:
Public Sub SubdropDownAction(control As IRibbonControl, index As Integer) Dim SelectedSheet As String Select Case control.ID Case "DropDown1" SelectedSheet = Range("Range_DropdownsheetName").Cells(index + 1).Value ThisWorkbook.Sheets(SelectedSheet).Activate Case Else End Select End Sub
问题原因与解决方法
报错的核心原因是Ribbon下拉控件的onAction回调函数参数签名不符合Office Ribbon的要求。对于下拉控件,onAction的正确参数顺序应为:control As IRibbonControl, selectedId As String, selectedIndex As Integer,你当前的代码少了selectedId As String参数,导致参数数量不匹配触发错误。
修正后的VBA代码如下:
Public Sub SubdropDownAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer) Dim SelectedSheet As String Select Case control.ID Case "DropDown1" SelectedSheet = Range("Range_DropdownsheetName").Cells(selectedIndex + 1).Value ThisWorkbook.Sheets(SelectedSheet).Activate Case Else End Select End Sub
即使你不需要使用selectedId参数,也必须保留它以匹配回调函数的固定参数结构,这样点击下拉项时就能正常跳转到对应工作表了。
内容的提问来源于stack exchange,提问作者Steinadler 177
相关产品推荐
相关产品推荐

