类调试中引发的错误,如果在属性调用时引发

时间:2008-11-21 02:40:55

标签: excel excel-vba excel-2000 vba

我(不幸的是)在Excel 2000 VBA中开发应用程序。我相信我发现在自定义类属性,函数或子调试中引发的任何错误,就像在调用属性的VBA代码中引发错误一样。也就是说,VBE调试器不会将我带到发生错误的Class属性中,而是将属性首次输入(例如,从模块子或函数中),这使得开发除了最浅层的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 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

此页面是VBA中错误处理的一个非常好的资源:

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在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模块是最重要的,因为它会导致调试器在实际导致问题的对象模块中的代码行上中断。 “类中断”模块设置位于“工具”菜单上的“选项”对话框中。它位于“选项”对话框的“常规”选项卡上,如下所示。