无法从Excel工作表更新Access数据库

时间:2017-10-10 15:52:06

标签: excel-vba vba excel

我是Excel VBA的新手,希望根据以下代码从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

2 个答案:

答案 0 :(得分:1)

您是否设置了对Microsoft Activex数据对象库的引用? 1.从工具菜单中转到VBE和选择参考.. 2.然后从列表中选择“Microsoft Activex Data Objects Library”。

答案 1 :(得分:0)

非常感谢GSD !!

我选择了Microsoft ActiveX Data Objects 6.1 Library,这解决了我的问题。我还必须删除对Access数据库中更新“ID”字段的引用(.Fields(“ID”)。value = Worksheets(“Sheet1”)。范围(“A5”)。value)因为这也导致错误。