2017-08-02 99 views
0

我有以下代碼,其中.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 

請建議

+0

如果您將'On Error Goto'註釋掉會發生什麼? –

+0

它會拋出一些錯誤並關閉記錄集和連接 – SagarDixit

+0

字段名稱是否正確?此外,Excel中的數據應該與數據庫中定義的數據類型匹配 –

回答

1

我能得到你的代碼中使用此連接字符串的工作:

「供應商= Microsoft.ACE.OLEDB.12.0; Data Source = C:\ Users \ best buy \ Desktop \ test.accdb; Persist Security Info = False;「

我們可以排除數據不匹配錯誤,因爲它在關閉連接之前會拋出3219運行時錯誤操作。

enter image description here

Range("A3", Range("A2").End(xlDown))可能應該有兩個原因改變Range("A2", Range("A" & Rows.Count).End(xlup))

  1. 它跳過第2行
  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 刷新表並查看新的數據。

+0

好帖子。快速問題,你是如何製作視頻的? – Zac

+0

@Zac我使用[ScreenToGif](http://www.screentogif.com/)。 – 2017-08-02 09:06:57

+0

不錯。我以前見過它,但只是不知道它是如何完成的。謝謝 – Zac