概要

Err.Clear関数は、VBA(Visual Basic for Applications)においてエラーステータスをリセットするための関数です。Errオブジェクトのエラーステータスにはエラー番号やエラーメッセージなどの情報が含まれていますが、エラーハンドリングの完了後や次のエラー処理に備えてこのステータスをクリアする必要がある場合があります。その際にErr.Clearを使用することで、Errオブジェクトの状態を初期化できます。

構文

Err.Clearはメソッドとして呼び出され、特別な引数は必要ありません。

Err.Clear

使用方法

基本的な使い方

Err.Clearは通常、On Errorステートメントと組み合わせて使用されます。エラーハンドリングが完了した後にErr.Clearを呼び出して、エラーステータスをリセットします。

Sub SampleErrClear()
    On Error GoTo ErrorHandler  ' エラーハンドラーに移動する設定
    ' 故意にゼロ除算エラーを発生させる
    Dim x As Integer
    x = 1 / 0
    Exit Sub  ' 正常終了時はエラーハンドラーを飛ばす
ErrorHandler:
    ' エラーメッセージを表示
    MsgBox "エラーが発生しました: " & Err.Description
    ' エラーステータスをリセット
    Err.Clear
End Sub

この例では、エラーメッセージが表示された後にErr.Clearが呼び出され、Errオブジェクトの状態がリセットされます。これにより、次にエラーが発生した際に正しいエラー情報が取得できます。

応用例 - 複数エラー処理の実装

Err.Clearは複数のエラー処理を行う際に非常に役立ちます。各エラー処理の後にErr.Clearを使用することで、新しいエラーが発生したときに前のエラー情報が残らないようにできます。

Sub MultipleErrorHandling()
    On Error GoTo FirstErrorHandler
    ' 最初のエラーを発生させる
    Dim y As Integer
    y = 1 / 0
    Exit Sub
FirstErrorHandler:
    MsgBox "最初のエラーが発生しました: " & Err.Description
    Err.Clear  ' 最初のエラーステータスをクリア
    ' 次のエラー処理
    On Error GoTo SecondErrorHandler
    Dim z As Integer
    z = "abc"  ' 型の不一致エラーを発生
    Exit Sub
SecondErrorHandler:
    MsgBox "2番目のエラーが発生しました: " & Err.Description
    Err.Clear  ' 2番目のエラーステータスをクリア
End Sub

この例では、最初のゼロ除算エラー処理の後、Err.Clearが呼び出されることで次のエラーハンドリングに影響を与えません。これにより、それぞれのエラーに対して適切な処理が行えます。

エラーの再発生を防ぐための使用

Err.Clearは、同じエラーが再度発生するのを防ぎたい場合にも使用します。エラーハンドリングの後に必ずErr.Clearを使っておくことで、意図しないエラーハンドリングの繰り返しを防ぐことができます。

Sub PreventErrorLoop()
    On Error GoTo ErrorHandler
    ' エラー発生のコード
    Dim w As Integer
    w = 1 / 0
    Exit Sub
ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description
    ' エラー処理をクリアしてループを防ぐ
    Err.Clear
    Resume Next  ' 次の行から再開
End Sub

このコードでは、Resume Nextを使ってエラー発生後に次の処理を継続させていますが、Err.Clearを挟むことで、エラーステータスがクリアされ、再度のエラーループを防いでいます。

備考

  • Err.Clearを使用しないと、前回のエラーステータスが残り、次のエラーハンドリングに影響を及ぼすことがあります。
  • Err.Clearはエラーハンドリングルーチン内で使うのが一般的ですが、必要に応じてルーチンの終了時にも使うと良いでしょう。
  • クリアした後も、Err.Numberが0に戻らなければ、再度エラーステータスを確認して他のエラーハンドリングを実行する必要があります。 Err.Clearはシンプルながら、エラーハンドリングの信頼性を高めるために非常に重要な関数です。エラーハンドリングを適切に行い、システムの安定性を向上させるためにぜひ活用してください。