Was ist der Unterschied zwischen "end" und "exit sub" in VBA?

8

In VBA möchten wir manchmal das Programm beenden, nachdem eine Bedingung erfüllt ist. Aber verwende ich end oder exit sub ?

    
Nicholas 08.04.2016, 05:03
quelle

1 Antwort

19

Dies ist ein bisschen außerhalb des Bereichs Ihrer Frage, aber um mögliche Verwirrung für Leser, die neu in VBA sind, zu vermeiden: End und End Sub sind nicht gleich. Sie führen nicht die gleiche Aufgabe aus.

End stoppt die Ausführung von ALLEN Code und Sie sollten fast immer Exit Sub (bzw. Exit Function ) verwenden.

  

End hält ALLE Ausführung an. Während dies verlockend klingt, wird es auch gelöscht   alle globalen und statischen Variablen. ( Quelle )

Siehe auch den MSDN-Dox für die End-Anweisung

  

Bei der Ausführung setzt die Anweisung End alle Variablen auf Modulebene und alle statischen lokalen Variablen in allen Modulen zurück. Um den Wert dieser Variablen beizubehalten, verwenden Sie stattdessen die Anweisung Stop . Sie können die Ausführung dann fortsetzen, während Sie den Wert dieser Variablen beibehalten.

     

Hinweis: Die Anweisung End stoppt die Codeausführung abrupt, ohne das Unload-, QueryUnload- oder Terminate-Ereignis oder einen anderen Visual Basic-Code aufzurufen. Code, den Sie in die Unload-, QueryUnload- und Terminate-Ereignisse von Forms und Klassenmodulen platziert haben, wird nicht ausgeführt. Objekte, die aus Klassenmodulen erstellt wurden, werden gelöscht, Dateien, die mit der Open-Anweisung geöffnet wurden, werden geschlossen, und der von Ihrem Programm verwendete Speicher wird freigegeben. Objektverweise von anderen Programmen werden ungültig gemacht.

Auch ist End Sub und Exit Sub gleich. End Sub kann nicht auf die gleiche Weise aufgerufen werden wie Exit Sub , weil der Compiler dies nicht erlaubt.

Das bedeutet wiederum, dass Sie Exit Sub haben müssen, was ein vollkommen legaler Vorgang ist:

  

Exit Sub
  Beendet sofort die Sub-Prozedur, in der es angezeigt wird.   Die Ausführung wird mit der Anweisung fortgesetzt, die der Anweisung folgt, dass   nannte das Verfahren Sub . Exit Sub kann nur innerhalb eines Sub verwendet werden   Verfahren.

Zusätzlich, und sobald Sie das Gefühl dafür bekommen, wie Prozeduren funktionieren, löscht End Sub offensichtlich keine globalen Variablen. Aber es löscht lokale (Dim'd) Variablen :

  

End Sub
  Beendet die Definition von dieser Prozedur .

    
Vegard 08.04.2016, 07:01
quelle

Tags und Links