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

如何规避VBA运行时错误-2147352567(80020009):数据已被更改

解决Access中AfterUpdate事件修改控件值导致的运行时错误-2147352567

这个问题我之前帮不少人解决过,本质是Access的事件触发逻辑冲突导致的——你在AfterUpdate事件里修改控件值时,Access会误以为数据被外部篡改,从而抛出那个报错。下面给你两个靠谱的解决思路:

方法一:临时禁用事件触发

在修改控件值之前,先关闭AfterUpdate事件的绑定,修改完成后再重新启用,避免循环触发和状态冲突:

Private Sub Results_AfterUpdate()
    If IsNumeric(Me.Results) = False Then
        ' 先禁用AfterUpdate事件,防止重复触发
        Me.Results.AfterUpdate = ""
        ' 转换为大写
        Me.Results = UCase(Me.Results)
        ' 重新绑定事件过程
        Me.Results.AfterUpdate = "[Event Procedure]"
    End If
End Sub

方法二:改用BeforeUpdate事件(更推荐)

比起AfterUpdate,BeforeUpdate是在控件值即将保存到记录集之前触发的,这时候修改值不会触发额外的冲突,代码更简洁:

Private Sub Results_BeforeUpdate(Cancel As Integer)
    If IsNumeric(Me.Results) = False Then
        Me.Results = UCase(Me.Results)
    End If
End Sub

简单解释下:AfterUpdate是值已经保存后才执行的,这时候你再改控件值,Access会检测到控件值和记录里的原始值不一致,就会抛出“数据已被更改”的错误;而BeforeUpdate是在保存前修改,相当于直接修改要保存的内容,自然不会有冲突。

内容的提问来源于stack exchange,提问作者Adam S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:02:07