はじめに
ひらちんです。
VBAのプログラムを強制的に終了する命令の紹介です(^o^)
エラーの分岐で終了點せたかったり、ループの中の条件によってそのプロシージャを終了したかったり、色々な場面で使います。
Exitステートメント
”Exit”の後に、終わらせたいステートメント(SubとかFunctionとかForとか)を記述することで、その命令から抜けることが出来ます。
例えば、次のコードのように”呼び出されるプロシージャ”を呼び出した場合、”呼び出されるプロシージャ”の中の”Exit Sub”に到達した時点で、”呼び出されるプロシージャ”の実行は終了しますので、「Debug.Print “ここまで来たよ”」は実行されずに”sample”に戻ります。
Sub sample()
Call 呼び出されるプロシージャ
Debug.Print "終了"
End Sub
Sub 呼び出されるプロシージャ()
Exit Sub 'このSubプロシージャを抜ける
Debug.Print "ここまで来たよ"
End Sub
どのような動きになるか確認します。
“sample”プロシージャを実行します。
For Nextステートメントの中で、「ある条件に合致したらその後はもう処理しなくてい良いよ」みたいになときには、”Exit For“で抜けることが出来ますね。
Sub sample()
Dim i As Long
For i = 1 To 1000
If i = 10 Then
Debug.Print i & "になったよ!"
Exit For ' 10になったらFor Nextを抜ける
End If
Debug.Print "今" & i & "だよ。"
Next
End Sub
”i”が10になったら、”Exit For”で抜けていることがわかりますね(^o^)
For Nextでデータの検索をする場合なんかに、見つかったあとはもう処理しなくて良ければ、このように”Exit For”でで抜けてしまえば、時間の短縮にもなります。
Endステートメント
終わらせたいところで”End”って書くだけです。
なんか怖い響きですよねw
”End”は実行中にプロシージャを終了させるだけじゃなく、実行中のプログラム全体を終了します。
Exitステートメントでやったサンプルコードを、”End”に修正して試してみましょう。
Sub sample()
Call 呼び出されるプロシージャ
Debug.Print "終了"
End Sub
Sub 呼び出されるプロシージャ()
End 'Exit SubをEndに修正
Debug.Print "ここまで来たよ"
End Sub
“sample”プロシージャを実行します。
”End”でプログラム全体の実行が終了しているので、”sample”にも戻って無いことが分かりますね。
ちなみに。”End”で終了すると、”Static”で宣言した静的変数の値もクリアされますのでご注意ください
以上、プログラムを強制終了する方法でした(^o^)
コメント