VB6程序无法打开Excel 2007,未注册自动化错误库

时间:2014-07-30 05:36:13

标签: vb6 excel-2007

我使用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程序,它会抛出错误。

以下是项目参考: enter image description here

有没有人遇到过此问题以及解决方法是什么?

[编辑]

我显然在这里做错了我的错误处理程序抛出错误。

我确实尝试了另一件事,并删除了“设置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

1 个答案:

答案 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的类型库已更改