小问题,在Visual Basic 6.0(VB6)中
假设我错过了一个可能的情况并且用户做了一些并且没想到,那么他会收到一个错误,导致我的应用程序崩溃。是否有可以使用的事件,如果发生这种情况会执行某个代码?
尝试了Form_Terminate \ Unload \ Query_Unload,那里运气不太好。
崩溃: AKA运行时错误。
答案 0 :(得分:2)
您可以在任何级别添加On Error
支票,包括Sub Main
。在该函数级别的错误检查未捕获的任何错误将通过调用堆栈上升到主/初始方法,您可以在那里捕获它们。
然后您可以优雅地显示错误(以便您或您的用户知道它),然后恢复那时最好的方法。而且,请记住,您可以在几个不同的战略级别和位置执行此操作。
如果在事件过程中发生错误,那么这些错误将被困在Sub Main()
中,因此您还需要将它们捕获到那里。
任何出现在堆栈顶部的错误,无论是Sub Main()
还是事件过程都会被运行时捕获并且是致命的。您的代码将不会收到此通知。
您可能也对帖子Good Patterns For VBA Error Handling感兴趣。
答案 1 :(得分:0)
关于在VB6中捕获错误的常用方法是使用On Error
和GOTO
标记。在每个函数的开头,您只需在出现错误时声明goto,并且每当出现错误时,将执行GOTO部分。
请注意,Goto部分应该在方法的末尾,因此在运行代码之后,不会执行任何其他代码,而是保留Function。检查下面的例子;
Private Function MyMethod()
Dim sMsg As String
On Error Goto ErrHandler
' ...code here...
Exit Function
ErrHandler:
sMsg = "Error #" & Err.Number & ": '" & Err.Description & "' from '" & Err.Source & "'"
GoLogTheError sMsg
End Function