概要
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
はシンプルながら、エラーハンドリングの信頼性を高めるために非常に重要な関数です。エラーハンドリングを適切に行い、システムの安定性を向上させるためにぜひ活用してください。