Excel VBA Access
问题描述:
我有以下代码,其中.Fields ...没有得到执行。循环直接关闭连接而不将记录添加到表中。Excel VBA Access
代码:
Sub insertIntoTable()
Dim moviesConn As ADODB.Connection
Dim moviesData As ADODB.Recordset
Dim moviesField As ADODB.Fields
Dim r As Range
Set moviesConn = New ADODB.Connection
Set moviesData = New ADODB.Recordset
moviesConn.ConnectionString = conStrAccess
moviesConn.Open
On Error GoTo closeConnection
With moviesData
.ActiveConnection = moviesConn
.Source = "tblFilmDetails"
.LockType = adLockOptimistic
.CursorType = adOpenForwardOnly
.Open
On Error GoTo closeRecordset
For Each r In Range("A3", Range("A2").End(xlDown))
.AddNew
.Fields("Title").Value = r.Offset(0, 1).Value
.Fields("Release_Date").Value = r.Offset(0, 2).Value
.Fields("Length").Value = r.Offset(0, 3).Value
.Fields("Genere").Value = r.Offset(0, 4).Value
.Update
Next r
End With
closeRecordset:
moviesData.Close
closeConnection:
moviesConn.Close
End Sub
请建议
答
我能得到你的代码中使用此连接字符串的工作:
“供应商= Microsoft.ACE.OLEDB.12.0; Data Source = C:\ Users \ best buy \ Desktop \ test.accdb; Persist Security Info = False;“
我们可以排除数据不匹配错误,因为它在关闭连接之前会抛出3219运行时错误操作。
Range("A3", Range("A2").End(xlDown))
可能应该有两个原因改变Range("A2", Range("A" & Rows.Count).End(xlup))
:
- 它跳过第2行
- 如果没有超出第2行中没有数据,您将添加1048575条空记录(向我怎么样我知道)
如果你有一个大的数据集,你应该注释.Update
和我们在添加完所有记录后,输入.UpdateBatch
。这将大大提高性能。
For Each r In Range("A3", Range("A2").End(xlDown))
.AddNew
.Fields("Title").Value = r.Offset(0, 1).Value
.Fields("Release_Date").Value = r.Offset(0, 2).Value
.Fields("Length").Value = r.Offset(0, 3).Value
.Fields("Genere").Value = r.Offset(0, 4).Value
'.Update
Next r
.UpdateBatch
注意:如果您有打开表同时加入了记录,那么你必须按F5 到刷新表并查看新的数据。
如果您将'On Error Goto'注释掉会发生什么? –
它会抛出一些错误并关闭记录集和连接 – SagarDixit
字段名称是否正确?此外,Excel中的数据应该与数据库中定义的数据类型匹配 –