确定VBA中当前错误处理方法的语法
在代码中的任何给定行上,我是否可以使用Debug.Print()和其他命令来找出如果代码在该行上遇到错误会发生什么情况 我可以使用Debug.Print中的任何语句来确定当前错误处理过程是转到0、继续下一步还是转到某个标签 我的设想是:确定VBA中当前错误处理方法的语法,vba,Vba,在代码中的任何给定行上,我是否可以使用Debug.Print()和其他命令来找出如果代码在该行上遇到错误会发生什么情况 我可以使用Debug.Print中的任何语句来确定当前错误处理过程是转到0、继续下一步还是转到某个标签 我的设想是: Debug.Print(OnErrorMode) 我正在寻找一种方法来确定出现错误的特定代码行是否将转到0(停止并显示错误)、下一步继续(跳过该行)或转到标签(跳到标签),因为我的代码中可能隐藏了一个我找不到的。这是可能的吗?在使用VBA和VB(5和6)的十多
Debug.Print(OnErrorMode)
我正在寻找一种方法来确定出现错误的特定代码行是否将
转到0
(停止并显示错误)、下一步继续
(跳过该行)或转到标签
(跳到标签),因为我的代码中可能隐藏了一个我找不到的。这是可能的吗?在使用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
私有函数LoadFile()为布尔值
On错误转到Main_错误
'在可能发生错误的语句之前执行代码
出错时继续下一步
打开“aMissingFile.txt”输入为#1
如果错误号为0,则
MsgBox(“缺少aMissingFile.txt”)
LoadFile=False
退出功能
如果结束
On错误转到LoadFile\u错误
'代码的其余部分
LoadFile=True
退出功能
加载文件\u错误:
写日志错误号,错误描述
MsgBox(“程序遇到错误。”)
LoadFile=False
端函数
这使得处理错误变得更容易,调试就像注释一条On error语句一样简单。请注意,err.number列出了返回的错误代码,因此您可以添加逻辑来处理不同类型的错误。您的问题似乎缺乏详细信息,请在问题中添加一些措辞。请看一看,然后用我编辑并试图更好地解释的特定问题来框定您的问题。@user,我认为这些信息不会暴露于脚本本身。显然,脚本引擎知道当前的错误处理模式,但正在运行的脚本对此并不了解。谢谢!很不错的!这是第二个问题,你澄清了我的问题。我正在学习:)