Sub・Functionプロシージャを強制的に終了させるコードとEndステートメントについて
'Subプロシージャを終了する
Exit Sub
'Functionプロシージャを終了する
Exit Function
Subプロシージャを終了させるには「Exit Sub」を使用し、Functionプロシージャを終了する場合は「Exit Function」を使用します
プロシージャの種類を「Exit」の後に記載すればいいだけですね
Exit Subの動きについて
画像の動きを確認してください
「Exit Sub」の動きですが、このコードが実行された時点でSubプロシージャは終了するので、「MsgBox」以下の処理は実行されていません
また、「End Sub」にも移動はしません、これと同じ意味になるためです
主には、処理の実行前に条件が整っているかを調べて整っていなければ終了させる場合に使用します
Exit FunctionとEndについて
画像の動きを少し、大きくしてみます
この画像であれば、「Exit Function」の動きが分かります
処理テストAにて、MsgBoxの本文引数として処理テストCのFunctionが呼び出されています
このFunctionプロシージャは、ただ「100」を返すだけの関数ですが、その代入前に「Exit」が実行されるためLong型の初期値「0」が返されてメッセージに表示されます
また処理テストBがその後、Callにより実行されています
この処理テストBには、例にはない「End」というコードが記載されています
この「End」というコードは、実行された時点でVBAの処理が全て強制終了するコードです
そのため、呼び出し元の処理テストAに戻らず、処理テストBの時点で終了しています
このコードが実行された時点で処理はもちろん、変数も全て解放され、メモリ内で開いているファイルも全て閉じられます
完全に処理が終了する形になります
さらに、このコードはイベントさえも実行させません
ユーザーフォームで「QueryClose」イベント(フォームの終了時に発生するイベント)を作成していても、そのイベントが実行されずに終了します
全てまっさらで、逆にせいせいするね
なんて事を言ってられない程、まっさらにしてしまうのでこのコードは恐いです
Excelの強制終了コードと同じレベルの強制力なので、使用することはほぼあり得ないと思いますが、使用するような場面に遭遇したら逃げ出してください
使用しないようになんとか頑張ってください、ここまで全ての終了をあいまいにさせることは非常に危険です
処理を終了させることも、変数を開放することも、開いたファイルを閉じることも専用のコードがちゃんとあります
そちらを使用して、しっかりそれぞれを終了させてください
それでも全く利用場面がない訳ではありません、利用場面の解説は以下の記事にあります