You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access VBA运行填充Word书签宏时OpenRecordset打开Query1报错求助

报错原因分析
  • 核心原因:DAO的OpenRecordset方法执行内置查询时,无法自动解析查询SQL中引用的Access窗体控件值[Forms]![Form3]![SearchBox],会被识别为未定义的参数,直接触发运行时错误。
  • 其他可能触发该报错的场景:
    • 窗体Form3未处于打开状态,或者窗体上的输入框控件名称不是SearchBox,拼写不匹配
    • Access工程未正确引入DAO相关库(该场景概率较低,若变量定义Dim rs As DAO.Recordset未提前报错可排除)
解决方案

提供两种可直接落地的修改方式,二选一即可:

方案1:直接在VBA中拼接SQL语句,避免引用窗体控件

把原来打开记录集的行替换为以下代码,无需依赖内置的Query1:

Dim sqlStr As String
sqlStr = "SELECT ProjectNo, FirstName, LastName, Phone, ProjectName, EMail, Client " & _
         "FROM Table1 " & _
         "WHERE LastName Like '*" & Replace([Forms]![Form3]![SearchBox], "'", "''") & "*'"
Set rs = CurrentDb.OpenRecordset(sqlStr, dbOpenDynaset)

注:代码中加入了单引号转义,避免输入框内容包含单引号时SQL语法报错

方案2:显式给查询参数赋值后打开记录集

如果要保留原有Query1查询,可修改为以下代码手动传递参数:

Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.QueryDefs("Query1")
qdf.Parameters("[Forms]![Form3]![SearchBox]") = [Forms]![Form3]![SearchBox]
Set rs = qdf.OpenRecordset(dbOpenDynaset)
额外修复点

你的代码中存在两处隐藏问题,解决记录集报错后也会触发运行错误,建议同步修改:

  1. 保存文件的路径缺少反斜杠,会生成非法路径
  2. 取值字段名拼写错误,查询返回的字段为ProjectNo,但代码中调用了不存在的rs!ProjectNumber

修改后的保存代码如下:

wDoc.SaveAs2 "C:\Documents\" & rs!ProjectNo & "_ECORtester.docx"
注意事项

运行代码前请确保窗体Form3处于打开状态,且搜索框SearchBox的名称拼写和实际窗体控件一致。

内容的提问来源于stack exchange,提问作者Jacob Pearce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:09:03