2017-10-10 189 views
0

我是Excel VBA的新用戶,正在根據以下代碼從Excel工作表中更新Access數據庫。當我運行的代碼我得到一個錯誤:無法從Excel工作表中更新Access數據庫

運行時錯誤「3001」:參數的錯誤類型,是在可接受的範圍內,或有衝突彼此

我認爲這個問題是與myRecordset.Open命令,但我只是完全卡住,無法弄清楚如何解決它。

任何意見將不勝感激。

Private Sub CommandButton1_Click() 
    Update MS Access database 

    Dim oConn As Object 
    Dim myRecordset As Object 
    Dim sConn As String 

    sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents\Standard Form for Rate Requests\Database41.accdb" 
    Set oConn = CreateObject("ADODB.Connection") 
    oConn.Open sConn 

    Set myRecordset = CreateObject("ADODB.RecordSet") 
    myRecordset.Open "MainTable", oConn, adOpenForwardOnly, adLockPessimistic, adCmdTable 

    With myRecordset 
     .AddNew 
     .Fields("ID").value = Worksheets("Sheet1").Range("A5").value 
     .Fields("Order Number").value = Worksheets("Sheet1").Range("A5").value 
     .Fields("Requester").value = Worksheets("Sheet1").Range("B2").value 
     .Fields("Request Type").value = Worksheets("Sheet1").Range("B5").value 
     .Fields("Transport Mode").value = Worksheets("Sheet1").Range("C5").value 
     .Fields("Origin").value = Worksheets("Sheet1").Range("B16").value 
     .Fields("Destination").value = Worksheets("Sheet1").Range("I16").value 
     .Fields("Collection Date").value = Worksheets("Sheet1").Range("D5").value 
     .Fields("Delivery Date").value = Worksheets("Sheet1").Range("E5").value 
     .Fields("Note").value = Worksheets("Sheet1").Range("J12").value 

     .Update 
     .Close 
    End With 

    Set myRecordset = Nothing 
    Set oConn = Nothing 
End Sub 

回答

1

您是否設置了對Microsoft Activex數據對象庫的引用? 1.從工具菜單轉到VBE並選擇參考.. 2.然後從列表中選擇「Microsoft Activex數據對象庫」。

0

非常感謝GSD!

我選擇了Microsoft ActiveX Data Objects 6.1 Library,這解決了我的問題。我還必須刪除引用以更新Access數據庫(.Fields(「ID」).value = Worksheets(「Sheet1」)。Range(「A5」).value)中的「ID」字段,因爲這也會導致錯誤。