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
?
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'instructionStop
. 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.
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.