【问题标题】:RibbonX OnAction: Wrong number of arguments or invalid property assignmentRibbonX OnAction:参数数量错误或属性分配无效
【发布时间】:2020-07-25 14:20:26
【问题描述】:

我正在使用来自 Andy Pope 的 RibbonX Visual Designer 2010 插件来创建自定义选项卡、组和按钮。我已经在 XLAM 工作簿中拥有各种宏作为 VBA 代码,该工作簿将在启动时打开。我遇到的问题是我无法弄清楚如何从这些按钮中的任何一个调用该过程。 RibbonX 可视化设计器为带有 OnAction 字段的按钮提供了一个属性表单。我试过了

程序名称

“程序名称”

"'spreadsheetname.xlam'!ProcedureName"

我得到的只是一条错误消息“参数数量错误或属性分配无效”。 这个过程没有参数,所以这不是问题。附图显示了属性表单和 OnAction 字段的外观。

Property form with OnAction Field

有人能告诉我这里的过程调用的形式吗?

【问题讨论】:

  • ProcedureName 是否是公共模块中的公共子(例如,工作表后面的私有子)?如果没有,请尝试一下。
  • 我创建了一个指向包含宏的 XLAM 文件的参考连接。我曾希望将它们放在同一个名称空间中。我怀疑我需要指定一个特定的模块,但不太清楚如何。
  • 做了一些阅读。私人关键字没有证据,因此模块和子是公共的。

标签: excel vba ribbonx


【解决方案1】:

我应该更仔细地阅读您的问题。关键是“这个过程没有参数”

在功能区编辑器中,只需提供

NumberFormatTwoDecimals

对于OnAction,以及确保您的子声明如下

Public Sub NumberFormatTwoDecimals(control As IRibbonControl)
    'Your code goes here...
End Sub

Excel 希望您为 control 参数腾出空间,它系统地传递给您指定的子程序,即使您对所述参数没有任何用处。

开发人员经常在许多OnAction 属性中为不同的控件指定相同的子,因为一旦在他们的子中,他们可以检查control 参数的ID 和/或Tag 属性来决定要做什么做:

Public Sub MyActionHandler(control As IRibbonControl)
    Select Case control.ID
        Case "MyButton1": HandleMyButton1
        Case "MyButton2": HandleMyButton2
        Case Else: MsgBox "?!?"
    End Select
End Sub

使用后一种方法,您无需修改​​现有代码库以适应 control 参数。

【讨论】:

  • 非常感谢您的详细回答。因为 Ribbon Editor 是一个插件,所以我无法查看代码。看到您的回答后,我再次查看功能区编辑器,发现有一个选项卡可以自动生成必要回调代码的只读存根。感谢您的回复。我真的被卡住了,现在我可以从这里看到项目的结束。 :)
【解决方案2】:

对于功能区按钮,回调应如下所示:

C#: void OnAction(IRibbonControl control)

VBA: Sub OnAction(control As IRibbonControl)

C++: HRESULT OnAction([in] IRibbonControl *pControl)

Visual Basic: Sub OnAction(control As IRibbonControl)

您可以在以下文章中描述所有类型的功能区控件的所有回调:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多