概要
Err.Number
プロパティは、Excel VBAで発生したエラーの番号を取得するためのプロパティです。VBAプログラム中でエラーが発生した際に、そのエラーを特定し、適切な対処を行うために使用されます。Err.Number
は、エラーハンドリングを実装する際に非常に重要な要素で、特定のエラー番号に基づいてエラー処理の流れを制御することが可能です。
構文
Err.Number
説明
Err.Number
プロパティは、VBAで実行時エラーが発生したときに、そのエラーの番号を返します。この番号を使用して、エラーの種類を特定し、エラーメッセージの表示や適切な修正手順を提供することができます。Err.Number
はエラーハンドリングの一環として、On Error
ステートメントとともに使われ、発生したエラーに応じた処理を行うための指標となります。
-
エラーの識別
Err.Number
によって取得できるエラー番号は、標準的なVBAのエラー番号のほか、ユーザー定義のエラー番号も含まれます。 -
エラーハンドリングの流れ
Err.Number
を活用することで、特定のエラーに対して異なる処理を行うエラーハンドリングの実装が可能です。 -
エラーのリセット
エラー処理が完了したら、
Err.Clear
メソッドでエラー情報をクリアしておくことが重要です。
使用例
基本的なエラー処理の例
Sub BasicErrorHandling()
On Error GoTo ErrorHandler ' エラーハンドリングの開始
Dim result As Double
result = 10 / 0 ' ゼロ除算エラーを発生させる
Exit Sub ' 正常終了
ErrorHandler:
MsgBox "エラー番号: " & Err.Number & vbCrLf & "エラーメッセージ: " & Err.Description ' エラー番号とメッセージを表示
Err.Clear ' エラー情報をクリア
End Sub
特定のエラー番号に応じた処理
Sub SpecificErrorHandling()
On Error GoTo ErrorHandler
Dim fileNumber As Integer
fileNumber = FreeFile
Open "C:\nonexistentfile.txt" For Input As #fileNumber ' 存在しないファイルを開く
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 53 ' ファイルが見つからないエラー
MsgBox "ファイルが見つかりません。パスを確認してください。"
Case Else
MsgBox "予期しないエラーが発生しました。エラー番号: " & Err.Number
End Select
Err.Clear
End Sub
ユーザー定義エラーの処理
Sub UserDefinedError()
On Error GoTo ErrorHandler
Dim userAge As Integer
userAge = -5 ' 不正な年齢を代入
If userAge < 0 Then
Err.Raise Number:=9999, Description:="年齢は0以上でなければなりません。" ' ユーザー定義のエラーを発生させる
End If
Exit Sub
ErrorHandler:
If Err.Number = 9999 Then
MsgBox "ユーザー定義エラー: " & Err.Description
Else
MsgBox "エラーが発生しました。エラー番号: " & Err.Number
End If
Err.Clear
End Sub
エラーハンドリングでのリソース解放
Sub ErrorHandlingWithCleanup()
On Error GoTo ErrorHandler
Dim fileNumber As Integer
fileNumber = FreeFile
Open "C:\data.txt" For Output As #fileNumber ' ファイルを開く
' 何らかの処理
Close #fileNumber ' ファイルを閉じる
Exit Sub
ErrorHandler:
If Err.Number <> 0 Then
MsgBox "エラーが発生しました。エラー番号: " & Err.Number
End If
On Error Resume Next
Close #fileNumber ' エラーが発生した場合でもファイルを閉じる
Err.Clear
End Sub
備考
-
Err.Number
のリセットエラーハンドリングが終了したら、
Err.Clear
を使用してエラー情報をリセットすることが重要です。これにより、後続の処理に影響を与えないようにします。 -
エラーハンドリングの強化
Err.Number
を活用することで、発生したエラーごとに異なる処理を行えるため、ユーザーフレンドリーなエラーハンドリングが可能になります。 -
On Error Resume Next
の使用特定のエラーを無視したい場合は、
On Error Resume Next
を使用して処理を続行することもできます。ただし、これを多用するとエラーが見逃される可能性があるため、慎重に使用することが望ましいです。
Err.Number
プロパティは、VBAでのエラーハンドリングをより効果的にするための重要な要素です。適切に使用することで、エラーに対して柔軟かつ正確な対応が可能となり、プログラムの信頼性とユーザーエクスペリエンスを向上させることができます。