「これはヤバかったな」という遅刻エピソード

ACCESS2000のフォームのことで質問します。
(実際のフォームは項目が複雑なので、簡単な例にして説明します。)

フォーム上にテキストボックスTB1とTB2があり、共に必須入力項目です。
TB1_Exit内でisnull(TB1)のときMsgboxでエラー表示後TB1.setfocusしているのですがTB2にタブ順で移動してしまいます。
また、フォーム開いてすぐに閉じるときにもTB1_Exitが働いてしまい上記エラーが発生してしまいます。

質問1>Exitイベントから自分自身にSetfocusする方法はありますか?

質問2>フォームを閉じるときはTB1_Exitをさせない方法はありますか?

質問3>これらの問題はTB1の入力チェックをTB1_Exitでしていることが問題なのだと思うのですが、他にどういう方法がありますか?チェックさせるためのボタンを用意してそのClickイベントでチェックさせるしかないでしょうか。

早急に完成させなければならず、大変困っております。どうかよろしくお願いいたします。

A 回答 (2件)

MSAccess2000での開発経験は少ないですが、MSAccess97までなら全バージョンで


経験があります。Accessとは結構長いお付き合いです。

質問1>Exitイベントから自分自身にSetfocusする方法はありますか?

残念ながら無いはずです。

質問2>フォームを閉じるときはTB1_Exitをさせない方法はありますか?

これも方法が無いはずです。

質問3>これらの問題はTB1の入力チェックをTB1_Exitでしていることが問題なのだと思うのですが、他にどういう方法がありますか?チェックさせるためのボタンを用意してそのClickイベントでチェックさせるしかないでしょうか。

そのとおりです。

なお、ヘルプを見ると各項目の BeforeUpdate イベントでチェック
できるように見えますが、実際には Cancel を True にしても
素通りしてしまいますので、強制チェック機能として使用できません。
※Access95まではヘルプどおりに使用できました。

よって、登録ボタンなどや、 連結フォームでの レコードの BeforeUpdate
イベントでチェックするしか方法はありません。

以上
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
経験の長い方からの回答で、大変参考になりました。
やはり思った通り、できないんですね・・・そうだとは思ったんですが残念。
「連結フォームでのレコードのBeforeUpdate」は???ですが、全部の入力が済んでからチェック用のボタンを押し、その中で判定させることにしました。
明日さっそくそのようにやってみます。
どうもありがとうございました。

お礼日時:2001/10/12 00:16

コントロールの数がそんなに無ければ



Sub TB1_Check()

If IsNull(Me.TB1) Then
  Me.TB1.SetFocus
  Exit Sub
End If

End Sub

という関数を作り、他のコントロールのSetFocus時にTB1_Check関数を実行すれば希望の動作になると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
>他のコントロールのSetFocus時にTB1_Check関数を実行
TB2_GotFocus内でTB1_Checkを実行・・・ということと解釈しましたが。
とりあえず#1の方のお礼に書いた方法に、今日1日かけて変更しました。
でも有効な方法だと思いますので、参考にさせていただきます。

お礼日時:2001/10/12 23:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報