VBA 错误处理在 Excel 2016 年对一位用户不起作用

VBA Error handling dosen't work for one user in Excel 2016

我有一个奇怪的情况,用户遇到 运行 时间错误(这是预期和处理的),除了这种情况。从我阅读的有关 VBA 错误处理的所有文档中,如果子过程产生错误,则该错误会通过调用堆栈向上渗透,直到找到具有错误处理的过程并在该处进行处理等级。如果未找到处理程序,则会显示 运行 时间错误对话框 window。所以...

    Sub ProcedureA()

Try:    

    On Error Goto Catch
    ' No error handler in ProcedureB
    ProcedureB

Catch:

    If Err.Number <> 0 then

        '  Manages error from ProcedureB

    End If

End Sub

这适用于除最近安装 Excel 2016 的用户以外的所有用户(尽管其他用户安装了 2016 并且没有问题)。在他的例子中,运行 时间错误对话框 window 出现,"scene of the crime" 突出显示指向 ProcedureB 中的语句(没有错误处理程序)。那么我的问题是 Excel 或其 VBA 选项中是否有某些设置会覆盖默认的 VBA 错误处理行为?

这不是他的 Excel 版本的问题。它是 VBE 中的一个设置。据我所知,这在默认情况下并未打开,因此您的用户打开了此设置,或者由于某种原因更改了默认设置。

要修复此设置:

  1. 打开 VBE
  2. 转到工具菜单 (Alt-T)
  3. Select 选项 (Alt-O)
  4. 在“常规”选项卡 >“错误捕获”下,您需要 select 或 'Break in Class Module'(这允许您在 class 模块中查看错误,如果它们发生的话。我强烈推荐这个设置。)或 'Break On Unhandled Errors'(几乎相同的行为,但它在调用例程中中断并且不会让您看到 class 中发生的错误。)

那么你应该已经准备好了。发生的事情是 VBE 设置覆盖了错误处理行为,这对调试有好处,但当有人实际上是 运行 你的应用程序时就没有那么有用了。