web-dev-qa-db-fra.com

Quelle est la différence entre "end" et "exit sub" dans VBA?

Dans VBA, nous souhaitons parfois quitter le programme après qu'une condition soit remplie. Mais est-ce que j'utilise end ou exit sub?

20
Nicholas

Ceci est un peu en dehors du cadre de votre question, mais pour éviter toute confusion potentielle aux lecteurs débutants dans VBA: End et End Sub Ne sont pas identiques. Ils n'effectuent pas la même tâche.

End arrête l'exécution de TOUT code et vous devriez presque toujours utiliser Exit Sub (ou Exit Function, respectivement).

La fin interrompt TOUT exectution. Bien que cela semble tentant, cela efface également toutes les variables globales et statiques. ( source )

Voir aussi le dox MSDN pour le déclaration finale

Une fois exécutée, l'instruction End réinitialise toutes les variables de niveau module et toutes les variables locales statiques de tous les modules. Pour préserver la valeur de ces variables, utilisez plutôt l'instruction Stop. Vous pouvez ensuite reprendre l'exécution tout en préservant la valeur de ces variables.

Remarque L'instruction End arrête brutalement l'exécution de code, sans appeler l'événement Unload, QueryUnload ou Terminate, ni aucun autre code Visual Basic. Le code que vous avez placé dans les événements Unload, QueryUnload et Terminate des modulesforms etclass n'est pas exécuté. Les objets créés à partir de modules de classe sont détruits, les fichiers ouverts à l'aide de l'instruction Open sont fermés et la mémoire utilisée par votre programme est libérée. Les références d'objet détenues par d'autres programmes sont invalidées.

End Sub Et Exit Sub Ne sont pas non plus les mêmes. End Sub Ne peut pas être appelé de la même manière que Exit Sub, Car le compilateur ne le permet pas.

enter image description here

Cela signifie à nouveau que vous devez Exit Sub, Qui est un opération parfaitement légale :

Quitter Sub
Quitte immédiatement la procédure Sub dans laquelle elle apparaît. L'exécution continue avec l'instruction qui suit l'instruction qui a appelé la procédure Sub . Exit Sub ne peut être utilisé que dans le cadre d'une procédure Sub .

De plus, et une fois que vous avez compris le fonctionnement des procédures, évidemment, End Sub N'efface aucune variable globale. Mais cela fait efface les variables locales (Dim'd) :

End Sub
Termine la définition de cette procédure.

49
Vegard