VBA 中确定当前错误处理方法的语法
Syntax to determine current error handling method in VBA
在我的代码的任何给定行上,我能否将 Debug.Print() 与其他命令一起使用,以查明如果我的代码在该行遇到错误会发生什么情况?
我可以使用 Debug.Print 中的任何语句来查明当前错误处理过程是转到 0、继续下一步还是转到某个标签?
我设想的是:
Debug.Print(OnErrorMode)
我正在寻找一种方法来确定出错的特定代码行是 GoTo 0
(停止并显示错误)、Resume Next
(跳过该行)还是 GoTo Label
(跳转到标签)假设 On Error
可能埋在我找不到的代码中的某个地方。这可能吗?
在使用 VBA 和 VB(5 和 6)的十多年中,我 从未见过任何一个参考资料甚至可以远程暗示一个可能是能够确定存在哪些错误捕获条件。 虽然编译器肯定知道,但不会公开。
在我看来,您的问题可能与您如何构建错误捕获有关。
我将子例程包装在单个 On Error Goto 语句中,位于与 On Error 相同的子例程中。我有一个出口,当错误发生时,我会记录发生的事情,这样我就可以修复错误。然后我可以使用 debug.print 或创建一个带有附加到日志的调试信息的字符串。
Sub main()
On Error GoTo Main_Error
'Insert Code Here
Exit Sub
Main_Error:
WriteLog Err.Number, Err.Description
MsgBox ("The program encoutnered an error.")
End Sub
Private Sub WriteLog(ErrNum As Integer, ErrDes As String)
Open "Errors.txt" For Append As #1
Print #1, Now & " " & ErrNum & " - " & ErrDes
Close #1
End Sub
我使用的第二种模式是在很可能发生错误的区域,例如打开文件(文件可能丢失)或数据库。然后我像 try catch 块一样使用错误捕获。
Private Function LoadFile() As Boolean
On Error GoTo Main_Error
'Code before a potentially error-prone statement
On Error Resume Next
Open "aMissingFile.txt" For Input As #1
If Err.Number <> 0 Then
MsgBox ("aMissingFile.txt is missing")
LoadFile = False
Exit Function
End If
On Error GoTo LoadFile_Error
'The rest of your code
LoadFile = True
Exit Function
LoadFile_Error:
WriteLog Err.Number, Err.Description
MsgBox ("The program encoutnered an error.")
LoadFile = False
End Function
这使得处理错误变得更加容易,调试就像注释掉单个 On error 语句一样简单。请注意err.number列出了错误代码return,因此您可以添加逻辑来处理不同类型的错误。
在我的代码的任何给定行上,我能否将 Debug.Print() 与其他命令一起使用,以查明如果我的代码在该行遇到错误会发生什么情况?
我可以使用 Debug.Print 中的任何语句来查明当前错误处理过程是转到 0、继续下一步还是转到某个标签?
我设想的是:
Debug.Print(OnErrorMode)
我正在寻找一种方法来确定出错的特定代码行是 GoTo 0
(停止并显示错误)、Resume Next
(跳过该行)还是 GoTo Label
(跳转到标签)假设 On Error
可能埋在我找不到的代码中的某个地方。这可能吗?
在使用 VBA 和 VB(5 和 6)的十多年中,我 从未见过任何一个参考资料甚至可以远程暗示一个可能是能够确定存在哪些错误捕获条件。 虽然编译器肯定知道,但不会公开。
在我看来,您的问题可能与您如何构建错误捕获有关。
我将子例程包装在单个 On Error Goto 语句中,位于与 On Error 相同的子例程中。我有一个出口,当错误发生时,我会记录发生的事情,这样我就可以修复错误。然后我可以使用 debug.print 或创建一个带有附加到日志的调试信息的字符串。
Sub main()
On Error GoTo Main_Error
'Insert Code Here
Exit Sub
Main_Error:
WriteLog Err.Number, Err.Description
MsgBox ("The program encoutnered an error.")
End Sub
Private Sub WriteLog(ErrNum As Integer, ErrDes As String)
Open "Errors.txt" For Append As #1
Print #1, Now & " " & ErrNum & " - " & ErrDes
Close #1
End Sub
我使用的第二种模式是在很可能发生错误的区域,例如打开文件(文件可能丢失)或数据库。然后我像 try catch 块一样使用错误捕获。
Private Function LoadFile() As Boolean
On Error GoTo Main_Error
'Code before a potentially error-prone statement
On Error Resume Next
Open "aMissingFile.txt" For Input As #1
If Err.Number <> 0 Then
MsgBox ("aMissingFile.txt is missing")
LoadFile = False
Exit Function
End If
On Error GoTo LoadFile_Error
'The rest of your code
LoadFile = True
Exit Function
LoadFile_Error:
WriteLog Err.Number, Err.Description
MsgBox ("The program encoutnered an error.")
LoadFile = False
End Function
这使得处理错误变得更加容易,调试就像注释掉单个 On error 语句一样简单。请注意err.number列出了错误代码return,因此您可以添加逻辑来处理不同类型的错误。