如果我跑
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具有相同的参考。第一个错误不会出现在其他任何地方
答案 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,而是依赖。
其他可能的线索