VB6程序无法打开Excel 2007与自动化错误库未注册(VB6 program fails op

2019-10-20 13:54发布

我创造了这个VB6程序我的Windows 7 32位机器上使用Office 2010 32位,其运行正常。 测试它在Windows 8 64位机与Office 2013 32位上,它的工作原理。 上一台机,视窗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

我局2013年本安装之前,然后卸载它,放在2007上,可这有什么影响? 或者说,我创造了这个程序,参照Excel 2010和事实,现在我试图运行对Office 2007的? 虽然它的工作原理在另一台机器上有2013年在抓救命稻草这里。

[EDIT 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

Answer 1:

有没有理由认为这是一个用VB错误。

返回或设置最初产生错误的对象或应用程序的名称。

object.Source [= stringexpression]

参数总是对象Err对象。

stringexpression表示生成错误的应用程序的字符串表达式。

备注源属性指定一个字符串表达式,通常是类名或导致错误的对象的编程ID。 使用源代码,以向用户提供信息时,你的代码无法处理在访问对象产生的错误。 例如,如果您访问Microsoft Excel和它的零误差产生一科时,Microsoft Excel将Err.Number设置为错误的错误代码,并将源到Excel.Application。 请注意,如果在通过Microsoft Excel中称为另一个目的是生成错误,Excel中截取的错误和将Err.Number设置被零除它自己的代码。 然而,它离开其他Err对象(包括源)作为设置由生成错误的对象。

来源总是包含最初产生错误的对象的名称 - 代码可以尝试根据您访问的对象的错误文档处理错误。 如果你的错误处理程序发生故障时,您可以使用Err对象信息的错误描述给你的用户,使用源代码和其他错误,通知哪个对象最初导致错误,其错误的描述,等用户。

从自动化的Microsoft Office 97和Microsoft Office 2000洛瑞特纳微软公司

2000年3月

问题:我的自动化客户端工作正常与Office 97版本我的应用程序。 不过,我重建项目,它工作正常使用Office 2000,但现在无法与Office 97可能是什么问题?

办公室的新版本包括新功能和增强一些现有的。 为客户提供编程访问这些新功能和增强功能,对象模型必须更新。 由于此更新的,比它与Office 97中的方法可以有多个参数的Office 2000。

新的参数与现有方法通常是可选的。 如果您使用后期绑定的办公自动化服务器,您的代码应与任何Office 97或Office 2000的成功运行但是,如果您使用早期绑定,在97个2000类型库之间的差异可能会导致你在下列情况下问题:

如果您在Visual Basic中的自动化客户端,并引用了Office 2000的类型库,你的代码可能会使用Office 97服务器时,如果调用切换后的方法或属性失败。

如果您创建一个MFC自动化客户端,并使用类向导从Office 2000类型库包装类,你的代码可能会使用Office 97服务器时,如果调用切换后的方法或属性失败。 为了避免这个问题,您应该制定对你打算支持Office服务器的最低版本的自动化客户端。 为了维持与多个版本的Office兼容性最好的结果,你应该使用后期绑定。 但是,如果您选择使用早期绑定,绑定到类型库中要支持Office服务器的最早版本。 为了说明这一点,如果你正在写使用Visual Basic的自动化客户端,并希望该客户端与Excel 97和Excel 2000工作,你应该引用的Excel 97类型库在Visual Basic项目。 同样,如果你正在编写使用MFC的自动化客户端,你应该使用类向导来包装Excel 97中的类型库。

欲了解更多信息,请参阅Microsoft知识库中下面的文章:

Q224925 INFO:Office 2000的类型库已更改



文章来源: VB6 program fails opening Excel 2007 with Automation Error Library not registered