VBScript - エラー処理(その1)
スクリプトの実行中にエラーが起きると、通常、その時点でスクリプトは強制終了されてしまう。
しかし、On Error Resume Next ステートメントと On Error GoTo 0 ステートメントで囲まれたコードでは、エラーが発生してもプログラムがそのまま動き続けるようになる。
この仕組みを使って、エラー発生時に独自の処理を行うようにできる。
サンプルコード
次のスクリプトは100を0で割った結果を表示する。
しかし、0で割ることはできないため、実行時エラーになる。
Dim result
result = 100 / 0
MsgBox "100÷0=" & CStr(result)
先ほどのスクリプトに、エラー処理を組み込んだサンプルを以下に示す。
まず result = 100 / 0 の行でゼロ除算エラーが起きるので、そこを On Error で囲む。
これでエラーが起きても強制終了されないようになる。
そしてその次の行で Err.Number を判定する。
Err.Number には、正常時には 0、異常時には 0 以外が設定される。
なので 0 でなければエラー処理を行う。
Dim result
'ここからエラー処理が有効
On Error Resume Next
'ここでゼロ除算エラーが起きる
result = 100 / 0
'計算エラーだった場合はエラーの詳細を表示してスクリプトを終了
If Err.Number <> 0 Then
MsgBox "Error # " & CStr(Err.Number) & " was generated by " & Err.Source & vbCrLf & vbCrLf & Err.Description, _
vbOkOnly + vbCritical, _
"計算エラー"
WScript.Quit 1
End If
'ここまでエラー処理が有効
On Error GoTo 0
'計算結果を表示(と言っても、このサンプルではここに到達することはない)
MsgBox "100÷0=" & CStr(result)
↓ 実行結果
ゼロ除算エラーが起きても強制終了されず、コードで指定したメッセージボックスが表示される。
解説
まず result = 100 / 0 の行でゼロ除算エラーが起きるので、その前に On Error Resume Next を書く。
これで計算中にエラーが起きても強制終了されないようになる。
On Error Resume Next '← ここからエラー処理を有効化
result = 100 / 0
続けて、計算の次の行にエラー有無の判定とエラー処理を書く。
エラー有無は Err.Number で判定できる。
Err.Number には処理結果が正常なら 0 が、異常なら 0 以外が設定される。
なので Err.Number ≠ 0 だったらエラー処理を行うようにする。
今回のエラー処理は、エラーの詳細をメッセージボックスで表示して、スクリプトを終了するようにしている。
If Err.Number <> 0 Then
MsgBox "Error # " & CStr(Err.Number) & " was generated by " & Err.Source & vbCrLf & vbCrLf & Err.Description, _
vbOkOnly + vbCritical, _
"計算エラー"
WScript.Quit 1
End If
最後に On Error GoTo 0 を書いて、エラー処理を無効化する。
これを書き忘れるとスクリプトの暴走(エラーが起きても動き続ける)につながるので気を付けること。
On Error GoTo 0