我是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
答案 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)因为这也导致错误。