我仍然在寻求更多地理解错误处理。
这是fmsinc.com发给我的一些代码。我很喜欢它,所以为什么我之前没有看到这种事情。我正在考虑重新使用我的一些代码来使用这种技术。我的问题是我应该吗?这样做是好的做法吗?
下面的代码应该有助于CodeB将其错误或状态推迟到CodeA,它可能有助于在CodeB过程中简单地捕获错误,然后将其返回到CodeA子/函数。
下面的示例也允许CodeB过程完成而不管遇到的错误(如果有的话),并将应用程序的响应推迟到CodeA过程。
Public Sub CodeB(perrO As ErrObject)
Dim i As Integer
On Error Resume Next
i = 100 / 0
Set perrO = err
' code here could continue to run yet
' the error will still be sent back in perr0
End Sub
Private Sub CodeA()
' This represents the top level code that deals with the user
Dim errO As ErrObject
on error goto PROC_ERR
' lots of code here
Call CodeB(errO)
If errO.Number <> 0 Then
MsgBox "Error" & " " & errO.Number & " " & "has occured."
' You might have done an err.raise here instead.
End If
PROC_EXIT:
Exit Sub
PROC_ERR:
' GlobalErrorHandler to log the error (text file, database table, email)
Resume PROC_EXIT
' GoTo PROC_EXIT Should not be used as this does no do Err.Clear
' and leaves the "on error goto PROC_ERR" active, potentially
End Sub
我编写了其他在CodeB中使用Err.Raise的代码,以便CodeA可以捕获它以响应错误。如果您查看我在此处提交的代码https://codereview.stackexchange.com/questions/94415/try-catch-statement-in-vba-using-the-standard-vba-error-handling-statements
,这会导致您可能会感兴趣的各种问题上面的代码解决了这些问题并且更加简单。即因为:
我认为顶级代码是有用且良好的做法。你觉得怎么样?
我怀疑有人会说当你可以使用自己的时候为什么要回到errObject ...
我觉得此刻需要进行脑叶切除术。错误处理是我的头脑....最后一个问题我在哪里可以获得一个?
哈维