DimPos писал(а):Конечно многое зависит от ошибки, но в общем случае
Sub()
On Error Goto Err
'Код процедуры
Exit sub'если ошибок не было - выход из процедуры
Err:
'Сюда включаешь свой обработчик ошибки
MsgBox "Ошибка"
End Sub
RayShade писал(а):Есть выход - можно обрабатывать ошибки только в главной процедуре, которая вызывает все остальные. Для этого, правда, придется вохможно, немного переделать структуру программы, но это того стоит - дело в том, что все возхникающие ошиюки из процедур передаются на уровень, откуда эти процедуры вызваны.
Так что в таком случае достаточно будет одной процедуры с обработкой.
sub main
on error goto hdl
mysub1
mysub2
exit sub
hdl:
msgbox "Error " & err.description
end sub
RayShade писал(а):
ну так примерно. Вызывающая суба будет перехватывать ошибки из дочерних.
zafon писал(а):Ведь дальнейшее продолжение работы програмы после ошибки может привести к непредвиденым результатам , а порой к катострофическим последствиям .
Sub Test()
On Error GoTo Handler
'...........
'...........
'...........
Exit Sub
Handler:
Call MySpecialErrorLogSub("Test", Err.Number, Err.Description)
End Sub
Function TestNew()
On Error GoTo Handler
'...........
'...........
'...........
Exit Function
Handler:
Call MySpecialErrorLogSub("TestNew", Err.Number, Err.Description)
End Function
Dim NameSubError as String
Public Sub ShowError()
Open App.Path & "\error_log.txt" For Append As #999
Print #999, Date & " | " & Time & " - " & " Sub '" & NameSubError & "' ( " & CStr(Err.Number) & " - " & Err.Description & " ) ."
Close #999
Dim Ret As Integer
Ret = MsgBox("My Program ERROR : " & vbCrLf & CStr(Err.Number) & " - " & Err.Description & "." & vbCrLf & "End Program. Sorry...", vbOKOnly + vbCritical + vbApplicationModal, "Error in Sub- '" & NameSubError & "'")
End
End Sub
Private Sub MySub1()
On Error Goto ShowMesage
'..........
'My Code.....
'..........
Exit Sub
ShowMesage:
NameSubError ="MySub1"
Call ShowError
End Sub
Private Sub MySub2()
On Error Goto ShowMesage
'..........
'My Code.....
'..........
Exit Sub
ShowMesage:
NameSubError ="MySub2"
Call ShowError
End Sub
Private Sub MySub3()
On Error Goto ShowMesage
'..........
'My Code.....
'..........
Exit Sub
ShowMesage:
NameSubError ="MySub3"
Call ShowError
End Sub
Так что в таком случае достаточно будет одной процедуры с обработкой.
Ведь дальнейшее продолжение работы програмы после ошибки может привести к непредвиденым результатам , а порой к катострофическим последствиям.
Sub fun_gluk()
On Error Rusume Next
For i=1 to 2
'какой-то код
Next
'дальше можно не писать
Pantalone писал(а):Посоветуйте только Адд-Ин, позволяющий вставить в начале функции/процедуры строчку On Erro Goto Handler, а в конце функции Exit Function/Sub, саму метку, и код который я задам в шаблоне, обязательно чтобы она в этом коде добавляла имя обрабатываемой функции.
Сейчас этот форум просматривают: AhrefsBot, SemrushBot, Yandex-бот и гости: 13