excel - 如何使用 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 工作表中选择了正确的范围之外,什么也没发生。
解决方案
Rw = Range("A2", Range("A2").End(xlDown)).Select
应该
Rw = Range("A2").End(xlDown).Row
您的原始行会将 -1 返回到 Rw,因此不会添加任何数据。
如果添加的数据需要与原始数据对齐,这种方法可能并不理想——不能保证会发生这种情况。
推荐阅读
- angular - 没有反应形式的角材料验证
- angularjs - AJAX 调用后如何刷新我的 Angular 范围?
- javascript - 谷歌地方自动填充不搜索地址
- javascript - ReactJs - 使用 Formik 用 axios 写表单
- angularjs - 标头未在 angularjs 发布请求中设置
- matlab - MATLAB 中的预分配
- php - 将参数从 Controller 传递给 Doctrine EventListener
- elasticsearch - 如何跨区域移动 Cloudwatch 日志?
- swift - 如何在 swift 中使用多行标签在视图内制作适当的滚动视图
- spring - 在 Spring Cloud 合约和 AMQP/RabbitMQ 中生成的测试(生产者端)失败