VBAで、ある条件が成立した後にプログラムを終了させたいことがあります。でも、そのときは end
と exit sub
のどちらを使えばいいのでしょうか?
これは質問の範囲から少し外れますが、VBAの初心者の読者が混乱する可能性を避けるために: End
と End Sub
は同じではありません。Endと
End 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 Sub
と Exit Sub
は同じものではありません。End Subは
Exit Sub` と同じように呼び出すことはできませんが、それはコンパイラがそれを許さないからです。
これはまた、Exit Sub
をしなければならないことを意味しますが、これは完全に合法な操作です。
Exit Sub 登場するSubプロシージャを即座に終了させる。 実行は、その文の次の文から始まります。 Subプロシージャを呼び出します。Exit Sub は、Sub** の内部でのみ使用することができます。 プロシージャを使用します。
さらに、プロシージャがどのように動作するかの感触をつかんだら、明らかに End Sub
はグローバル変数をクリアしません。しかし、ローカル (Dim'd) 変数のクリアは行います](https://msdn.microsoft.com/en-us/library/dz1z94ha.aspx)。
End Sub この手続き*の定義を終了します。