如何将 Excel 单元格值设置为 Access Query 的条件?
Posted
技术标签:
【中文标题】如何将 Excel 单元格值设置为 Access Query 的条件?【英文标题】:How can I set an Excel Cell Value as the criteria for Access Query? 【发布时间】:2019-08-23 06:59:38 【问题描述】:我正在 MS Access 中创建一个新查询,该查询根据“分支”和“员工”字段更新现有记录。如何设置标准以引用单元格值?假设A2
持有Access 的“Branch”ID,B2
持有Access 中“Employee”ID 的值。我想更新我的Access“Notes”字段。我的查询在 Excel 中运行时有效,但这只是因为我指定了“员工”和“分支机构”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"));
【问题讨论】:
【参考方案1】:您的变量不会神奇地转移到查询中,只是因为它们具有相同的名称。
您需要在 Access 查询中指定参数,并通过 Excel VBA 代码中的DAO.QueryDef
对象传递它们。
这里是一个例子:https://***.com/a/2317225/3820271
Dim qd As Object ' DAO.QueryDef
Set qd = db.QueryDefs("Update_Records")
qd.Parameters("branchid") = branchid
' etc.
qd.Execute
【讨论】:
谢谢你的回复,我去看看参数。还在学习SQL。一旦我得到你的建议,我会接受。【参考方案2】:这是我从@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
【讨论】:
以上是关于如何将 Excel 单元格值设置为 Access Query 的条件?的主要内容,如果未能解决你的问题,请参考以下文章
Access VBA:删除单元格值与 Access 表中的值匹配的 Excel 行
访问 VBA - 在大范围内更改 Excel 单元格值的更快方法?