【问题标题】:Excel VBA procedure crashes when opening a Access database connection/using Access Runtime打开 Access 数据库连接/使用 Access Runtime 时 Excel VBA 过程崩溃
【发布时间】:2019-08-30 04:24:27
【问题描述】:

在我的第二台笔记本电脑上使用 Microsoft Access Runtime 2016 从 Excel 执行 VBA 程序以连接到 Access 数据库时,VBA 程序似乎冻结了几秒钟的处理,崩溃并关闭了 Excel 应用程序而不触发错误处理程序我的代码,所以没有错误信息让我破译。可能是什么问题或如何捕获错误? 这个 VBA 应用程序在我的第一台笔记本电脑上运行良好,它拥有完整版的 Access,没有任何问题。在我加载 Microsoft Access Runtime 2016 之前,第二台笔记本电脑正在工作。我正在使用一个名为“MDB Plus”的数据库应用程序,它可以读取 Access 数据库文件,但现在它不再工作了。

我正在使用以下内容: 操作系统:Windows 10, 微软办公室:2007, MS Access 运行时 2007-2016, Excel VBA 2007

要尝试解决此问题,我:1.) 卸载 MS Access Runtime 2016 并且 Excel 应用程序仍然崩溃,2.) 安装 MS Access Runtime 2007 并且 Excel 应用程序仍然崩溃。

这是我的代码:

Sub TestGetTblPrimKey()
        Dim oDBConn                 As ADODB.Connection
        Dim sDBConnString           As String
        Dim moDBTblRecordSet        As ADODB.Recordset
         Const sDBTableLocPath       As String _
            = "C:\Users\kmass\AppData\Roaming\InvestManager\"
    '
        On Error GoTo ERROR_HANDLER
    '
       'Create Database connection
        Set oDBConn = New ADODB.Connection
       'Create Table Record-Set
        Set moDBTblRecordSet = New ADODB.Recordset
       'Build DB connection string
        sDBConnString = _
                    "Provider=" & "Microsoft.ACE.OLEDB.12.0" & ";" _
                    & "Data Source='" _
                    & sDBTableLocPath _
                    & "tMeta_Table_Master.accdb" & "'"
    'Open Database Table and Record-Set
        oDBConn.Open sDBConnString  '* <--CRASHES HERE
    '
    '    Call ... the rest of the code to get record key
    '
    TestGetTblPrimKeyExit:
        oDBConn.Close
       'Release Table Objects
        Set moDBTblRecordSet = Nothing
        Set oDBConn = Nothing
        Exit Sub
    '
    ERROR_HANDLER:
        Debug.Print Err.Number & vbCrLf & Err.Description
        Resume TestGetTblPrimKeyExit
    '
    End Sub

我希望代码能够连接到 Access 数据库。

【问题讨论】:

    标签: excel vba ms-access adodb


    【解决方案1】:

    您可以从 Excel 轻松控制 Access,并在 Excel 中执行 Access 对象内的各种操作。以下是您可以执行的三个简单演示。

    1)

    'Open MS Access Form, from Excel
    Global oApp As Object
    
    Sub OpenAccess()
    
       Dim LPath As String
       Dim LCategoryID As Long
    
       'Path to Access database
       LPath = "C:\your_path_here\Northwind.mdb"
    
       'Open Access and make visible
       Set oApp = CreateObject("Access.Application")
       oApp.Visible = True
    
       'Open Access database as defined by LPath variable
       oApp.OpenCurrentDatabase LPath
    
       'Open form of interest
       oApp.DoCmd.OpenForm "Form1"
    
    End Sub
    

    2)

    'RUN MS ACCESS MACRO FROM EXCEL:
    Sub AccessTest1()
          Dim A As Object
          Set A = CreateObject("Access.Application")
          A.Visible = False
          A.OpenCurrentDatabase ("C:\your_path_here\Northwind.mdb")
          A.Application.Run "ExportToExcelTest"
    End Sub
    

    3)

    ' Run a delete query in MS Access, from Excel
    Sub OpDaHus01()
        Dim strDatabasePath As String
        Dim appAccess As Access.Application
        Dim strSQL As String
    
        strDatabasePath = "C:\your_path_here\Northwind_2012.mdb"
        strSQL = "DELETE tblTest.* FROM tblTest;"
        Set appAccess = New Access.Application
        With appAccess
            .OpenCurrentDatabase strDatabasePath
            .DoCmd.RunSQL strSQL
            .Quit
        End With
        Set appAccess = Nothing
    
    End Sub
    

    如果您需要从宏运行代码,它需要是公共函数(而不是子),并且需要在标准模块中(不是表单、报表或类模块)。

    【讨论】:

    • 您提供的这些示例都不起作用。第一个和第二个示例都抛出运行时错误 '429 - ActiveX 组件无法创建对象。两者都将 CreateObject("Access.Application") 分配给对象 oApp。我在这台机器上没有 Access 应用程序。我也不需要在其中打开任何表格。我只需要读取一个 .accdb 数据库文件,提取数据,对其进行处理并最终将其显示在 Excel 中的工作表上。任何帮助将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多