【问题标题】:Errors Raised within Class Debug As If Raised at Property Call在类调试中引发的错误就像在属性调用中引发的一样
【发布时间】:2010-09-23 09:17:39
【问题描述】:

我(不幸的是)在 Excel 2000 VBA 中开发应用程序。我相信我已经发现在自定义类属性、函数或子调试中引发的任何错误,就好像在调用该属性的 VBA 代码中引发错误一样。也就是说,VBE 调试器不会将我带到 Class 属性中发生错误的位置,而是将我带到第一次输入属性的位置(例如,从 Module Sub 或 Function)。这使得开发除最浅的 OO Excel 2000 VBA 代码,因为我必须逐行遍历每个 Class 方法以发现导致错误的指令。

我是否遗漏了什么,或者这是我必须在 Excel 2000 中处理的已知错误?这个问题是在 2003 年还是 2007 年解决的?

示例代码:

'''''''''''''''
'In Module1:

Public Sub TestSub1()
    Dim testClass As Class1
    Dim testVariant As Variant
    Set testClass = New Class1
    testVariant = testClass.Property1 'Debugger takes me here...
End Sub

''''''''''''''
' In Class1

Property Get Property1() As Variant
    Err.Raise 666, , "Excel 2000 VBA Sux!" 'But error is actually thrown here.
End Property

【问题讨论】:

    标签: excel excel-2000 vba


    【解决方案1】:

    对于 Office 2003,当调试器配置为在未处理的错误(默认配置)时中断时,您将获得此行为。

    如果您希望它在 Err.Raise 行中断,您需要将其配置为在所有错误上中断(工具/选项/常规/错误捕获/所有错误中断)。

    我相信 Office 2000 也是如此,但没有要检查的副本。

    【讨论】:

    • 谢谢!实际上,在三个选项(全部中断、课堂中断和未处理错误中断)中,我认为我一直在寻找课堂中断。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      这个“功能”在 Excel 2003 中是相同的,如果在 2007 年有所不同,我会感到惊讶。

      【讨论】:

      • 这个“功能”听起来更像是一种鼓励购买 Visual Studio 的策略。乐叹息。谢谢!
      • 我认为微软已经故意忽视 VBA 大约 10 年,转而支持 .Net 等。他们只是没有得到 VBA 在日常业务中增加的价值。
      • 这是相同的功能。实际上是相同的代码。到现在已经有近十年了。似乎有太多的稳定性。
      【解决方案4】:

      这在 Excel 2010 中仍然适用 - 这就是我遇到这种行为的地方。

      引用Chip Pearson's site

      绝对没有理由使用除 Break In Class Module 之外的错误捕获设置。

      他对错误模式区别的描述:

      在测试和运行代码时,您有三种错误捕获模式。第一个是 Break On All Errors。如果发生任何错误,这将导致调试器打开,而不管代码中可能有任何 On Error 处理。第二个选项是 Break On Unhandled Errors。如果错误不是由现有的 On Error 指令处理,这将导致调试器打开。这是最常用的选项,也是默认设置。第三个选项,Break In Class Module 是最重要和最少使用的。它不是默认的错误捕获模式,所以你必须手动设置它。

      Break In Class Module 是最重要的,因为它会导致调试器中断目标模块中实际导致问题的代码行。 Break In Class Module 设置位于“工具”菜单上的“选项”对话框中。它位于“选项”对话框的“常规”选项卡上,如下所示。

      【讨论】:

      • 你确定没有原因吗?据我所知,建议的设置 Err.Raise 不能在课堂上使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2019-09-29
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      相关资源
      最近更新 更多