web-dev-qa-db-fra.com

Gestionnaire d'erreurs - Exit Sub vs. End Sub

Pourquoi voudrais-je sortir d'un gestionnaire d'erreurs (après la manipulation) avec un Sub de sortie au lieu de simplement le laisser aller au Sub End?

Je suis sûr que c'est simple. Je ne comprends tout simplement pas. Merci pour toute aide.

Exemple:

Public Sub SubA()
On Error Goto ProcError

  ''# other code  
  MsgBox FuncA()

ProcExit:  
  Exit Sub

ProcError:  
  MsgBox Err.Description  
  Resume ProcExit
End Sub
20
RNamo

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
26
AngryHacker

En règle générale, si vous avez des connexions à une 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 retour de votre code de gestion des erreurs au point d'entrée ProcExit vous permettra de faire votre ramasse-miettes dans les deux cas.

Si vous abandonnez votre procédure en tombant sur Quitter Sub, vous risquez d'avoir une accumulation dégoûtante d'objets instanciés qui ne font que rester dans la mémoire de votre programme.

1
Phil.Wheeler