Access 365中VBA Exit Sub未自动重置Err对象的疑问
问题原因解析
微软文档中提到的「执行Exit Sub时自动调用Err.Clear重置Err对象」,有个关键前提:当前过程使用的是「On Error GoTo 标签」这类结构化错误捕获模式。
你的SubB里用的是On Error Resume Next,这种属于非中断式错误处理模式,VBA在这种模式下不会在退出过程时自动清理Err对象的状态。
具体到你的代码流程:
- SubB中启用
On Error Resume Next后,执行Err.Raise 1234,Err对象被设置为1234,但因为Resume Next的特性,代码会继续执行到Exit Sub。 - 由于SubB的错误处理模式是Resume Next,Exit Sub不会触发自动清Err的逻辑,所以Err对象的状态被保留下来,带到了调用它的SubA中。
- 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
相关产品推荐
相关产品推荐

