VBScriptのOn Error ステートメントとは?エラー処理の基本と応用

プログラムを書いていると、予期しないエラーに遭遇することがあります。

エラーが発生した場合、プログラムが突然停止してしまうと、ユーザーに不便をかけるだけでなく、システムに大きな影響を与える可能性があります。

これを防ぐために、プログラミング言語にはエラー処理のためのメカニズムが用意されています。

VBScriptでもエラー処理を行うための方法が存在し、その中でも代表的なものが「On Error ステートメント」です。

本記事では、VBScriptにおける「On Error ステートメント」の使い方について詳しく解説します。

基本的な使い方から、応用的な利用方法までをカバーし、最後には学んだ内容を確認するための演習問題も提供します。

On Error ステートメントとは?

On Error ステートメントは、VBScriptでエラーが発生した際にどのようにプログラムが動作するかを制御するための文です。

エラーが発生した場合、そのエラーを無視するのか、エラー処理用のコードに処理を渡すのかを指定することができます。

VBScriptのOn Error ステートメントには、主に以下の2つのオプションがあります:

  1. On Error Resume Next
    エラーが発生しても、次の行のコードを続行します。これにより、エラーによるプログラムの中断を防ぐことができます。
  2. On Error GoTo 0
    エラー処理を無効にし、標準のエラー処理に戻します。この設定では、エラーが発生するとプログラムが停止します。

On Error Resume Next の使い方

On Error Resume Next を使用すると、エラーが発生した場合でもプログラムを続行させることができます。以下はその基本的な使い方の例です。

On Error Resume Next

Dim num1, num2, result

num1 = 10
num2 = 0

result = num1 / num2 ' ここでエラーが発生する(ゼロで除算)

If Err.Number <> 0 Then
    WScript.Echo "エラーが発生しました: " & Err.Description
    Err.Clear ' エラー情報をクリア
Else
    WScript.Echo "結果: " & result
End If

このスクリプトでは、num2 に0を設定し、num1 をnum2 で除算しています。

この操作はゼロ除算エラーを引き起こしますが、On Error Resume Next が有効になっているため、プログラムは中断せずに続行します。

エラーが発生した場合には、Err.Number が0以外の値となり、エラーメッセージが表示されます。

On Error GoTo 0 の使い方

On Error GoTo 0 は、エラー処理を無効にするステートメントです。この設定では、エラーが発生した場合、プログラムが停止し、標準のエラーメッセージが表示されます。

On Error Resume Next

Dim num1, num2, result

num1 = 10
num2 = 0

result = num1 / num2 ' ここでエラーが発生する(ゼロで除算)

If Err.Number <> 0 Then
    WScript.Echo "エラーが発生しました: " & Err.Description
    Err.Clear ' エラー情報をクリア
End If

On Error GoTo 0 ' エラー処理を無効にする

result = num1 / num2 ' ここで再びエラーが発生する

上記の例では、On Error GoTo 0 が設定されているため、2回目のゼロ除算が行われた時点でプログラムが停止します。

On Error ステートメントの応用

基本的なエラー処理に加えて、On Error ステートメントを使用して、さらに高度なエラー処理を行うこともできます。

例えば、エラーが発生した際に特定の処理を実行したり、ログを記録したりすることが可能です。

エラー処理の分岐

複数の処理をエラーハンドリングをしながら行う場合、エラーが発生したかどうかによって処理を分岐させることができます。

On Error Resume Next

Dim fileSystem, file

Set fileSystem = CreateObject("Scripting.FileSystemObject")
Set file = fileSystem.OpenTextFile("C:\example.txt", 1) ' 存在しないファイルを開く

If Err.Number <> 0 Then
    WScript.Echo "ファイルが開けません: " & Err.Description
    Err.Clear ' エラー情報をクリア
Else
    WScript.Echo "ファイルを正常に開きました"
    file.Close
End If

On Error GoTo 0 ' エラー処理を無効にする

この例では、存在しないファイルを開こうとした際にエラーが発生しますが、そのエラーを検知して適切なメッセージを表示することができます。

ログの記録

エラーが発生した場合に、その内容をログとして記録することで、後から問題の原因を追跡しやすくなります。

On Error Resume Next

Dim fileSystem, file, logFile, num1, num2, result

Set fileSystem = CreateObject("Scripting.FileSystemObject")
Set logFile = fileSystem.CreateTextFile("error_log.txt", True)

num1 = 10
num2 = 0

result = num1 / num2 ' ここでエラーが発生する(ゼロで除算)

If Err.Number <> 0 Then
    logFile.WriteLine "エラー番号: " & Err.Number & " - " & Err.Description & " (" & Now & ")"
    Err.Clear ' エラー情報をクリア
End If

logFile.Close

On Error GoTo 0 ' エラー処理を無効にする

上記のスクリプトでは、エラーが発生した場合にerror_log.txtファイルにエラー情報を記録します。これにより、エラーの発生状況を後から確認することができます。

On Error ステートメントの注意点

On Error ステートメントは非常に便利な機能ですが、使い方を誤ると、逆にプログラムのデバッグが困難になることがあります。

例えば、エラーを無視してプログラムが続行してしまうと、意図しない結果を生む可能性があります。そのため、エラー処理の設計は慎重に行う必要があります。

特に以下の点に注意しましょう:

  • エラー処理が必要な箇所を特定し、適切な対応を行うこと。
  • On Error Resume Next の使用範囲を必要最低限に抑えること。
  • エラーが発生した場合は、必ずErr.Clearでエラー情報をクリアすること。

演習問題

以下の問題を解いて、On Error ステートメントの理解を深めてください。

演習1

次のコードでは、エラーが発生する箇所があります。このエラーを適切に処理し、エラーメッセージを表示するように修正してください。

Dim num1, num2, result

num1 = 20
num2 = 0

result = num1 / num2

WScript.Echo "計算結果: " & result
演習1:解答例
On Error Resume Next

Dim num1, num2, result

num1 = 20
num2 = 0

result = num1 / num2

If Err.Number <> 0 Then
    WScript.Echo "エラーが発生しました: " & Err.Description
    Err.Clear
Else
    WScript.Echo "計算結果: " & result
End If

演習2

ファイルを読み込む処理を行う以下のコードがあります。このコードにエラー処理を追加し、ファイルが存在しない場合にエラーメッセージを表示するように修正してください。

Dim fileSystem, file

Set fileSystem = CreateObject("Scripting.FileSystemObject")
Set file = fileSystem.OpenTextFile("C:\nonexistent.txt", 1)

WScript.Echo "ファイルを読み込みました。"
file.Close
演習2:解答例
On Error Resume Next

Dim fileSystem, file

Set fileSystem = CreateObject("Scripting.FileSystemObject")
Set file = fileSystem.OpenTextFile("C:\nonexistent.txt", 1)

If Err.Number <> 0 Then
    WScript.Echo "ファイルが開けません: " & Err.Description
    Err.Clear
Else
    WScript.Echo "ファイルを読み込みました。"
    file.Close
End If

On Error GoTo 0

まとめ

VBScriptのOn Error ステートメントは、エラーが発生した際のプログラムの動作を制御するために非常に重要な機能です。

基本的な使い方を理解することで、エラーが発生してもプログラムを中断させず、適切な処理を行うことができます。

エラー処理はプログラムの信頼性を向上させるために不可欠な要素ですので、しっかりと身に付けておきましょう。

この記事で学んだ内容をもとに、ぜひ実際にコードを書いて演習問題に取り組んでみてください。