如何设置一个Excel单元格值作为访问查询的条件?

How can I set an Excel Cell Value as the criteria for Access Query?

我正在 MS Access 中创建一个新查询,它根据 "Branch" 和 "Employee" 字段更新现有记录。如何设置条件以引用单元格值?假设 A2 持有 "Branch" 访问 ID,B2 持有 Access.I 中 "Employee" ID 的值,想要更新我的访问 "Notes" 字段.当 运行ning in Excel 时,我的查询有效,但这只是因为我指定了 "Employee" 和 "Branch" ID 是什么。当我 运行 我的代码如下时没有任何更新:

代码

Sub modify_record()
Dim ac As Object
Dim branchid As String
Dim employeeid As String
Dim notesF As String
Set ac = CreateObject("Access.Application")

branchid = Sheets("Sheet4").Range("A2")
employeeid = Sheets("Sheet4").Range("B2")
notesF = Sheets("Sheet4").Range("C2")

Dim strDatabasePath As String
strDatabasePath = "C:\Users\johnsmith\OneDrive\pbsbackup.mdb"

With ac
.OpenCurrentDatabase (strDatabasePath)
Dim db As Object
Set db = .CurrentDb
db.Execute "Update_Records"
End With

End Sub

在 MS Access 中查询。另存为 Update_Records

 UPDATE pbsmaster SET pbsmaster.notes = "notesF" WHERE 
    (((pbsmaster.branch)="branchid") AND((pbsmaster.employee)="employeeid"));

您的变量不会神奇地转移到查询中,只是因为它们具有相同的名称。

您需要在 Access 查询中指定参数,并通过 DAO.QueryDef 对象在 Excel VBA 代码中传递它们。

这里有一个例子:

Dim qd As Object ' DAO.QueryDef
Set qd = db.QueryDefs("Update_Records")
qd.Parameters("branchid") = branchid
' etc.
qd.Execute

这是我从@Andre 那里学到的解决方案。我能够执行我的代码,我注意到使用参数比使用 DAO 打开记录集要快得多。

Sub foo()
Dim db As Database
Dim qdf As QueryDef

Set db = OpenDatabase("C:\Users\employee\OneDrive\samplefile.mdb")

Set qdf = db.CreateQueryDef("", _
          "PARAMETERS pbsbranch text , pbsnotes text; " & _
          "UPDATE pbsmaster SET pbsmaster.notes=[pbsnotes] " & _
          "WHERE pbsmaster.branch=[pbsbranch]  " & _
          "")
qdf!pbsbranch = Sheets("Sheet4").Range("A2")
qdf!pbsnotes = Sheets("Sheet4").Range("C2")

qdf.Execute dbFailOnError
Set qdf = Nothing
Set cdb = Nothing
End Sub