フォームを作成中、下記のようなケースで原因不明のエラーが発生しました。
- あるフォームで、そのレコードソースとなっているテーブルを、そのフォームモジュールのプログラムで全レコード削除して空にする
- フォームを再クエリする(当然画面にはレコードは表示されません)
- そのままの状態でフォームのタブの[×]ボタンでフォームを閉じようとすると「カレントレコードがありません」エラーが発生し、そのメッセージが表示される
- そのダイアログで[OK]ボタンをクリックすれば、フォームはそのまま閉じる
ただし、そのような処理をすると常に発生するわけではなく、テーブル/クエリやフォームとのいろいろな条件が揃ったときに発生するようで、かなり似た構成の作りであってもエラーが発生しないこともあります。またAccessのバージョンやビルドなど一時的な問題の可能性もあります。
したがって、『もしそのような訳の分からないトラブルがあったときのエラー回避方法(エラーが起こらないようにするのではなく問題を無視して逃げる方法)の例』ということでの紹介です。
そのエラーメッセージを無視するには、下記のようなイベントプロシージャのプログラムを記述します。
Private Sub Form_Error(DataErr As Integer, Response As Integer)
'フォームのエラー時
If DataErr = 3021 Then
'カレントレコードなしエラー(エラー番号:3021)は無視する
Response = acDataErrContinue
End If
End Sub
ここではエラーを特定して処理していますが、If文による条件をなくせばすべてのエラーが無視されますし(問題に気付かなくなる可能性があるのでお薦めできませんが)、特別なエラーのみの対処であればエラー番号部分をそれに合わせて書き換えます。
|