Excel VBA变暗对象错误

Excel VBA变暗对象错误,excel,vba,Excel,Vba,如果我跑 Sub test() Dim Template_Excel_Instance As excel.application Set Template_Excel_Instance = CreateObject("excel.application") End Sub 我的代码因错误“自动化错误,库未注册”而中断 如果我跑 Sub test() Dim Template_Excel_Instance As object Set Template_Excel_Instance = Cr

如果我跑

Sub test()

Dim Template_Excel_Instance As excel.application
Set Template_Excel_Instance = CreateObject("excel.application")

End Sub
我的代码因错误“自动化错误,库未注册”而中断

如果我跑

Sub test()

Dim Template_Excel_Instance As object
Set Template_Excel_Instance = CreateObject("excel.application")

End Sub

它运行良好。有办法解决这个问题吗?我询问的原因是,尽管与所有其他PC具有相同的参考,但此问题只影响一台PC。第一个错误不会出现在其他任何地方

该PC是否具有不同版本的Excel

问题在于
作为Excel.Application
。如果未定义适当的引用,则VBA编译器将无法识别该类型。是的,VBA确实有一个编译步骤。如果您确实定义了引用,那么它对应用程序版本(我认为只是应用程序版本的主要部分)很敏感,因此本质上是不可移植的


在后一个示例中,您使用的是后期绑定,因此只需要COM对象注册,而不需要将任何特定的库添加到项目中。为了便于携带,这是一条路。

首先,您是否尝试过修复安装

第二,您实例化Excel的第二个实例有什么原因吗

第三,让我们掌握正在发生的事情,请运行此代码并报告

Option Explicit

Sub TestWhatVersionDoesCreateObjectReturn()

    Dim obj As Object
    Set obj = CreateObject("Excel.Application")

    Debug.Print obj.Version
End Sub

Sub TestWhatOtherVersionsAreCreatable()


    Dim lLoop As Long
    For lLoop = 7 To 16

        Dim obj As Object
        Set obj = Nothing

        On Error Resume Next '///set break on unhadnled errors
        Set obj = CreateObject("Excel.Application." & CStr(lLoop))
        On Error GoTo 0
        If Not obj Is Nothing Then Debug.Print obj.Version


    Next

End Sub
此外,请查找多个Excel安装。此时的代码将读取注册表并将结果写入Excel工作表。您说您已经修复了安装,但可能还有其他Excel安装。该博客中的代码将突出显示多个Excel安装

好的,根据您的反馈,您说所有Excel库版本返回14,这意味着没有多版本安装。嗯,我们应该考虑,实际上,错误抱怨的库不是Excel而是一个依赖项。 其他可能的线索


@QHarr是的,这就是问题所在-它在大多数PC上都能正常工作,但不是一台,我正在试图理解原因。注册表问题,也许?@edtheprogrammerguy:不,注册表很好。相信我,Office安装程序工作得很好。有没有办法调查。。我对如何修复这个问题一无所知。无论如何,我不会怀疑Excel有什么问题。出于兴趣,如果您在该版本的Excel(从零开始,在新工作簿中)中键入该代码,会发生什么?请原谅我的无知,即使默认情况下Excel对象库也会存在,但Excel.Application会失败吗?那么这是一个更大的范围?适当的参考是什么?正确的参考是什么?两者似乎完全相同systems@Bathsheba哇..所以它甚至在不同的对象库版本时抛出。值得注意的是,“我认为这是COM中的一个严重缺陷”,我不同意。如果用户升级他们的Excel,他们会期望类型库从Excel 12升级到Excel 13。@SMeaden:我会听从你更好的判断-我已经多年没有深入研究COM了。尽管如此,当使用早期绑定时,它确实会破坏VBA项目引用-并且很容易将VBA视为未编译的源代码。所有版本都是14.0版本,我已经尝试过修复。我添加了更多的IDEAS库-从链接复制代码后,我收到一个错误:“自动错误调用的对象已与其客户端断开连接“好的,很抱歉注册表代码不起作用,它对于在注册表内容中报告非常有用,现在您必须使用RegEdit.Exe手动查看。我发现了一个MSDN链接,可能会有所帮助。您能在问题文本中报告32位64位维度吗?我的意思是问题机器不同吗。