22 votes

Gestionnaire d'erreurs - Exit Sub vs. End Sub

Pourquoi voudrais-je sortir d'un gestionnaire d'erreur (après traitement) avec un Exit Sub au lieu de le laisser aller jusqu'au End Sub ?

Je suis sûr que c'est simple. Mais je ne comprends pas. Merci de votre aide.

Ejemplo:

Public Sub SubA()
On Error Goto ProcError

  ''# other code  
  MsgBox FuncA()

ProcExit:  
  Exit Sub

ProcError:  
  MsgBox Err.Description  
  Resume ProcExit
End Sub

26voto

AngryHacker Points 18835

Votre étiquette ProcExit est l'endroit où vous libérez toutes les ressources, qu'une erreur se soit produite ou non. Par exemple :

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

1voto

Phil.Wheeler Points 9968

Typiquement, si vous avez des connexions de base de données ou d'autres objets déclarés qui, qu'ils soient utilisés en toute sécurité ou créés avant votre exception, devront être nettoyés (éliminés), le renvoi de votre code de gestion d'erreur au point d'entrée ProcExit vous permettra d'effectuer votre ramassage d'ordures dans les deux cas.

Si vous quittez votre procédure en tombant sur Exit Sub, vous risquez d'avoir une accumulation d'objets instanciés qui restent dans la mémoire de votre programme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X