こんにちは、なかぜんです。AccessでVBAを使っていると、思わぬところでエラーが出て「えっ、何これ?」って戸惑うこと、ありますよね。
今回は、そんなときのための「エラーハンドリング」の基本について、初心者の方にもわかりやすく解説していきます。
エラー処理を覚えると、「突然止まる」「意味不明なメッセージ」から解放され、スムーズに開発が進むようになりますよ!
エラーハンドリングとは?
「エラーハンドリング」とは、プログラム実行中に発生するエラーを適切に処理することです。たとえば、存在しないファイルを開こうとしたり、0で割ったりするとエラーになりますよね。
そんな時に、VBAではOn Errorステートメントを使って、エラーが起きてもプログラムを止めずに処理を続けたり、ユーザーにわかりやすいメッセージを表示したりできます。
基本の書き方:On Error GoTo
コード例
Sub SampleProcedure()
On Error GoTo ErrorHandler
Dim x As Integer
Dim y As Integer
Dim z As Double
x = 10
y = 0
z = x / y ' ここでエラー発生(ゼロ除算)
MsgBox "計算結果:" & z
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & Err.Description, vbExclamation
End Sub
ポイント解説
On Error GoTo ErrorHandler
:エラーが発生したらErrorHandler:
ラベルに飛ぶように指示します。Err.Description
:発生したエラーの内容をテキストで取得できます。Exit Sub
:正常に処理が終わった場合、エラーハンドラに飛ばないようにします。
注意点やよくあるミス
- Exit Subを忘れると、正常時でもエラーハンドラが実行されるので注意!
- 複数の
On Error
がある場合は、最後に設定されたものだけが有効になります。 - エラー処理後に
Resume
などで処理を再開する場合、無限ループに陥らないよう工夫しましょう。
中級者向け:Resumeの使い分け
Resumeにはいくつかの使い方があります。
Resume(同じ行に戻る)
Resume
エラーが出た同じ行から再実行します。
Resume Next(次の行から再開)
Resume Next
エラーの発生した次の行から再開します。
Resume ラベル名(指定位置にジャンプ)
Resume 再開位置
指定したラベルから再開できます。
応用テクニック:ログ記録に応用する
業務で役立つのが、「エラー内容をログに残す」テクニックです。
Sub LogErrorSample()
On Error GoTo ErrorHandler
' 何かの処理
Open "C:\存在しないファイル.txt" For Input As #1
Exit Sub
ErrorHandler:
Dim f As Integer
f = FreeFile
Open "C:\error_log.txt" For Append As #f
Print #f, Now & " エラー:" & Err.Number & " - " & Err.Description
Close #f
MsgBox "エラーが発生しました。ログを確認してください。", vbExclamation
End Sub
まとめ:まずはOn Error GoToから始めよう
Access VBAのエラーハンドリングは、慣れればとても心強い機能です。
今回のまとめです:
- 「On Error GoTo」でエラー時の処理を指定できる
- 「Errオブジェクト」でエラーの詳細が取得できる
- ログを残すことで、トラブルの再発防止にもつながる
まずは簡単なプロシージャで「On Error」を試してみてくださいね!
次のステップ:複数条件の抽出クエリ作成テクニック
次回は、「複数条件の抽出クエリ作成テクニック」について紹介する予定です。
お楽しみに!
