• ベストアンサー

Exitイベントから自分自身のコントロールにSetfocusしたい

ACCESS2000のフォームのことで質問します。 (実際のフォームは項目が複雑なので、簡単な例にして説明します。) フォーム上にテキストボックスTB1とTB2があり、共に必須入力項目です。 TB1_Exit内でisnull(TB1)のときMsgboxでエラー表示後TB1.setfocusしているのですがTB2にタブ順で移動してしまいます。 また、フォーム開いてすぐに閉じるときにもTB1_Exitが働いてしまい上記エラーが発生してしまいます。 質問1>Exitイベントから自分自身にSetfocusする方法はありますか? 質問2>フォームを閉じるときはTB1_Exitをさせない方法はありますか? 質問3>これらの問題はTB1の入力チェックをTB1_Exitでしていることが問題なのだと思うのですが、他にどういう方法がありますか?チェックさせるためのボタンを用意してそのClickイベントでチェックさせるしかないでしょうか。 早急に完成させなければならず、大変困っております。どうかよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

MSAccess2000での開発経験は少ないですが、MSAccess97までなら全バージョンで 経験があります。Accessとは結構長いお付き合いです。 質問1>Exitイベントから自分自身にSetfocusする方法はありますか? 残念ながら無いはずです。 質問2>フォームを閉じるときはTB1_Exitをさせない方法はありますか? これも方法が無いはずです。 質問3>これらの問題はTB1の入力チェックをTB1_Exitでしていることが問題なのだと思うのですが、他にどういう方法がありますか?チェックさせるためのボタンを用意してそのClickイベントでチェックさせるしかないでしょうか。 そのとおりです。 なお、ヘルプを見ると各項目の BeforeUpdate イベントでチェック できるように見えますが、実際には Cancel を True にしても 素通りしてしまいますので、強制チェック機能として使用できません。 ※Access95まではヘルプどおりに使用できました。 よって、登録ボタンなどや、 連結フォームでの レコードの BeforeUpdate イベントでチェックするしか方法はありません。 以上

snoopy64
質問者

お礼

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

その他の回答 (1)

  • Watapo3
  • ベストアンサー率76% (33/43)
回答No.2

コントロールの数がそんなに無ければ Sub TB1_Check() If IsNull(Me.TB1) Then   Me.TB1.SetFocus   Exit Sub End If End Sub という関数を作り、他のコントロールのSetFocus時にTB1_Check関数を実行すれば希望の動作になると思います。

snoopy64
質問者

お礼

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

関連するQ&A