我(不幸的是)在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
答案 0 :(得分:4)
对于Office 2003,当调试器配置为中断未处理的错误(默认配置)时,您将收到此行为。
如果您希望它在Err.Raise线上中断,您需要将其配置为中断所有错误(工具/选项/常规/错误陷阱/中断所有错误)。
我认为Office 2000也是如此,但没有要检查的副本。
答案 1 :(得分:1)
此页面是VBA中错误处理的一个非常好的资源:
答案 2 :(得分:0)
这个“功能”在Excel 2003中是相同的,如果它在2007年有所不同,我会感到惊讶。
答案 3 :(得分:0)
在Excel 2010中仍然如此 - 这就是我遇到此行为的地方。
绝对没有理由使用Break In Class Module以外的错误捕获设置。
他对错误模式之间差异的描述:
在测试和运行代码时,您有三种错误捕获模式。第一个是Break On All Errors。如果发生任何错误,这将导致调试器打开,无论代码中可能有任何On Error处理。第二个选项是Break On Unhandled Errors。如果现有On Error指令未处理错误,这将导致调试器打开。这是最常用的选项,是默认设置。第三个选项,Break In Class Module是最重要和最少使用的。它不是默认的错误捕获模式,因此您必须手动设置它。
Break In Class模块是最重要的,因为它会导致调试器在实际导致问题的对象模块中的代码行上中断。 “类中断”模块设置位于“工具”菜单上的“选项”对话框中。它位于“选项”对话框的“常规”选项卡上,如下所示。