[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『再 ユーザーフォームでの入力チェックのやり方』(ヒロ)
Excel2000 WindowsXP
いつもお世話になっております。 EXITの時の処理ですが、以前解決したように見えて、 今になって、新たに問題が発生しましたので再度宜しくお願いします。
フォームに、テキストボックスが複数あります。 入力チェックは、ボタン押下時ではなく、 それぞれのテキストボックスから、フォーカスが移動しようとしているときに行いたいのです。 これだけなら、EXITイベントで解決しますが、 終了ボタン(CommandButton)を配置して、 ボタン押下時に入力チェックがかからないようにしたいのですが、 どうしたらよろしいでしょうか?
問題は、EXITイベント時に、終了ボタンが押されたのかどうかを判定できるか? ということなのですが、いろいろやってみましたが、うまくいきません>< 良い知恵は無いでしょうか?
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
>>>>ココで判定可能なのか?
If TextBox1.Text = "" Then MsgBox ("テキストボックス1が未入力です") Cancel = True End If End Sub
↑これの続きですね?
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
>>>>ココで判定可能なのか?
無理です。VBのLostfocusイベントとは違いますねえ!! 新たなイベントでも考えなければなりません(ActiveControlを監視する方法)が、 作ったことはありますが、実務では未だ採用する自信がありません。
Exitイベントは、扱いが本当に難しいのです。 Exitイベントでどこのコントロールから抜けたのかというフラグを立てて、フォーカスの移動先の コントロールのEnterイベントでチェックする なんて方法も考えましたが、簡単なテストでは うまくいったように見えてもこれにも色々問題があって、うまくはいきませんでした。
>終了ボタン(CommandButton)を配置して、 >ボタン押下時に入力チェックがかからないようにしたいのですが、 >どうしたらよろしいでしょうか?
1.
前回の投稿で述べたようにエラーメッセージはMsgboxではなく、ラベル表示にして、しかも警告のみにして 実行時に本格的にエラーにする方法(私は、ほとんどこれ)。
2. 終了ボタンはなし(ユーザーフォームのXボタンで終了する仕様する)にして
標準モジュール
Sub test() UserForm1.Show With UserForm1 .TextBox1.Text = "エラーにならないように文字をいれる" End With Unload UserForm1 End Sub
Userform1では、
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then Cancel = True Me.Hide End If End Sub Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'>>>>ココで判定可能なのか?
If TextBox1.Text = "" Then MsgBox ("テキストボックス1が未入力です") Cancel = True End If End Sub
こんなコードでTextbox1が未入力でXボタンクリックでエラーが表示されません。
これでも嫌なら、監視プログラムですが・・・。
検討してみてください。
ichinose
はい、あれの続きです^^; 何度もすみません><;
前回なぜ、うまくいった! と思っていたのかと言うと、 テキストボックス群は全てフレーム内にあり、コマンドボタン群はフレームの外にあったんです。 で、フレーム内のテキストボックスから、フレーム外のコマンドボタンにフォーカスが移ると、 Exitイベントが発生しなかったんですね。 しかし、コマンドボタン(更新実行)押下時にチェックをかけて、 元のテキストボックス以外のテキストボックスにフォーカスを移そうとしたとき、 Exitイベント発生となり、2重チェックがかかったり、エラーとなってしまったんです。 (もとのテキストボックスもエラーになる条件下で) それで、今回の問題が発生したと言うわけです><
Exitイベントは便利なようで、なかなか扱いにくいのですね^^;
1の、警告表示にして、実行時に本格的にエラーにする方法を取りたいと思います。 Exitイベント内で判定が不可能と知り、残念ではありますが、 ichinoseさんのおかげで、疑問が晴れて頭がすっきりしました。 これで、心置きなくコーディングに専念で来ます^^
本当に、親切に教えていただきありがとうございました。 今後とも、よろしくご指導お願いいたします。
解決後ですし、だいぶ日にちが経ってしまいましたが、気になったので・・・。
>前回なぜ、うまくいった! と思っていたのかと言うと、
そうすねえ、解決時にはその解決された方法を記述して頂けるとこの御質問がFAQ として、利用しやすいですねえ!!
>テキストボックス群は全てフレーム内にあり、コマンドボタン群はフレームの外にあったんです。 ↑これもバグです。 フレーム内の文字入力可能なコントロール(テキストボックスやコンボボックス等) マルチページ内の文字入力可能なコントロール の組合せは、Exitイベントの発生にバグがあります。
詳しくは、
http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips03.htm
以前、このバグを逆利用してコード作成を・・・、なんて試みたことがありましたが、 とんでもないことになってしまい、結局一日無駄にしてしまったことがありました。
この投稿をご覧になることがありましたら、リンクサイトを参考にしてみてください。
ichinose@もう仕事だあ
なんとなく気になって見にきたらコメントが^^
なるほど、バグなんですねぇ・・・・ お仕事の合間にもかかわらず、ありがとうございました。 見にきてよかった^^
(ヒロ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.