【问题标题】:VBA Compile error: Argument not optional when calling a method from a COM AddInVBA 编译错误:从 COM 插件调用方法时参数不是可选的
【发布时间】:2018-07-30 22:05:18
【问题描述】:

我有以下代码:

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

【问题讨论】:

  • 您确定不是上面的那行引发了错误吗? Item 听起来像是一个需要参数的方法。
  • @JohnColeman 是的!我将代码更改为: Set addin = Application.COMAddIns Set automationObject = addin.Item("CssFillTool") 现在这不会引发任何错误。但现在我不知道调用“ButtonClearRemarks”宏的语法。下一行现在抛出错误:对象不支持此属性或方法
  • 应该是Set automationObject = addin.Object
  • 帮助显示“必需对象。返回 COMAddIns 集合中该位置的 COM 加载项的序数值,或表示指定 COM 加载项的 ProgID 的字符串值。 "看起来它返回了一个 COMAddIn 。这不是 VBA,但应该提供建议:docs.microsoft.com/en-us/dotnet/api/…
  • 那么,你不应该把addins赋值为Application.COMAddIns()的返回值,然后通过item index访问你感兴趣的那个吗?

标签: excel vba com excel-addins


【解决方案1】:

这个没有经过测试,如果不正确我会删除它。

从我制作的 cmets 看起来是这样的:

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 是插件中的众多宏之一。当我单独单击该宏时,它可以正常工作。

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

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

我还遇到了this 的提示:

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

所以也许你可以这样做。

【讨论】:

  • 我得到以下错误 Method or data member not found (Error 461) 代码的最后一行
  • @gowtham 没错,因为那个 macro 不是 COMAddin 类的一部分。向我们展示该宏的定义...
  • 错误也是如此:运行时错误 '91' :Object Variable or with block variable not set 也意味着问题在于创建的 COM 插件跨度>
  • 我想把代码发给你。除了直接在此处上传之外,还有其他选择可以发送给您吗?
  • 不确定。您还没有向我们展示任何有关此 ButtonClearRemarks 方法的信息。
【解决方案2】:

假设有问题的外接程序是 COM 可见的并且该方法是可访问的,according to this other accepted answer(跳过答案的前 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

【讨论】:

  • 是的,automationObject 在该行中设置为空我不知道在这里做什么
  • 如果 CssFillTool 不是 COMAddIns 集合的成员,我预计会出现下标超出范围错误,好的。你确定你的插件是 COM 可见的吗?
  • addin 是 = Cssfilltool,但是 : addin.object = nothing。设置为自动化对象
  • 您能否参考其他答案以了解如何配置 vsto 插件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多