#674 フォームを閉じるときのカレントレコードなしエラーの回避法 フォーム、VBA

フォームを作成中、下記のようなケースで原因不明のエラーが発生しました。
  1. あるフォームで、そのレコードソースとなっているテーブルを、そのフォームモジュールのプログラムで全レコード削除して空にする
  2. フォームを再クエリする(当然画面にはレコードは表示されません)
  3. そのままの状態でフォームのタブの[×]ボタンでフォームを閉じようとすると「カレントレコードがありません」エラーが発生し、そのメッセージが表示される
  4. そのダイアログで[OK]ボタンをクリックすれば、フォームはそのまま閉じる
        ※あらかじめ用意された独自の[閉じる]ボタンでプログラムによってフォームを閉じると問題ない

ただし、そのような処理をすると常に発生するわけではなく、テーブル/クエリやフォームとのいろいろな条件が揃ったときに発生するようで、かなり似た構成の作りであってもエラーが発生しないこともあります。またAccessのバージョンやビルドなど一時的な問題の可能性もあります。

したがって、『もしそのような訳の分からないトラブルがあったときのエラー回避方法(エラーが起こらないようにするのではなく問題を無視して逃げる方法)の例』ということでの紹介です。


そのエラーメッセージを無視するには、下記のようなイベントプロシージャのプログラムを記述します。

Private Sub Form_Error(DataErr As Integer, Response As Integer)
'フォームのエラー時

  If DataErr =  3021  Then
    'カレントレコードなしエラー(エラー番号:3021)は無視する
    Response = acDataErrContinue
  End If

End Sub

ここではエラーを特定して処理していますが、If文による条件をなくせばすべてのエラーが無視されますし(問題に気付かなくなる可能性があるのでお薦めできませんが)、特別なエラーのみの対処であればエラー番号部分をそれに合わせて書き換えます。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved