Excel VBA编译错误:从COM加载项调用方法时参数不是可选的

Excel VBA编译错误:从COM加载项调用方法时参数不是可选的,excel,vba,com,excel-addins,Excel,Vba,Com,Excel Addins,我有以下代码: Sub CallVSTOMethod() Dim addin As COMAddIns Dim automationObject As Object Set addin = Application.COMAddIns("CssFillTool") Set automationObject = addin.Item automationObject.ButtonClearRemarks End Sub 我试图找出我为什么会犯这个错误 But

我有以下代码:

Sub CallVSTOMethod()
    Dim addin As COMAddIns
    Dim automationObject As Object
    Set addin = Application.COMAddIns("CssFillTool")
    Set automationObject = addin.Item
    automationObject.ButtonClearRemarks
End Sub
我试图找出我为什么会犯这个错误

ButtonClarRemarks是加载项中许多宏之一。当我分别单击该宏时,它工作正常

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

经过几次更正后:
Set addin=Application.com addins
设置自动对象=附加项(“CssFillTool”)


现在,我只需要访问此加载项中的宏
按钮耳环标记

这未经测试,因此如果不正确,我将删除它

从我的评论来看,这似乎是:

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
按钮耳环标记
是加载项中许多宏之一。当我分别单击该宏时,它工作正常

但是我不能测试,因为我没有你的插件。由于
buttonclaremarks
不是基的一部分,我假设您需要将返回的对象强制转换到您的加载项中,以便公开该方法

您尚未向我们展示
按钮耳环标记的代码,因此我们了解的知识有限

我还发现了它暗示的地方:

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
子测试()
Dim addin As Office.com addin
作为对象的自动对象
Set addin=Application.COMAddIns(“CssFillTool”)

设置automationObject=addin.Object'是否确定抛出错误的不是上面的行
Item
听起来像是一个需要参数的方法。@JohnColeman是的!我将代码更改为:Set addin=Application.com addins Set automationObject=addin.Item(“CssFillTool”),现在这不会引发任何错误。但是现在我不知道调用“ButtonClarRemarks”宏的语法。下一行现在抛出错误:对象不支持此属性或方法它应该是
Set automationObject=addin.object
?帮助说明“必需的对象。在COMAddIns集合的该位置返回COM外接程序的序数值,或者表示指定COM外接程序的ProgID的字符串值。”它看起来像是返回了一个
COMAddIn
。这不是VBA,但应该给出建议:那么,您是否应该将
加载项
指定为
Application.COMAddIns()
的返回值,然后通过项索引访问您感兴趣的项?我得到以下错误方法或数据成员未找到(错误461),用于code@gowtham确切地因为该宏不是
COMAddin
类的一部分。向我们显示该宏的定义…错误也会显示:运行时错误“91”:未设置对象变量或带块变量也意味着问题在于COM加载项CreatedI希望向您发送代码。除了直接上传到这里,还有其他选择发送给你吗?不确定。您还没有向我们展示有关此
按钮耳环标记
方法的任何信息。是的,该行中的automationObject设置为nothing我不知道该怎么办如果CssFillTool不是COMAddIns集合的成员,我预计会出现下标超出范围的错误,好吗。是否确定加载项是COM可见的?加载项是=Cssfilltool,但:AddIn.object=nothing。哪个设置为AutomationObject?您可以参考其他答案了解如何配置vsto加载项吗?