列表框双击打开指定记录表单时运行时错误3075的问题求助
Access运行时错误3075的排查与解决
咱们一步步拆解你遇到的问题,这个错误主要是筛选条件的语法问题加上重复设置筛选导致的,具体来说有这几个坑:
1. 字段类型不匹配引发的语法错误
你现在的代码直接拼接了列表框的列值,但如果fieldname是文本类型的字段,SQL语法要求文本值必须用单引号包裹——比如你现在生成的条件是[fieldname] = abc,这会被数据库当成语法错误;如果是数字类型就没问题,但文本类型必须写成[fieldname] = 'abc'。
另外,如果文本值本身包含单引号(比如O'Neil),直接拼接还会触发新的语法错误,所以最好用Replace函数转义单引号。
2. 新表单的筛选属性重复设置
你在新表单数据选项卡设置了fieldname=,这本身就是一个不完整的筛选条件(等于空?但语法不对),而且会和OpenForm时传递的筛选条件冲突,直接导致数据库解析筛选表达式时出错。
3. 多余的Requery操作
DoCmd.OpenForm加载表单时已经会应用筛选条件并显示对应记录,你紧接着调用Requery不仅多余,还可能在表单未完全加载时破坏筛选逻辑。
修正后的代码(分两种情况)
如果fieldname是数字类型:
Private Sub ListBoxname_DblClick(Cancel As Integer) Dim RecordId As Variant ' 先判断是否有选中行,避免双击空白区域出错 If Not IsNull(Me.ListBoxname.Value) Then RecordId = Me.ListBoxname.Column(2) DoCmd.OpenForm "newformname", acNormal, , "[fieldname] = " & RecordId End If End Sub
如果fieldname是文本类型:
Private Sub ListBoxname_DblClick(Cancel As Integer) Dim RecordId As Variant If Not IsNull(Me.ListBoxname.Value) Then RecordId = Me.ListBoxname.Column(2) ' 转义值里的单引号,避免语法错误 DoCmd.OpenForm "newformname", acNormal, , "[fieldname] = '" & Replace(RecordId, "'", "''") & "'" End If End Sub
后续需要调整的操作
- 打开新表单的设计视图,找到数据选项卡,把「筛选」属性里的
fieldname=清空,彻底移除这个无效的筛选设置。 - 测试双击列表框行,应该就能正常打开筛选后的表单了。
内容的提问来源于stack exchange,提问作者Mari
相关产品推荐
相关产品推荐

