[[20151126135306]] 『フォームのTextBoxでミスがあった時、元のTextBox』(やっぱり初歩) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『フォームのTextBoxでミスがあった時、元のTextBoxへ戻りたい』(やっぱり初歩)

 何時も乍ら分からない事ばかりですがご指導ください。

 単純にText1で条件外入力の時に、元のText1へ戻る事をしたいのです。

  If Not 条件 Then
      MsgBox "Miss"
      Text1.SetFocus   '元のTextBoxへ戻りたい!
   End If

 この様にしても次のTextBoxへ移動します。

 この質問をすると複雑な処理へ移行しそうですが…
 宜しくお願いします。

< 使用 Excel:Excel2013、使用 OS:Win10 >


 このコードは、どのイベントプロシジャに書かれていますか?
 それと、フォーム表示はモーダルですか、モードレスですか?

(β) 2015/11/26(木) 14:16


コーディングは合っています。肝心なところを書いてない。何故そこを省略してしまうかなぁ…。
2010で確認しましたが、2013でも変わっていないと思います。

 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Text = "" Then
        MsgBox "空欄禁止"
        Cancel = True
    End If
 End Sub

ちなみに、条件成立しないと抜けられないのは、何も入力せずフォームを閉じる際も機能してしまうので、
入力時はノーチェックとし、実行ボタン等を押した際にチェックし、警告すべきと思いますよ。
(???) 2015/11/26(木) 14:22


 おそらく現在のコードは、当該テキストボックスのChangeイベントあたりに書いてあるんでしょうね。
 (???)さんからの回答のように Exit系(ExitやBeforeUpdate)処理でCancel = True とする手がありますが、
 同じく、(???)さんから指摘があるように、そのテキストボックスを操作でスキップされてしまうと、チェックがかかりません。

 ですから、テキストボックス入力時の個別チェックではなく、たとえば更新ボタンが押されたときに
 必須チェックであるとか、データが適正かどうかのチェックをかけるべきだと思います。

 なお、テーマとは離れますが、もし Changeイベント処理だとすると、それはふさわしいイベントではないかもしれません。
 たとえば ABCD と入力する場合、タイプするたびにイベントが発生します。
 A で発生、ABで発生、ABC で発生、ABCD で発生。
 これって、コード処理上、極めて扱いにくいですよ。

(β) 2015/11/26(木) 17:20


 βさん

 >このコードは、どのイベントプロシジャに書かれていますか?
  最初はAfterUpdateイベントで書きました。そこでこの様になってしまったのです。

 イベントの流れが AfterUpdate ⇒ Exit の順である事に気付いたまでは良かったのですが
 はたまた、そこからどのような流れにしてよいのか分からなくなってしまったのです。

 頭の中では『もしかしたら理解できないクラスモジュールを使用しなければいけないのかな』と
 考えた途端に『クラスモジュールでの構築は無理!』となり、頓挫したのです。
 その後、考える気力を失い質問させて頂きました。

 ???さん
 βさんもご指摘の様に『何故そこを省略してしまうかなぁ…。 』⇒ はいです。済みませんでした。
 なるべく簡単な手法でと思っています。ご指摘のExitイベントで気張ってみます。

 尚、注釈頂いた Change イベントは面倒だと思っていましたので最初から考えから外しました。
 フォーム表示はモダールです。

(やっぱり初歩) 2015/11/27(金) 10:22


 どうも有難うございました。簡単な事だったんですね。

 私としては随分前(多分10年位前から)疑問に思いつつ放置していました。
 そこは素人だからと自分に対し大目に見ていました。
 やっと安心です。
(やっぱり初歩) 2015/11/27(金) 10:34

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.