• ベストアンサー

テキストボックスの入力チェック(ACCESS VBA)

テキストボックスに何かを入力し、フォーカスが他のものに移動したときに、LostFocusイベントで入力内容のチェックをかけています。(文字数チェック、ストアドをつかって入力内容と一致するものがDBにあるかなど) もし、入力が誤っている場合には他のものにフォーカスを移さず、そのテキストボックスにフォーカスを残したい(setfocusを使用)のですが、setfocusをしてもlostfocusされてしまうため、うまくいきません。 VBではValidateイベントというものがあるようですが、 VBAではみあたりません。 どなたかよい方法をご存知でしたら教えてください。

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

  • ベストアンサー
  • keikan
  • ベストアンサー率42% (75/176)
回答No.2

>もし、入力が誤っている場合には他のものにフォーカスを移さず、そのテキストボックスにフォーカスを残したい 通常、テキストボックスに対しての入力(通常は文字入力後のEnterKeyを押すことや、フォーカスが移るような操作をした場合です。)にたいして 真っ先にBeforupdateイベントが発生します。 このイベントの中で入力が正しいかどうかを判断させ間違っていればこのイベントの引数であるCancelにTrueをセットしてこのイベント(関数)をExitしてください。入力に間違いがなければCancelにはなにもセットしなくてかまいません。 この時Access側でCancel=Trueであればこのテキストボックスに対する操作を破棄してフォーカスをロストする前の状態にとどめます。 Cancel<>Trueであればテキストボックスの変更を確定してAfterupdateイベントに移ります。 ですから、Beforupdateで入力チェックを行い、問題があればCanxel=trueでイベントを中止し、 問題がなければ次の処理をAfterupdateイベントに記述してください。 (Beforupdateイベント内では入力テキストボックス内の値が今変更しようとしている値になっています。しかしながらあくまでテキストボックスの変更が確定するのはBeforupdateイベントが終了してからです。)

000200b
質問者

お礼

お返事ありがとうございます。 教えていただいたように試してみたところ、 入力チェックを行うことができました。 動作をとめるにはCancelに値を返すんですね。 本当にありがとうございました。

その他の回答 (1)

  • keikan
  • ベストアンサー率42% (75/176)
回答No.1

LostFocusイベントではなくて BeforupdateまたはAfterupdateイベントでは?^^ オブジェクトがフォーカスを失うとき(LostFocus)には編集中であれば Beforupdate→Afterupdate→LostFocusと言う順番にイベントが行われるので 入力に問題があれば Beforupdate、Afterupdateイベントでイベントをキャンセル(またはアンドゥ)してやればいい。

000200b
質問者

お礼

お返事ありがとうございます。 お礼が遅くなり申し訳ございませんでした。 BeforeUpdate、AfterUpdateを使用してみましたが 今一使い方が良くわからずうまくいきませんでした。 BeforeUpdate、AfterUpdateはコントロールとレコードが連結していないと使用できないのでしょうか? もしご存知でしたら教えてください。 (私の作成しているテキストボックスは連結されておらず、入力された値を取得して、新たにSQL文でUpするようになっています。)

関連するQ&A

  • Accessテキストボックスの未入力チェック

    いつも参考にさせて頂いております。 Accessテキストボックスの未入力チェックで上手くいかず悩んでいます。過去の情報等調べましたが、わかりませんでした。 どなたか宜しくお願い致します。 フォーム1にテキストボックス1、ボタン1があります。 テキストボックスを何も入力せず、Enter等で移動する時にチェックをかけたいです。 もし、テキストボックスに何も入力がなかったら、メッセージを出し、フォーカスをテキストボックスに戻す。 何か入力があれば、ボタンにフォーカスが移動する。 If IsNull(Me.テキストボックス1) = "" Then msgbox "未入力です。" Me.テキストボックス1.SetFocus End If 宜しくお願い致します。

  • テキストボックスの項目チェックをする場合どのイベントで?

    テキストボックスの入力内容が妥当か判断する場合はどのイベントで行いますか? 理想はチェックをしてエラーであれば、別のコントロールにフォーカスを移動させずに、現在のテキストボックスにフォーカスがある状態にしたいのです。 ACCESSのBeforeUpdateのようにキャンセルもでき、別のコントロールにフォーカスが移らずチェックするにはどのイベントでチェックすればよいですか?

  • テキストボックス入力後、警告メッセージを表示し、フォーカスを移動させない方法について

    テキストボックスの入力チェックを行うために下記のようなソースを記述しました。 下記を実行するとテキストボックスにどんな文字を入力してもメッセージボックスを表示し、 フォーカスが移動しない形となっております (厳密にはボタンにフォーカスが移動した後、テキストボックスにフォーカスを移動しています)。 これは Me.テキストボックス.SetFocus のみを記述した所、次の場所にフォーカスが移動してしまい、 下記のように書くとフォーカスが移動していないように見えるため、このようにしました。 ただこの記述はいささか強引な感じなので、これを改良したいと思っております。 2回フォーカスを移動させるのではなく、フォーカス移動を抑止する方法がベストと思いますが、 方法が分からなかったので、何かしらアドバイスをいただけれる方がいらっしゃいましたらよろしくお願いします。 【ソース】 Private Sub テキストボックス_AfterUpdate() MsgBox "エラー" Me.ボタン.SetFocus Me.テキストボックス.SetFocus End Sub 以上、よろしくお願いします。

  • テキストボックスの入力可/不可を切り替えた場合のリターンキーでの移動について

    VB6でマスタメンテ系のプログラムを作っています。 あるテキストボックスの内容によって、その次のテキストボックスの 入力可/不可を切り替えているのですが、1つ目のテキストボックス に値を入力してリターンキーで移動すると、次のテキストボックスが 入力可であっても、タブはそれを飛ばしてその次の項目に位置づいて しまいます。1つ目のテキストボックスに入力した後、イベントを 拾って、SetFocusか何かしてやらないといけないのでしょうか? 2つ目のテキストボックスに位置付ける方法があれば、アドバイス いただければと思います。よろしくお願いします。

  • テキストボックス 空白確認

    エクセル VBAで コマンドボタンをクリックすると テキストボックスに空白があった場合 空白のテキストボックスにセットフォーカスしたいのですが 下記のように少ない場合は まだいいですが 多くなってきたとき見易さの面でも簡単にしたいのですが VBだとコントロール配列のインデックス値をループ処理 すればよいと思いますがVBAだとどのようにすればいいのでしょうか? Private Sub CommandButton3_Click() If TextBox2 = "" Then TextBox2.SetFocus ElseIf TextBox3 = "" Then TextBo3.SetFocus ElseIf TextBox4 = "" Then TextBox4.SetFocus ElseIf TextBox5 = "" Then TextBox5.SetFocus End If 御願いします。

  • VB2005 テキストボックスの最大入力値設定について

    いつもお世話になっております。 VB2005のテキストボックスで、全角半角入り混じっての 最大30バイトまで入力可能にしたいのですが、現在ある MaxLengthプロパティではうまく制御ができません。 テキストのロストフォーカスや、チェンジイベント時に チェックする以外に方法はないのでしょうか。 何かもっといい方法があれば教えて頂きたいのですが・・・。 どうか宜しくお願いいたします。

  • エクセルVBA チェックBoxとテキストBox

    VBA勉強中の者です。エクセル2010使用 前回も同じような件で質問したのですが、入力フォームを作成中。 数量表の入力ホームなので、出来るだけキーボードのテンキーでの操作が出来るようにと考えております。 チェックボックスのon/off でテキストボックスの入力の可否を出来るようにしています。これが7組あるとします。(チェックボックス1に対してテキストボックス1に数値が入力出来るように) 質問(1) チェックが入っていれば、呼応したテキストボックスへエンターキーで移動。 チェックを入っていなければ、エンターキーで次のチェックボックスへ移動するようにしたいのです。 質問(2) シートへの転記の際は、7組の間に『、』カンマを入れたいのですが、当然チェックのないものは必要ないので、カンマが要らない事になります。初心者の考えでは単純に条件式をその通り数書くことになるのかと思うとゾッとしますが、少しでも条件式を減らす方法があれば、ご教授願います。 分かり難くて、すみません。

  • vba なのですが...

    EXCEL の VBA です ActiveX コントロールで テキストボックス があります その、テキストボックス のLostFocus時のイベントなんですが、 標準モジュールで書かれているソースを直接呼びたいです Private Sub TextBox1_LostFocus() から、callするのではなく、 直接 呼び出す方法はあるのでしょうか? おしえてください

  • テキストボックスに入力するとチェックボックスのチェックが入るようにするには

    Excelのユーザフォームについて質問させていただきます。 チェックボックスとテキストボックスがそれぞれ複数あります。 テキストボックスに入力すると、横にあるチェックボックスに 自動的にチェックが入るようにしたいのですが、 どのようにすればいいのでしょうか。        

  • チェックボックスのオンフォーカスについて

    チェックボックスにフォーカスが当たると、テキスト部にフォーカスが当たると思われるのですが、現開発ではチェックボックスのテキストプロパティには何も入力をしない仕様になってしまいました。 当然、Tab移動時等で該当するチェックボックスにフォーカスが当たってるのですが、外見ではフォーカス状態がわかりません。 フォーカスをテキスト部ではなく、チェックする部分にフォーカスを当てる方法はありませんでしょうか? どなたか、ご教授をお願いいたします。