【问题标题】:VBA Dim Object errorVBA 暗淡对象错误
【发布时间】:2018-04-27 20:50:08
【问题描述】:

如果我跑

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 具有相同的引用。第一个错误不会出现在其他任何地方

【问题讨论】:

  • @QHarr 是的,这就是问题所在 - 它在大多数 PC 上都可以工作,但不是一台,我试图了解原因。
  • 可能是注册表问题?
  • @edtheprogrammerguy:不,注册表很好。相信我,Office 安装程序运行良好。
  • 关于如何调查的任何想法.. 对如何解决这个问题一无所知。
  • 我不会怀疑 Excel 有什么问题,但无论如何。出于兴趣,如果您在该版本的 Excel 中(从头开始,在新工作簿中)键入该代码,那么会发生什么?

标签: excel vba


【解决方案1】:

那台电脑有不同版本的 Excel 吗?

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

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

【讨论】:

  • 请原谅我的无知,所以即使 Excel 对象库默认存在,它也会因 Excel.Application 而失败?所以这是一个更大的范围?合适的参考是什么?
  • 定义的正确参考是什么?它们在两个系统中似乎相同
  • @Bathsheba Wow..所以它甚至会在不同的对象库版本时抛出。值得关注的。
  • “我认为这是 COM 中的一个严重缺陷”,我不同意。如果用户升级他们的 Excel,他们希望类型库从 Excel 12 升级到 Excel 13。
  • @SMeaden:我会听从你更好的判断 - 自从我深入研究 COM 已经很多年了。尽管如此,在使用早期绑定时它确实会破坏 VBA 项目引用 - 并且很容易将 VBA 视为未编译的源代码。
【解决方案2】:

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

其次,您实例化 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

【讨论】:

  • 所有版本都是14.0版本,我已经尝试修复
  • 我添加了一些想法
  • 谢谢 - 我从链接复制代码后收到错误:“调用的对象已与其客户端断开连接的自动化错误”
  • 好的,对不起,注册表代码不起作用,它对于报告注册表内容非常有用,现在您必须使用 RegEdit.Exe 手动四处寻找。我找到了一个可能有帮助的 MSDN 链接。您能否在问题文本中报告 32 位 64 位维度?我的意思是问题机器不同。
猜你喜欢
  • 2021-12-09
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多