Excel VBA访问
我有以下代码,其中.Fields …没有得到执行。 循环直接closures连接而不将logging添加到表中。
码:
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
请build议
我能够让你的代码使用这个连接string工作:
“Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\ Users \ best buy \ Desktop \ test.accdb; Persist Security Info = False;”
我们可以排除数据不匹配错误,因为它在closures连接之前会抛出3219运行时错误操作。
Range("A3", Range("A2").End(xlDown))
Range("A2", Range("A" & Rows.Count).End(xlup))
可能应该更改Range("A3", Range("A2").End(xlDown))
- 它跳过第2行
- 如果第二行以外没有数据,则会添加1048575个空logging(问我怎么知道的)
如果你有一个大的数据集,你应该注释掉。 .Update
并在添加.UpdateBatch
所有logging后使用.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
注意:如果在添加logging时打开表格,则必须按F5刷新表格并查看新数据。