excel - 使用 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
`
解决方案
您的代码不会像发布的那样编译。您的 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
推荐阅读
- php - Woocommerce - 如何删除价格并将类别添加到追加销售和相关产品中?
- angular - 带有 Toast 的离子表单验证器
- python - Perl 解释器中的 Python 代码执行
- xcode10 - 错误修复 Xcode 10,条件的 Swift 4 初始化程序必须有可选
- android - 我怎样才能同步订阅一个可观察的,这样我就不会错过该可观察的排放?
- javascript - Javascript firebase.database().ref.on(...) 返回 null
- python - 出现错误:“模块”对象不可调用
- c# - 从另一个访问 FirstPersonController 脚本以更改值不起作用
- python-3.x - 从 Jenkinsfile 中的 docker 映像激活 conda 环境
- javascript - react-redux 使用 redux 处理多个数据