Excel自动化错误# 1004 对象的方法'~'失败。

3

使用VB6进行Excel自动化时,我有这段代码已经使用了五年多。它基本上遍历插件,如果检测到特定的插件,则向用户发出消息。

        Public xlapp As Excel.Application
        Set xlapp = GetObject(, "Excel.Application")

        Dim CurrAddin As Office.COMAddIn

        For Each CurrAddin In xlApp.COMAddIns
2           LogMe "==>COM Add-In: " & CurrAddin.Description

            'detect the PowerPivot add-in
3           If CurrAddin.Description = "PowerPivot for Excel" And CurrAddin.progID = "Microsoft.AnalysisServices.Modeler.FieldList" Then
4               LogMe "==>COM Add-In 'PowerPivot for Excel is set to load=" & CurrAddin.Connect

5               If CurrAddin.Connect = True Then
6                   MsgBox "The PowerPivot Add-in for Excel is installed and set to load.", vbExclamation
                End If
            End If
9       Next CurrAddin

Error in MyAddInEnumerator
1004
Method '~' of object '~' failed
Line: 2

在这个程序例程上安装了错误捕捉器后,调试显示它发生在第二行。交互式调试显示实际上是在上一行中。CurrAddin似乎已经被初始化,因此问题出现在xlApp.COMAddIns处。
我有一个应用程序在许多具有相同版本的32位Excel 2010的机器上运行。这些机器运行Win7x86和Win7x64,除了一个之外,所有机器都没有错误。我只是想不通为什么这台机器会在使用“COMAddIns”对象时出错。

引用是在 VB6 应用程序中,然后编译为 EXE。每个人都从服务器运行应用程序,因此触摸相同的东西。除非您指的是其他内容。 - sinDizzy
是的,看了那篇文章还有其他大约10篇。这并不能解释为什么它在其他有相同Excel版本的15台机器上可以运行。而且我只设置了一次xlapp变量作为全局变量,并且所有变量似乎都是完全合格的。但让我再次检查我的代码。 - sinDizzy
办公室由IT管理员控制,但我已经检查过了,我们的版本与版本号相同:14.0.7166.5500(32位)。添加枚举器是一个小例程,如果我在这个例程中放置一个错误捕获器,它会显示错误,但一旦通过,Excel的所有其他自动化都像往常一样工作。 - sinDizzy
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - ib11
调用COMAddIns时失败了。 它从未到达描述。 如果在循环之前添加一行xlApp.COMAddIns.Update,它将在那里失败。 由于某种原因,该机器上的COMAddIns失败了。 - sinDizzy
显示剩余4条评论
1个回答

0

在访问对象之前尝试对其进行测试:

For Each CurrAddin In xlApp.COMAddIns
    'Add this line below and the End If
    If Not IsNull(CurrAddin) Then
        LogMe "==>COM Add-In: " & CurrAddin.Description

        'detect the PowerPivot add-in
        If CurrAddin.Description = "PowerPivot for Excel" And CurrAddin.progID = "Microsoft.AnalysisServices.Modeler.FieldList" Then
            LogMe "==>COM Add-In 'PowerPivot for Excel is set to load=" & CurrAddin.Connect

            If CurrAddin.Connect = True Then
                MsgBox "The PowerPivot Add-in for Excel is installed and set to load.", vbExclamation
            End If
        End If
    End If
Next CurrAddin

空引用或未声明的对象很可能是1004错误的原因,就像其他一些SO文章中所述:

VBA Excel:运行时错误'1004'对象'_Worksheet'的方法'Range'失败

Broken Excel VBA宏运行时错误'1004':对象'_Global'的方法'Range'失败

错误'1004'对象'_Global'的方法'Range'失败

希望对您有所帮助。如果您确实拥有该插件,则很可能仍然会检测到它。否则,这可能是重新安装问题,就像这里所述:http://www.xtremevbtalk.com/996711-post4.html


与上述相同。问题不在于描述,而在于对xlApp.COMAddIns的调用。这真是令人困惑。 - sinDizzy
好的。我现在清理上面的注释。我会尝试重新安装。显然有一些库已经关闭了,我没有更多的想法来追踪它,这是关于这个错误代码最好的建议,除了测试一个空对象之外。您可以测试CurrAddin是否为空:If Not IsNull(CurrAddin) Then 这将使您的测试可能仍然有效,因为您正在寻找一个特定的对象。 - ib11
如果我去掉循环,只留下一条语句xlApp.COMAddIns.Update,那么它会在那里失败。不知何故,在那台机器上COMAddIns不可用。我可能让他修复安装。 - sinDizzy
可以进入循环然后测试是否为空:If Not IsNull(CurrAddin) Then 如果它检测到您的插件,我会测试这个。如果是,则是可行的解决方法。否则,重新安装。 - ib11
不,你不能这样做。当它在xlApp.COMAddIns上失败时,它永远不会进入循环的内部。它在第二行之前的那一行失败了。在你的例子中,它在第一行就失败了。 - sinDizzy
好的。那么,我不会浪费更多时间来尝试跟踪它,这很可能是安装问题。那是你最好的选择。我投票支持你的问题,因为它是一个有价值的问题,现在在这里得到了很好的记录。 - ib11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接