Подтвердить что ты не робот

Обработчик ошибок - 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
4b9b3361

Ответ 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, вы рискуете иметь яркое наращивание экземпляров объектов, которые просто сидят в вашей программной памяти.