首页 > 解决方案 > 如何使用 VBA 代码 (Excel) 从 Excel 复制并粘贴到 Access

问题描述

我想自动化这个过程,以减少出错的风险。

这是我使用 VBA 的第一天,所以我的技能有些欠缺。我正在尝试自动化我的工作中的一些步骤,因此我需要从 Access 复制 1 列并将其粘贴到 Excel 工作表中。在突变之后,我必须将结果复制/粘贴回 Access(同一表中的另一列)。我一直在寻找有效的 VBA 代码并对其进行测试,但直到现在我还没有找到任何代码。

enter code here 常量 TARGET_DB = "test.accdb"

Sub Test()

Dim cnn As ADODB.Connection
Dim MyConn
Dim rst As ADODB.Recordset
Dim i As Long, j As Long
Dim Rw As Long

Sheets("Informatie").Select
Rw = Range("A2", Range("A2").End(xlDown)).Select

Set cnn = New ADODB.Connection
MyConn = ThisWorkbook.Path & Application.PathSeparator & TARGET_DB

With cnn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Open MyConn
End With

Set rst = New ADODB.Recordset
rst.CursorLocation = adUseServer
rst.Open Source:="Table1", ActiveConnection:=cnn, _
CursorType:=adOpenDynamic, LockType:=adLockOptimistic, _
Options:=adCmdTable

'Load all records from Excel to Access.
For i = 2 To Rw
rst.AddNew
For j = 1 To 7
rst(Cells(1, j).Value) = Cells(i, j).Value
Next j
rst.Update
Next i

'Close the connection
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing

MsgBox "Alan's work is finished for today"

我希望在 Access 文件中看到一些变化。任何突变都将是一个开始。但除了我在 Excel 工作表中选择了正确的范围之外,什么也没发生。

标签: excelvbams-access

解决方案


Rw = Range("A2", Range("A2").End(xlDown)).Select

应该

Rw = Range("A2").End(xlDown).Row

您的原始行会将 -1 返回到 Rw,因此不会添加任何数据。

如果添加的数据需要与原始数据对齐,这种方法可能并不理想——不能保证会发生这种情况。


推荐阅读