VBA Dim Object错误

时间:2018-04-24 13:49:36

标签: 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 = CreateObject("excel.application")

End Sub

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

首先,你试过修复安装吗?

其次,您是否有理由实例化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安装。此blog page处的代码将读取您的注册表并将结果写入Excel工作表。您说您已修复安装但可能有其他Excel安装干扰。该博客中的代码将突出显示多个Excel安装。

好的,根据您的反馈,您说所有Excel库版本都返回14,这意味着没有多版本安装。嗯,我们应该考虑到错误所抱怨的库实际上并不是Excel,而是依赖。

其他可能的线索

Social MSDN - automation error. Library not registered - solved by cleaning registry of legacy "Microsoft.Office.Interop.Excel" keys