4

我(不幸的是)在 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
4

4 回答 4

4

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

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

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

于 2008-11-21T09:30:45.970 回答
1

这个页面是 VBA 中错误处理的一个很好的资源:

于 2008-11-21T17:38:34.943 回答
0

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

于 2008-11-21T02:54:14.493 回答
0

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

引用Chip Pearson 的网站

除了 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 设置位于“工具”菜单上的“选项”对话框中。它位于“选项”对话框的“常规”选项卡上,如下所示。

于 2015-10-18T15:09:59.797 回答