カレントレコードが変わったら起こるイベントに、コードを書いた。
UserIdをココに入れなさい。と。
Mainフォームで普通にカレントレコードを移動させてれば、問題なく動く。
よしよし(*゚-゚)
しかし、ボタンから別フォームを呼び出し、その別フォーム側から、
(close時に)MainフォームをRequeryしたら、
『実行時エラー '2113' このフィールドに入力した値が正しくありません。』
が出た。
とりあえず切り分けのため、Debug.Print RecordSet!UserId してみたら、
『実行時エラー '3021'カレントレコードがありません。』
なんですと!?
そんなわけで、Record数、EOF、BOFを表示してみる。
RecordSet.RecordCount → 7(正常
RecordSet.EOF →False(EOFではない
RecordSet.BOF →False(BOFではない
…正常すぎじゃん( ゚-゚)~゚
こりゃ判断出来ないわってんで、エラー拾ってスルーするようにしました。
Private Sub Form_Current() '子フォームでRequeryされたとき、カレントレコードが取得できないので回避させる。 On Error Resume Next Cmb_UserId.Value = Me.Recordset!UserId Select Case Err.Number Case 0 '正常 Case 2113 'このフィールドに入力した値が正しくありません。 Case 3021 'カレントレコードがありません。 Case Else Debug.Print ("ERROR:" & Err.Number) End Select On Error GoTo 0 End Sub
ミソは、まず、On Error Resume Next で、『エラーが置きても次へ進む』指定と、
Select文でErr.Numberで、通していいエラー番号ダケをCaseに書き、
それ以外はエラー処理をするコト。
最後に、On Error GoTo 0 で、
『エラーを普通に拾ってくれるモード』に戻さないと楽しいコトになります( ゚-゚)~゚
ただスルーするのはキケンだし、
個人的にイヤ(コッチが重要)なのでこうしました( ゚-゚)~゚
通しちゃダメなその他エラーは、Msgboxで表示させるのが親切かも。
エラーコードからエラー内容を引っ張れるなら、エラーダイヤログと同じよーな動きさせるのも可能かもしれません。めんどちいのでやらないけど(ぇ
追記:
しまった。正常時のエラーコード0のcase書くのを忘れてた(*゚-゚)
0 件のコメント:
コメントを投稿