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))

  1. 它跳过第2行
  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刷新表格并查看新数据。