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

Access 365中VBA Exit Sub未自动重置Err对象的疑问

问题原因解析

微软文档中提到的「执行Exit Sub时自动调用Err.Clear重置Err对象」,有个关键前提:当前过程使用的是「On Error GoTo 标签」这类结构化错误捕获模式。

你的SubB里用的是On Error Resume Next,这种属于非中断式错误处理模式,VBA在这种模式下不会在退出过程时自动清理Err对象的状态。

具体到你的代码流程:

  1. SubB中启用On Error Resume Next后,执行Err.Raise 1234,Err对象被设置为1234,但因为Resume Next的特性,代码会继续执行到Exit Sub。
  2. 由于SubB的错误处理模式是Resume Next,Exit Sub不会触发自动清Err的逻辑,所以Err对象的状态被保留下来,带到了调用它的SubA中。
  3. SubA没有设置任何错误处理,所以直接读取到了SubB遗留的Err.Number值1234。

如果要让SubB退出时清空Err对象,有两种可行方式:

  • 在SubB的Exit Sub语句前手动调用Err.Clear
  • 将SubB的错误处理改成结构化模式,示例代码如下:
Private Sub SubB()
    On Error GoTo ErrorHandler
    Err.Raise 1234
ErrorHandler:
    Exit Sub
End Sub

这种情况下,Exit Sub会自动触发Err.Clear,SubA中的MsgBox就会显示0。

内容的提问来源于stack exchange,提问作者Hugh W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 17:42:02