Обработчик ошибок - Exit Sub vs. End Sub
Почему я хочу выйти из обработчика ошибок (после обработки) с помощью Exit Sub вместо того, чтобы просто перейти к End Sub?
Я уверен, что это просто. Я просто не понимаю. Спасибо за любую помощь.
Пример:
Public Sub SubA()
On Error Goto ProcError
''# other code
MsgBox FuncA()
ProcExit:
Exit Sub
ProcError:
MsgBox Err.Description
Resume ProcExit
End Sub
Ответы
Ответ 1
Ваш ярлык ProcExit - это ваше место, где вы освобождаете все ресурсы, произошла ли ошибка или нет. Например:
Public Sub SubA()
On Error Goto ProcError
Connection.Open
Open File for Writing
SomePreciousResource.GrabIt
ProcExit:
Connection.Close
Connection = Nothing
Close File
SomePreciousResource.Release
Exit Sub
ProcError:
MsgBox Err.Description
Resume ProcExit
End Sub
Ответ 2
Обычно, если у вас есть подключения к базе данных или другие объявленные объекты, независимо от того, использовались они безопасно или созданы до вашего исключения, необходимо будет очистить (удалить), а затем вернуть код обработки ошибок обратно в точку входа ProcExit вы делаете свою сборку мусора в обоих случаях.
Если вы откажетесь от своей процедуры, упав на Exit Sub, вы рискуете иметь яркое наращивание экземпляров объектов, которые просто сидят в вашей программной памяти.