我使用Office 2010 32bit在我的Windows 7 32位机器上创建了这个VB6程序,运行正常。使用Office 2013 32bit在Windows 8 64位计算机上进行测试,它可以正常工作。在一台配有Windows 7 64位和Office 2007(仅限32位)的计算机上,它会在以下代码段中抛出错误。
实际的错误讯息:
运行时错误-2147319779(8002801d)自动化错误,库不 注册
VB6代码:
If (excel_app Is Nothing) Then
Set excel_app = CreateObject("Excel.Application")
Else
Set excel_app = GetObject(, "Excel.Application")
End If
excel_app.Visible = True
excel_version = excel_app.Application.Version
Set wBook = excel_app.Workbooks.Open(directory_path & "\templates\book1.xlsm")
所以当我打开book1时它会抛出错误。它实际上打开它并且它在Workbook_Open()上有一个宏运行,这运行似乎很好。完成后,程序的处理返回到VB6程序,它会抛出错误。
以下是项目参考:
有没有人遇到过此问题以及解决方法是什么?
[编辑]
我显然在这里做错了我的错误处理程序抛出错误。
我确实尝试了另一件事,并删除了“设置wBook =”并且它没有抛出错误。从那时起,我已经放置了“设置wBook =”,因为我需要在我的代码中进一步使用它。
Dim wBook As Workbook
Dim excel_app As Object
On Error GoTo trialhandler
If (excel_app Is Nothing) Then
Set excel_app = CreateObject("Excel.Application")
Else
Set excel_app = GetObject(, "Excel.Application")
End If
excel_app.Visible = True
excel_version = excel_app.Application.Version
Set wBook = excel_app.Workbooks.Open(directory_path & "\templates\book1.xlsm")
MsgBox ("Exiting")
Exit Sub
trialhandler:
Dim source_string As String
source_string = excel_app.Source 'Error here
MsgBox ("My Error 1:" & source_string)
excel_app.Err
MsgBox ("My Error 2:" & excel_app.Err.Number & " " & excel_app.Err.Description)
Exit Sub
我先前安装了Office 2013,然后将其卸载并将2007放在上面,这会产生什么影响吗?或者我参考Excel 2010创建了这个程序,现在我正试图在Office 2007上运行它?虽然它适用于2013年的另一台机器。在这里抓住稻草。
[编辑2]
它已经通过了初始错误,以便稍后抛出完全相同的错误。这件作品导入一个mdb表。
必须有一些早期的约束力 With wBook.Worksheets("Seal Register").ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=" & db_full_path & ";" _
, _
"Mode=ReadWrite;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" _
, _
"Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;" _
, _
"Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;" _
, _
"Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;" _
, _
"Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False"), _
Destination:=Range("A" & row_number)).QueryTable
.MaintainConnection = False
.CommandType = xlCmdTable
.CommandText = Array(db_table_name)
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = 1
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = db_full_path
.ListObject.DisplayName = "Table_" & db_table_name
.Refresh BackgroundQuery:=False
End With
答案 0 :(得分:2)
没有理由认为这是一个vb错误。
返回或设置最初生成错误的对象或应用程序的名称。
object.Source [= stringexpression]
参数 宾语 永远是Err对象。
stringexpression 表示生成错误的应用程序的字符串表达式。
备注 Source属性指定一个字符串表达式,该表达式通常是导致错误的对象的类名或编程ID。当代码无法处理在访问对象中生成的错误时,使用Source为您的用户提供信息。例如,如果您访问Microsoft Excel并且它生成除零错误,Microsoft Excel会将Err.Number设置为该错误的错误代码并将Source设置为Excel.Application。请注意,如果在Microsoft Excel调用的另一个对象中生成错误,则Excel会拦截错误并将Err.Number设置为其自己的除以零的代码。但是,它会将另一个Err对象(包括Source)保留为生成错误的对象所设置的对象。
Source始终包含最初生成错误的对象的名称 - 您的代码可以根据您访问的对象的错误文档尝试处理错误。如果错误处理程序失败,您可以使用Err对象信息向用户描述错误,使用Source和其他Err通知用户最初导致错误的对象,错误描述等等。
自动化Microsoft Office 97和Microsoft Office 2000 洛瑞特纳 微软公司
2000年3月
问题: 我的自动化客户端与我的应用程序的Office 97版本一起正常工作。但是,我重建了我的项目,它在Office 2000中工作正常但现在无法使用Office 97.可能出错了什么?
新版Office包含新功能并增强了一些现有功能。要为客户提供对这些新增功能和增强功能的编程访问,必须更新对象模型。由于此更新,Office 2000的方法可能比Office 97具有更多参数。
现有方法的新参数通常是可选的。如果您使用后期绑定到Office自动化服务器,您的代码应该可以与Office 97或Office 2000成功。但是,如果您使用早期绑定,97和2000类型库之间的差异可能会导致您在以下情况下出现问题:
如果在Visual Basic中创建自动化客户端并引用Office 2000类型库,则在调用已更改的方法或属性时,如果使用Office 97服务器,则代码可能会失败。
如果创建MFC自动化客户端并使用ClassWizard从Office 2000类型库中包装类,则在调用已更改的方法或属性时,如果使用Office 97服务器,则代码可能会失败。 要避免此问题,您应该针对要支持的最低版本的Office服务器开发自动化客户端。为了在保持与多个版本的Office兼容性方面获得最佳结果,您应该使用后期绑定。但是,如果选择使用早期绑定,请绑定到要支持的最早版本的Office服务器的类型库。为了说明,如果您使用Visual Basic编写自动化客户端并希望该客户端使用Excel 97和Excel 2000,则应在Visual Basic项目中引用Excel 97类型库。同样,如果您使用MFC编写自动化客户端,则应使用ClassWizard包装Excel 97类型库。
有关详细信息,请参阅Microsoft知识库中的以下文章:
Q224925 INFO:Office 2000的类型库已更改