怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

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