A GoTo обработчик ошибок, вершина процедуры является хорошим стилем программирования и должна быть минимальным количеством обработки ошибок для большинства процедур.Однако он менее гибок, чем проверка ошибок после строк кода, которые могут вызвать ошибку.При добавлении обработки ошибок в довольно простую процедуру я использую оператор On Error GoTo ... и универсальный обработчик ошибок в нижней части процедуры.
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
Яне фанат множества GoTo операторов, потому что это затрудняет чтение и следование коду.В процедуре, в которой я выполняю несколько шагов и хочу вернуть ошибку, которая более точно описывает, где произошел сбой кода, или в ситуации, когда у меня может быть шанс исправить ошибку и продолжить, я отключаю перехваттип обработки ошибок и проверьте свойство Err.Number после критических шагов.Если бы я изменил обработку ошибок Мэтта, я бы запрограммировал эту процедуру следующим образом.
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