首页 > 解决方案 > 使用 VBA 从 EXCEL 导出到 Access

问题描述

我有这个代码,我在网上找到了将数据从 Excel 导出到 Access 的代码,它在一定程度上可以正常工作,但我在尝试导出一系列单元格时遇到问题。我可以导出一个单元格,但在尝试导出一个范围时它并不喜欢。相反,我尝试使用循环来导出范围,但仍然无法使其正常工作。

我得到下一个没有错误

我试过这种方法也没有运气 'rs!Column1 = Sheets("Sheet1").Range("O2:O170")

下面的代码:

Sub AdddNewDatatoAccDb()

Dim cn As ADODB.Connection, rs As ADODB.Recordset

Dim i As Integer

Set cn = New ADODB.Connection

 With cn
.ConnectionString = con1
.Open "T:\Folder1\VBA Test.accdb"
End With


Set rs = New ADODB.Recordset
rs.Open "VBAtest", cn, adOpenDynamic, adLockPessimistic, adCmdTable

For i = 0 To 170

With rs

.AddNew

rs!Column1 = Worksheets("Sheet1").Cells(i + 2, 0).Value

rs!Column2 = Worksheets("Sheet1").Cells(i + 2, 1).Value

Next i
End With

Set rs = Nothing
cn.Close
Set cn = Nothing

Exit Sub
End Sub
`

标签: excelvbams-access

解决方案


您的代码不会像发布的那样编译。您的 with 块在循环内开始但在循环外结束,这是无效的。之后您错过了一个.Update电话.AddNew。如果我们将字段和值传递给.AddNew命令,那么我们不需要.Update

我建议使用With块来控制对象的范围,而不是将它们设置为空。总是在End With. 请注意,我使用错误处理程序来确保始终调用关闭。这应该允许优雅地销毁您的数据库对象。

这是我无法测试的示例。您可能需要进行一些调整以使其适合您的环境:

Option Explicit

Public Sub AdddNewDatatoAccDb(ByVal con1 As String)

    On Error GoTo errHandler

    With ADODB.Connection
        .ConnectionString = con1
        .Open "T:\Folder1\VBA Test.accdb"
        With ADODB.Recordset
            .Open "VBAtest", .ConnectionString, adOpenDynamic, adLockPessimistic, adCmdTable
            Dim i As Long
            For i = 0 To 170
                .AddNew "Column1", Worksheets("Sheet1").Cells(i + 2, 0).Value
                .AddNew "Column2", Worksheets("Sheet1").Cells(i + 2, 1).Value
            Next i

errHandler:            
            .Close
        End With
        
        .Close
    End With

End Sub

推荐阅读