VBScriptのエラーオブジェクト:基礎から応用まで詳しく解説

VBScriptは、Windows環境で多くの自動化やスクリプト作成に使用されているスクリプト言語です。

特に、システム管理やアプリケーションの簡単な操作を自動化するために用いられることが多いです。

しかし、プログラムの実行中には様々なエラーが発生することがあります。これらのエラーを効率的に処理するために、「エラーオブジェクト」が用いられます。

この記事では、VBScriptのエラーオブジェクトの基礎から応用までを詳しく解説します。また、最後に学んだ内容を確認するための演習問題とその解答例も紹介します。

エラーオブジェクトとは

VBScriptのエラーオブジェクトは、スクリプト実行中に発生したエラーに関する情報を保持する特別なオブジェクトです。

主に、以下のプロパティを通じてエラー情報を取得することができます。

  • Number: エラーの番号を示します。
  • Description: エラーの内容を説明する文字列です。
  • Source: エラーが発生した元のオブジェクトやスクリプトの部分を示します。
  • HelpContext: ヘルプファイル内の特定のエントリを示します。
  • HelpFile: エラーに関連するヘルプファイルのパスです。

エラーオブジェクトを活用することで、エラーが発生した場合でも、プログラムを停止させずに、適切な対処を行うことができます。

エラーオブジェクトの基本的な使い方

エラーオブジェクトを利用するには、通常「On Error Resume Next」や「On Error GoTo 0」を使用します。これらのステートメントは、エラーハンドリングの動作を制御するために用いられます。

On Error Resume Next

「On Error Resume Next」は、エラーが発生してもそのまま次のステートメントに処理を進めるための命令です。エラーが発生した場合、エラーオブジェクトにエラー情報が保存されます。

On Error Resume Next
Dim result
result = 10 / 0
If Err.Number <> 0 Then
    WScript.Echo "エラーが発生しました: " & Err.Description
    Err.Clear
End If

上記の例では、0での除算エラーが発生しますが、スクリプトは停止せず、エラーメッセージが表示されます。Err.Clearメソッドを使用してエラー情報をクリアすることができます。

On Error GoTo 0

「On Error GoTo 0」は、エラーハンドリングを元の状態に戻す命令です。これを使用すると、エラーが発生した場合にスクリプトが停止するようになります。

On Error Resume Next
Dim result
result = 10 / 0
If Err.Number <> 0 Then
    WScript.Echo "エラーが発生しました: " & Err.Description
    Err.Clear
End If
On Error GoTo 0
result = 10 / 0 'ここでエラーが発生し、スクリプトが停止します

エラーオブジェクトのプロパティの詳細

Numberプロパティ

Err.Numberプロパティは、発生したエラーの数値IDを返します。標準的なエラー番号やユーザー定義のエラー番号が返されることがあります。

On Error Resume Next
Dim result
result = 10 / 0
WScript.Echo "エラー番号: " & Err.Number 'エラー番号: 11 (0での除算エラー)

Descriptionプロパティ

Err.Descriptionプロパティは、エラーの内容を説明するテキストを返します。このプロパティは、ユーザーにエラー内容を通知する際に非常に有用です。

On Error Resume Next
Dim result
result = 10 / 0
WScript.Echo "エラー内容: " & Err.Description 'エラー内容: Division by zero

Sourceプロパティ

Err.Sourceプロパティは、エラーが発生した元のスクリプトやオブジェクトの名前を返します。これにより、エラーの発生元を特定することができます。

On Error Resume Next
Dim result
result = 10 / 0
WScript.Echo "エラーの発生元: " & Err.Source 'エラーの発生元: Microsoft VBScript runtime error

HelpContextおよびHelpFileプロパティ

Err.HelpContextとErr.HelpFileプロパティは、特定のエラーに関連するヘルプ情報を提供するために使用されます。これらは、ヘルプファイルが存在する場合にのみ有効です。

エラー処理の応用

エラーオブジェクトを使用して、より複雑なエラー処理を実装することができます。例えば、特定のエラーに対して異なる処理を行うことが可能です。

特定のエラーをキャッチして処理する

On Error Resume Next
Dim result
result = 10 / 0
Select Case Err.Number
    Case 11 'Division by zero
        WScript.Echo "ゼロによる除算が発生しました。"
    Case Else
        WScript.Echo "別のエラーが発生しました: " & Err.Description
End Select
Err.Clear

このように、エラー番号を用いて特定のエラーに対して異なる処理を行うことができます。

エラーログの記録

エラーが発生した場合に、その詳細をログファイルに記録することも可能です。

On Error Resume Next
Dim result
result = 10 / 0
If Err.Number <> 0 Then
    Dim fso, logFile
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set logFile = fso.OpenTextFile("error_log.txt", 8, True)
    logFile.WriteLine "エラー番号: " & Err.Number & " エラー内容: " & Err.Description & " 発生元: " & Err.Source
    logFile.Close
    Err.Clear
End If

まとめ

VBScriptのエラーオブジェクトは、スクリプト実行中に発生するエラーを効果的に管理するための強力なツールです。

エラーオブジェクトを正しく使用することで、プログラムの信頼性を高め、ユーザーにとって使いやすいスクリプトを作成することができます。

今回紹介した内容を実践し、ぜひ自身のスクリプト作成に役立ててください。

演習問題

学んだ内容を確認するために、以下の演習問題に挑戦してみましょう。

演習1: 基本的なエラーハンドリング

次のVBScriptコードを完成させ、0による除算エラーが発生した場合に「エラー: ゼロによる除算が発生しました」と表示されるようにしなさい。

また、エラーが発生しなかった場合には計算結果を表示してください。

Dim num1, num2, result
num1 = 10
num2 = 0

' ここにエラーハンドリングのコードを追加する

result = num1 / num2

If Err.Number = 0 Then
    WScript.Echo "結果: " & result
Else
    ' エラーメッセージを表示する
End If

' エラーをクリアする
演習1:解答例
Dim num1, num2, result
num1 = 10
num2 = 0

On Error Resume Next

result = num1 / num2

If Err.Number = 0 Then
    WScript.Echo "結果: " & result
Else
    WScript.Echo "エラー: ゼロによる除算が発生しました"
End If

Err.Clear

演習2: エラーログの記録

上記のコードを改良し、エラーが発生した場合にその詳細を「error_log.txt」というファイルに記録するようにしなさい。ログにはエラー番号、エラー内容、エラーの発生元を含めること。

演習2:解答例
Dim num1, num2, result
num1 = 10
num2 = 0

On Error Resume Next

result = num1 / num2

If Err.Number <> 0 Then
    Dim fso, logFile
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set logFile = fso.OpenTextFile("error_log.txt", 8, True)
    logFile.WriteLine "エラー番号: " & Err.Number & " エラー内容: " & Err.Description & " 発生元: " & Err.Source
    logFile.Close
    WScript.Echo "エラー: ゼロによる除算が発生しました。詳細はログを確認してください。"
Else
    WScript.Echo "結果: " & result
End If

Err.Clear