2017-06-07 187 views
0

我想在Excel電子表格上有一個按鈕,並將數據複製到Access表中。 範圍是來自同一工作簿中另一工作表的自動填充字段。將Excel範圍導出到Access表VBA

我試過幾個代碼要做到這一點,但我要麼得到一個錯誤1004:應用程序定義或對象定義的錯誤,或者沒有錯誤,但數據未在Access數據庫被複制。

我的代碼複製到下面。

Sub Export_Data() 

    Dim cnn As ADODB.Connection 
    Dim rst As ADODB.Recordset 
    Dim dbPath 
    Dim x As Long, i As Long 

    dbPath = "H:\RFD\RequestForData.accdb" 

    Set cnn = New ADODB.Connection 

    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath 

    Set rst = New ADODB.Recordset 'assign memory to the recordset 

    rst.Open Source:="tblRequests", ActiveConnection:=cnn, _ 
      CursorType:=adOpenDynamic, LockType:=adLockOptimistic, _ 
      Options:=adCmdTable 

    rst.AddNew 
    For i = 1 To 13 
     rst(Cells(1, i).Value) = Cells(x, i).Value 
    Next i 
    rst.Update 

    rst.Close 
    cnn.Close 

    Set rst = Nothing 
    Set cnn = Nothing 

    MsgBox " The data has been successfully sent to the access database" 

    Set rst = Nothing 
    Set cnn = Nothing 

End Sub 
+0

你能從Access而不是Excel導入數據嗎?如果是這樣'DoCmd.TransferSpreadsheet'可以做你想做的,我認爲 – FlorianGD

+0

什麼是x?它沒有在任何地方初始化。 – RADO

+0

是的,x未被初始化或增加。你想填充13個字段,只有1個記錄? – June7

回答

0

看你的子程序我看到兩件事情,可以使不工作:

  • RST(單元格(1,1).value的)=細胞(X,I)。價值< - 'x'初始化在哪裏?

  • 只有一個循環移過字段,但我認爲它應該是Excel中行的另一個循環。

有了這個兩個變化,當記錄保存可能會成爲像這樣的循環:

For x = 1 TO lastRow ' Last row has to be calculated somehow 
     rst.AddNew 
     For i = 1 To 13 
      rst(Cells(1, i).Value) = Cells(x, i).Value 
     Next i 
     rst.Update 
    Next x 

希望它能幫助。

+0

嗨,謝謝你的回答。我試過你的代碼。我能有一個消息框,說:「數據已成功發送到接入數據庫」,但是當我回到數據庫,沒有記錄在那裏。另外,由於excel電子表格中的記錄從第7行開始,因此我設置了x = 7。 @USeptim –

+0

嗨,喬安妮。我已經複製了一個類似的例子(只有三個字段),它已經工作。行被添加到Access數據庫。我會做一些控制測試,例如添加記錄有多少行已經你的日常處理的計數器,並添加一個消息框顯示該號碼或檢查主鍵字段填充...我會測試樣的東西? –