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

Posted

技术标签:

【中文标题】确定 VBA 中当前错误处理方法的语法【英文标题】:Syntax to determine current error handling method in VBA 【发布时间】:2015-01-29 15:57:46 【问题描述】:

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

我可以使用 Debug.Print 中的任何语句来确定当前的错误处理过程是转到 Goto 0、Resume Next 还是 Goto some label?

我的设想是这样的:

Debug.Print(OnErrorMode)

我正在寻找一种方法来确定特定代码行是否会出现错误GoTo 0(停止并显示错误)、Resume Next(跳过行)或GoTo Label(跳转到标签) On Error 可能埋在我找不到的代码中的某个地方。这可能吗?

【问题讨论】:

您的问题似乎缺乏细节,请在您的问题中添加一些措辞。 看看this,然后用具体的问题框定你的问题 我编辑并试图更好地解释。 @user,我认为这些信息不会暴露给脚本本身。显然,脚本引擎知道当前的错误处理模式,但正在运行的脚本并不知道这一点。 谢谢!非常好!这是您清理我的问题的第二个问题。我正在学习:) 【参考方案1】:

在使用 VBA 和 VB(5 和 6)的 10 多年中,我从未见过任何一个参考文献甚至可以远程表明可以确定存在哪些错误捕获条件。虽然编译器肯定知道,但它并没有暴露出来。

在我看来,您的问题可能与您如何构建错误捕获有关。

我将子例程包装在单个 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 列出了错误代码返回,因此您可以添加逻辑来处理不同类型的错误。

【讨论】:

以上是关于确定 VBA 中当前错误处理方法的语法的主要内容,如果未能解决你的问题,请参考以下文章

在 VBA 中处理错误时如何管理无错误情况? [复制]

从宏调用的函数的 VBA 错误处理

“/”应用程序中的服务器错误。

错误处理中的 Excel VBA 运行时错误 1004

MS Access VBA 嵌套循环错误处理。我需要在每个嵌套循环中进行不同的错误处理。它是如何工作的?

vba中的sql语法错误以过滤组合框