Access 2016如何阻止窗体加载时组合框触发change事件
Access组合框自动赋值阻止Change事件触发方案
核心实现逻辑
通过模块级标志位区分是程序自动赋值还是用户手动修改,仅在用户手动操作时执行Change事件逻辑。
步骤1:声明模块级标志变量
打开窗体的VBA代码编辑器(选中窗体按Alt+F11),在模块最顶部的通用声明段添加如下代码:
' 标记当前是否为程序自动赋值状态,True时忽略Change事件 Dim ignoreChange As Boolean
步骤2:自动赋值前开启忽略状态
在你给组合框自动赋值的逻辑(点击按钮运行的宏/代码、窗体加载填充数据的逻辑)执行前,添加代码将标志位设为True,赋值完成后再改回False:
' 示例:点击按钮查询数据后给组合框赋值的逻辑 Private Sub 查询按钮_Click() ignoreChange = True ' 开启忽略,阻止赋值触发Change事件 ' 这里放你原来的查询、填充文本框、给组合框赋值的逻辑 Me.你的组合框名称 = 查询结果的Yes/No值 ' 替换为你实际的赋值代码 ignoreChange = False ' 赋值完成,关闭忽略,后续用户操作可正常触发事件 End Sub
如果你原来用宏实现赋值,可在宏里添加
RunCode操作,分别在赋值前后执行修改ignoreChange的函数即可。
步骤3:修改组合框Change事件逻辑
在组合框的Change事件开头添加标志位判断,自动赋值状态下直接跳过后续逻辑:
Private Sub 你的组合框名称_Change() ' 程序自动赋值时直接退出,不执行更新逻辑 If ignoreChange Then Exit Sub ' 这里放你原来的Change事件要执行的更新多张表的逻辑 ' 比如调用宏:DoCmd.RunMacro "你的更新宏名称" End Sub
注意事项
- 如果窗体绑定了数据源,加载时会自动填充组合框值,需要在窗体的
Load事件开头把ignoreChange设为True,窗体Current事件最后再改回False - 所有程序自动给组合框赋值的场景,都可以通过临时修改
ignoreChange的取值控制是否触发Change事件 - 组合框的可选值为Yes/No时,注意赋值的数据类型要和组合框的行来源类型匹配,避免赋值异常触发多余事件
内容的提问来源于stack exchange,提问作者Shaves
相关产品推荐
相关产品推荐

