Access导航窗体层级中Contratto字段AfterUpdate事件失效求助
Access窗体字段AfterUpdate事件未触发排查
问题场景
窗体层级结构(从高到低):
- 主窗体:Navigation mask(意大利语名称:Maschera di spostamento)
- 子窗体1:SubformNavigation(意大利语名称:SottomascheraSpostamento)
- 子窗体2:Purchase documents(采购单据)
- 目标字段:Contratto(控件源绑定为“Top Contract”)
为该字段编写的AfterUpdate事件代码:
Private Sub Contratto_Afterupdate() If Forms![Maschera di spostamento].Form!SottomascheraSpostamento!Contratto.Value = "2270100831" Then MsgBox "Attenzione Per questo contratto è necessario un aumento del 8,9% del consuntivo.", vbCritical, "Attenzione" Else MsgBox "errore" End If End Sub
问题现象
Contratto字段的AfterUpdate事件未触发,消息框不显示- 尝试改用
On Change事件无效 - 新增绑定该字段值的文本框并添加
AfterUpdate事件,同样无效
排查与解决步骤
1. 确认控件事件绑定正确性
打开Purchase documents窗体设计视图,选中Contratto控件:
- 右键→属性→切换到事件选项卡
- 检查
更新后(AfterUpdate)事件下拉框是否选择[事件过程],点击右侧...能直接打开编写的代码(排除绑定错误或未关联代码的情况)
2. 修正控件引用路径
代码中跨多层窗体引用控件容易出错,Contratto本身就在当前窗体中,直接用Me引用更可靠:
Private Sub Contratto_AfterUpdate() If Me.Contratto.Value = "2270100831" Then MsgBox "Attenzione Per questo contratto è necessario un aumento del 8,9% del consuntivo.", vbCritical, "Attenzione" Else MsgBox "errore" End If End Sub
3. 检查控件编辑权限
- 确认
Contratto控件的控件来源为Top Contract,是否锁定设为否,是否有效设为是 - 控件锁定或无效时,用户无法修改值,不会触发
AfterUpdate事件
4. 验证窗体记录源可更新性
- 确认
Purchase documents窗体的记录源是可更新的表或查询(不可更新的查询会导致字段值无法修改,事件不触发) - 检查当前记录是否为新建记录或只读状态
5. 测试基础事件触发
先编写最简代码验证事件是否正常:
Private Sub Contratto_AfterUpdate() MsgBox "事件触发成功!当前值:" & Me.Contratto.Value End Sub
若能弹出消息,说明事件本身正常,再逐步添加原逻辑判断
6. 排查阻止事件的其他代码
- 查看窗体
加载(Load)、打开(Open)事件中是否有代码设置控件Enabled或Locked为True - 检查是否存在全局错误处理代码(如
On Error Resume Next)屏蔽了事件执行错误
内容的提问来源于stack exchange,提问作者Roberto Sola
相关产品推荐
相关产品推荐

