VBAの"end"と"exit sub"はどう違うのですか?

VBAで、ある条件が成立した後にプログラムを終了させたいことがあります。でも、そのときは endexit sub のどちらを使えばいいのでしょうか?

ソリューション

これは質問の範囲から少し外れますが、VBAの初心者の読者が混乱する可能性を避けるために: EndEnd Sub は同じではありません。EndEnd Sub`は同じものではありませんし、同じタスクではありません。

Endはすべてのコードの実行を停止させるので、ほとんどの場合Exit Sub(またはExit Function`) を使用する必要があります。

Endはすべての実行を停止させます。これは魅力的に聞こえますが、次のような効果もあります。 グローバル変数と静的変数 (ソース)

Endステートメント](https://msdn.microsoft.com/VBA/Language-Reference-VBA/articles/end-statement)については、MSDN doxも参照してください。

Endステートメントを実行すると、すべてのモジュールレベルの変数と、すべてのモジュールの静的なローカル変数がリセットされます。これらの変数の値を保持するには、代わりにStop` ステートメントを使用します。そうすれば、それらの変数の値を保持したまま、実行を再開することができます。

Note End 文は、Unload、QueryUnload、Terminate イベントや他の Visual Basic コードを呼び出すことなく、コードの実行を突然に停止します。フォームとクラスモジュールのUnload、QueryUnload、Terminateイベントに配置したコードは実行されません。クラスモジュールから作成されたオブジェクトは破棄され、Openステートメントを使用して開かれたファイルは閉じられ、プログラムが使用していたメモリは解放されます。他のプログラムが保持しているオブジェクトの参照は無効になります。

また、End SubExit Sub は同じものではありません。End SubExit Sub` と同じように呼び出すことはできませんが、それはコンパイラがそれを許さないからです。

[ここに画像の説明を入力][1]

これはまた、Exit Subをしなければならないことを意味しますが、これは完全に合法な操作です。

Exit Sub 登場するSubプロシージャを即座に終了させる。 実行は、その文の次の文から始まります。 Subプロシージャを呼び出します。Exit Sub は、Sub** の内部でのみ使用することができます。 プロシージャを使用します。

さらに、プロシージャがどのように動作するかの感触をつかんだら、明らかに End Sub はグローバル変数をクリアしません。しかし、ローカル (Dim'd) 変数のクリアは行います](https://msdn.microsoft.com/en-us/library/dz1z94ha.aspx)。

End Sub この手続き*の定義を終了します。

解説 (2)