• ベストアンサー

エクセルVBA テキストボックスへのセットフォーカスについて

エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!"     TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 >イベントをAfterUpdateにしましたが、Wendy02さんはExitを使っていますが、AfterUpdateではなぜ正しく動作しないのでしょうか? イベント自体の問題よりも、イベントの機能を良くみたほうがよいですね。 _Exit(ByVal Cancel As MSForms.ReturnBoolean) ここで、Return(戻り値)のブーリアン値があるようなので、それを利用しただけです。 >Cancel = True が、フォーカスの移動をキャンセルしています。 別に、Exit でなくても良いのです。例えば、 _KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) のKeyCode に入った 「13(Enter)」のコードを 0 で打ち消す方法でも、可能です。 If が True の時に、  MsgBox "規格外!!",16  TextBox1.Text = ""  KeyCode = 0 でも可能です。 「なぜ?」というよりも、そういうパターンがあるということです。たぶん、AfterUpDateでも、方法によってはできるとは思いますが、かなり難しくなるのではないかなって思うだけです。

その他の回答 (2)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

こんばんは。 イベントはその持つ意味を考えて使わなければ意図しない動作をしますので使う前にヘルプをよく読んで使うことをお薦めします。 とは言ってもVBA使い始めのうちはなかなかですよね。 ひとつ質問します。 TextBox1にフォーカスがある時にEnterのみ押した場合、言い替えると未入力の場合はメッセージを出さなくていいのですか?

na714
質問者

補足

ご回答ありがとうございます。 質問ですが、未入力の場合は最終的な段階でチェックする ようにしています。 今回の問題は、テキストボックス入力直後に範囲内なのか すぐに判断し、もしそうでなければ強制的に空欄にし フォーカスを戻したいと思っております。 宜しくお願い致します。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 以下の CreateObject("WScript.Shell").Popup は、 MsgBox でもよいです。MsgBox がうっとうしく感じたので、換えてみました。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)   Dim myValue As Single   If IsNumeric(TextBox1.Text) Then    myValue = CSng(TextBox1.Text)    If myValue < 1.99 Or myValue > 3# Then      CreateObject("WScript.Shell").Popup "規格外!!" & vbCrLf & _      "範囲: 1.99 ~3.0", 1, "規格外エラー"      TextBox1.Text = ""      Cancel = True    End If   End If End Sub

na714
質問者

補足

早速のご回答ありがとうございます。 イベントをAfterUpdateにしましたが、 Wendy02さんはExitを使っていますが、 AfterUpdateではなぜ正しく動作しないの でしょうか? 申し訳ありませんが、イベントの内容の意味を詳しく 教えて頂けないでしょうか? お願い致します。