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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:04