用于确定VBA中当前错误处理方法的语法

use*_*776 5 vba

在我的代码中的任何给定行上,我可以将Debug.Print()与其他命令一起使用,以找出如果我的代码在该行上遇到错误会发生什么?

我可以使用Debug.Print中的任何语句来查明当前的错误处理过程是转到0,恢复下一个还是转到某个标签?

我想象的是:

Debug.Print(OnErrorMode)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来确定一个特定的代码行是否会出现错误GoTo 0(停止并显示错误),Resume Next(跳过该行)或者GoTo Label(跳转到Label),因为On Error我的代码中某处可能存在我无法找到的地方.那可能吗?

And*_*ely 6

在使用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
Run Code Online (Sandbox Code Playgroud)

我使用的第二种模式是在很可能发生错误的区域,例如打开文件(文件可能丢失)或数据库.然后我像使用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
Run Code Online (Sandbox Code Playgroud)

这使得处理错误变得更容易,并且调试就像注释掉单个On错误语句一样简单.请注意,err.number列出了错误代码返回,因此您可以添加逻辑来处理不同类型的错误.