首页 > 解决方案 > Excel 在尝试连续运行类似的 VBA 宏时崩溃

问题描述

我对 VBA 比较陌生,但是我已经能够找到代码和解决方案来满足我正在从事的项目的大部分要求。但是,我一直无法找到以下问题的解决方案。

我在同一个目录中有 4 个 DBF 文件,它们链接到一个程序\应用程序,该程序将数据从它们导入到程序中。我正在尝试将数据从 Excel 工作簿导出到这些 DBF 文件。

我发现下面的代码已经适应了我的情况。为了让它工作,我发现我首先需要为每个 DBF 文件创建一个 .accdb 文件,方法是使用 Access 打开和关闭它们。然后,我使用 4 组类似代码创建了 4 个宏,以将数据导出到 4 个 DBF (.accdb) 文件中。我还在代码中将 Microsoft.Jet.OLEDB.4.0 更新为 Microsoft.ACE.OLEDB.16.0 并启用了 Microsoft ActiveX Data Objects 6.1 Library。

Sub ADOFromExcelToDBF()
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
    ' connect to the Access database
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source=C:\FolderName\DataBaseName.dbf;"    
    ' open a recordset
    Set rs = New ADODB.Recordset
    rs.Open "TableName", cn, adOpenKeyset, adLockOptimistic, adCmdTable  
    ' all records in a table
    r = 3 ' the start row in the worksheet
    Do While Len(Range("A" & r).Formula) > 0 
    ' repeat until first empty cell in column A
        With rs
            .AddNew ' create a new record
            ' add values to each field in the record
            .Fields("FieldName1") = Range("A" & r).Value
            .Fields("FieldName2") = Range("B" & r).Value
            .Fields("FieldNameN") = Range("C" & r).Value
            ' add more fields if necessary...
            .Update ' stores the new record
        End With
        r = r + 1 ' next row
    Loop
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

我遇到的问题是,虽然宏都单独工作,但如果我尝试一个接一个地运行每个宏,Excel 会崩溃。在尝试运行第二个宏时,一个宏(无论哪个宏)在 Excel 崩溃之前始终可以工作(没有错误消息 - Excel 关闭,当我重新打开它时,它说它已恢复工作簿)。

我发现它们都可以正常工作而不会崩溃的唯一方法是在运行每个宏后关闭并重新打开 Excel。

我想知道是否有人知道为什么会发生这种情况以及是否有解决方案?

标签: excelvbams-access

解决方案


推荐阅读