如何将 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 行

熊猫:将特定的 Excel 单元格值读入变量

访问 VBA - 在大范围内更改 Excel 单元格值的更快方法?

java导出excel,单元格的格式为下拉框。打开excel时,提示发现不可读取内容和已修复了公式和单元格值

jQuery如果excel单元格值为负,则将文本着色为红色

如何读取指定的单元格值并将文件从 excel 转换为电子表格?