MS Access VBA搜索无匹配时Recordset仍自动跳转问题求助
问题根源
- 未在搜索前保存当前记录的书签,触发NoMatch逻辑时没有主动将表单记录指针回滚到原始位置
- 文本框默认的回车行为会触发焦点移动,若该文本框是表单Tab次序的最后一个控件,按回车后会自动跳转到下一条记录
- 代码存在冗余写法(未使用With块简化、多余的对象清理逻辑、Str函数可能引入前置空格),可能引发隐性异常
解决方案
第一步:修改事件代码
修正后的搜索逻辑如下,新增原始书签保存与回滚逻辑,清理冗余代码:
Private Sub txt_DocNumSearch_AfterUpdate() Dim rs As Object Dim originalBkMark As Variant ' 保存当前所在记录的原始书签 originalBkMark = Me.Bookmark Set rs = Me.RecordsetClone With rs ' 若DocNum为文本类型,将条件改为:.FindFirst "[DocNum] = '" & Nz(Me!txt_DocNumSearch, "") & "'" .FindFirst "[DocNum] = " & Nz(Me!txt_DocNumSearch, 0) If .NoMatch Then MsgBox "Record not found." ' 未匹配到,回滚到原始记录 Me.Bookmark = originalBkMark Else ' 匹配到,跳转至目标记录 Me.Bookmark = .Bookmark End If .Close End With ' 清理对象 Set rs = Nothing End Sub
如果需要实现输入完成按回车直接触发搜索,可以新增文本框的KeyPress事件:
Private Sub txt_DocNumSearch_KeyPress(KeyAscii As Integer) ' 捕捉回车按键 If KeyAscii = 13 Then KeyAscii = 0 ' 取消默认输入行为 Call txt_DocNumSearch_AfterUpdate End If End Sub
第二步:修改文本框属性
选中文本框txt_DocNumSearch,打开属性面板的「其他」选项卡,将「回车键行为」设置为无,彻底屏蔽按回车触发的默认跳转逻辑。
内容的提问来源于stack exchange,提问作者user2059972
相关产品推荐
相关产品推荐

