一个转到错误处理程序是一个程序的顶部是良好的编程风格,应该是错误的处理对于大多数程序的最低金额。但是,它比检查可能导致错误的代码行之后的错误更不灵活。当在相当简单的过程中添加错误处理时,我使用On Error GoTo ...语句和例程底部的catch-all错误处理程序。
On Error GoTo procErrorHandler
If Not Exists(BaseDirectory + "\ARCHIVE") Then
MkDir BaseDirectory + "\ARCHIVE"
End If
intvalue1 = 12
intvalue2 = 0
intvalue3 = intvalue1/intvalue
ProcExit:
Exit Sub
procErrorHandler:
Call MsgBox("There was an error in the procedure. Error " & CStr(Err.Number) & ", " & Err.Description, vbExclamation, App.Title)
Resume ProcExit ' A chance to do any cleanup needed
我不是多转到语句的粉丝,因为它使代码难以阅读和遵守。在我正在执行几个步骤的过程中,我想返回一个更准确地描述代码出错的位置的错误,或者在可能有机会从错误中恢复并继续的情况下,我禁用全部错误处理类型并在关键步骤后检查Err.Number属性。如果我修改Matt的错误处理,我会以这种方式编写程序。
On Error Resume Next
If Not Exists(BaseDirectory + "\ARCHIVE") Then
MkDir BaseDirectory + "\ARCHIVE"
End If
' check for errors making the directory
If Err.Number <> 0 Then
Call MsgBox("Error making directory - " & Err.Number & vbCrLf & Err.Description, vbExclamation, App.Title)
End If
intvalue1 = 12
intvalue2 = 0
intvalue3 = intvalue1/intvalue
' check for errors getting intvalue3
If Err.Number <> 0 Then
Call MsgBox("Error doing arithmetic - " & Err.Number & vbCrLf & Err.Description, vbExclamation, App.Title)
End If
Exit Sub
来源
2012-01-27 18:02:03
jac
感谢您的解释! – JimDel 2012-01-27 16:47:39
+1。该文件解释这很清楚... ... http://msdn.microsoft.com/en-us/library/aa266173(v=vs.60).aspx – MarkJ 2012-01-27 16:53:09
错误 - 除零除只处理如果MkDir操作不会抛出错误 – 2012-01-27 16:58:22