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)
额外修复点
你的代码中存在两处隐藏问题,解决记录集报错后也会触发运行错误,建议同步修改:
- 保存文件的路径缺少反斜杠,会生成非法路径
- 取值字段名拼写错误,查询返回的字段为
ProjectNo,但代码中调用了不存在的rs!ProjectNumber
修改后的保存代码如下:
wDoc.SaveAs2 "C:\Documents\" & rs!ProjectNo & "_ECORtester.docx"
注意事项
运行代码前请确保窗体Form3处于打开状态,且搜索框SearchBox的名称拼写和实际窗体控件一致。
内容的提问来源于stack exchange,提问作者Jacob Pearce
相关产品推荐
相关产品推荐

