Access 2003中子窗体Part Number字段校验失败后无法回焦问题求助
解决方案
问题根源
你当前使用LostFocus事件实现校验是逻辑失效的核心原因:LostFocus在控件已经失去焦点、Access已经执行完跳转下一个控件的指令后才会触发,此时你写入的回焦代码会被已执行的跳转逻辑覆盖,无论用GoToControl还是SetFocus都无法生效。
修复方案
将校验逻辑迁移到Part Number控件的BeforeUpdate事件中,该事件会在控件内容要被保存、焦点尚未离开前触发,你可以通过设置事件的Cancel参数直接取消跳转操作,让焦点停留在当前控件。
完整修改后的代码(写在子窗体的代码模块中即可)
Private Sub Part_Number_BeforeUpdate(Cancel As Integer) Dim RegEx As Object, MyString As String Set RegEx = CreateObject("VBScript.RegExp") ' 直接用Me取当前子窗体的控件值,不需要绕主窗体路径,稳定性更高 MyString = Me![Part Number].Value With RegEx .Pattern = "[+#%=]+" End With If RegEx.Test(MyString) = True Then ' Cancel=True 会取消当前内容的更新,同时阻止焦点离开当前控件 Cancel = True MsgBox "Part Number Contains Invalid Character", vbOKOnly ' 自动清空错误内容,不需要用户手动删除 Me![Part Number].Value = "" End If End Sub
额外注意事项
如果你的条码扫描器触发回车后会直接跳转到子窗体的下一条新记录,还可以额外在子窗体的BeforeInsert事件中添加相同的校验逻辑,避免非法内容被写入到新记录中。
内容的提问来源于stack exchange,提问作者Tbure90
相关产品推荐
相关产品推荐

