VBA Compile error: Argument not optional when calling a method from a COM AddIn

VBA Compile error: Argument not optional when calling a method from a COM AddIn

我有以下代码:

Sub CallVSTOMethod()
    Dim addin As COMAddIns
    Dim automationObject As Object
    Set addin = Application.COMAddIns("CssFillTool")
    Set automationObject = addin.Item
    automationObject.ButtonClearRemarks
End Sub

我正在尝试找出出现此错误的原因。

ButtonClearRemarks 是插件中的众多宏之一。当我单独单击该宏时,它可以正常工作。

这个宏不需要任何参数。单击此按钮将格式化我的 Excelsheet。我也尝试传递空参数和其他选项,但没有用。欢迎提出任何建议。

经过几次更正: Set addin = Application.COMAddIns Set automationObject = addin.Item("CssFillTool")

现在我只需要访问此插件中的宏ButtonClearRemarks

未经测试,如有不妥我会删除

从我发表的评论看来:

Sub CallVSTOMethod()
    Dim addins As COMAddIns
    Set addins = Application.COMAddIns
    Dim addin As COMAddIn
    Set addin = addins.item("CssFillTool")
    addin.ButtonClearRemarks ' cast addin into the correct variable type
End Sub

ButtonClearRemarks is one of many macros in the addin. When I click that macro seperately it works properly.

但我无法测试,因为我没有您的插件。由于 ButtonClearRemarks 不是基础 class 的一部分,我假设您需要将返回的对象转换为 您的 插件,以便公开该方法。

您还没有向我们展示 ButtonClearRemarks 的代码,因此我们的知识有限。

我也遇到了 this 它建议的地方:

Dim objBaseObject As Object 
Set objBaseObject = _ 
 Application.COMAddIns.Item("CssFillTool").Object

所以也许你可以这样做。

假设有问题的加载项是 COM 可见的并且方法是可访问的,(跳过答案的前 2/3,它在 C# 代码中模拟了一个简单的 COM 加载项),您对加载项的处理不正确。

Sub Test()

    Dim addin As Office.COMAddIn
    Dim automationObject As Object

    Set addin = Application.COMAddIns("CssFillTool")
    Set automationObject = addin.Object  '<~~ handle the add-in's Object property

    automationObject.ButtonClearRemarks

End Sub