- ベストアンサー
エクセルユーザーフォームのカーソル位置
どうしても分からないのでお助け下さい(>_<) エクセルでユーザーフォームを作っています。 TextBox1に品番を入れたら、Label1に品名を表示させています。 このとき、TextBox1に存在しない品番を入力した場合は、 再度入れなおしをさせたいのです。 そこで、カーソルをもう一度TextBox1に持っていきたいのです。 しかし、どうやってもタブオーダーでTextBox1の次にあるTextBox2に カーソルが行ってしまいます。 どうしたらもう一度TextBox1にカーソルを持っていくことができますか? ちなみに品名を表示するモジュールを書いておきます。 このSetFocusが違うということは分かるのですが・・・。 Private Sub TextBox1_AfterUpdate() Dim tmp As Range, a a = Me.TextBox1.Value Set tmp = Sheets(1).Columns(1).Find(a, , xlWhole) If tmp Is Nothing Then Me.Label1.Caption = "品番が誤っています。再度入力して下さい" Me.TextBox1.SetFocus Exit Sub Else Me.Label1 = tmp.Offset(0, 1) End If End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
自信はありませんが、AfterUpdate イベントで Me.TextBox1.SetFocusとしても 次に起こるExit イベントでTextBox2に 飛ばされるのではないでしょうか? BeforeUpdateを使って・・・ Private Sub TextBox1_BeforeUpdate _ (ByVal Cancel As MSForms.ReturnBoolean) Dim tmp As Range, a a = Me.TextBox1.Value Set tmp = Sheets(1).Columns(1).Find(a, , xlWhole) If tmp Is Nothing Then Me.Label1.Caption = _ "品番が誤っています。再度入力して下さい" Cancel = True Exit Sub Else Me.Label1 = tmp.Offset(0, 1) End If End Sub 存在しない値を入力した場合は、TextBox1の更新を キャンセルするようにすればうまくいくと思います。
その他の回答 (2)
- e10go
- ベストアンサー率38% (47/122)
No.2のe10goです。 すみません。 私が答える前に、"Cancel = True"でフォーカスの移動を止める方法を、No.1のmasa_019さんが答えていました。
お礼
いえいえありがとうございます。 _Exitというイベントもあるんですね。 使ったことがありませんでした。 試した見たところうまく行きました! いろいろな方法があるのだなとまたひとつ知識が増えました! 奥が深くてまだまだ勉強しないといけませんね。
- e10go
- ベストアンサー率38% (47/122)
こんばんわ。 実は、私も過去にこれで悩んだことがあります。 ユーザーフォームのコードを下記のように変更してみては如何でしょう。 '--------マクロコード--------始まり Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'AfterUpdateではなく、Exitを使用する Dim tmp As Range, a a = Me.TextBox1.Value Set tmp = Sheets(1).Columns(1).Find(a, , xlWhole) If tmp Is Nothing Then Me.Label1.Caption = "品番が誤っています。再度入力して下さい" Cancel = True 'ここがミソ Exit Sub Else Me.Label1 = tmp.Offset(0, 1) End If End Sub '--------マクロコード--------終わり "AfterUpdate"で"SetFocus"を使っても、"TextBox1"にフォーカスを移した後、"TextBox2"フォーカスが移ります。 そこで、"Exit"の"Cancel = True"でフォーカスの移動を止めます。
お礼
ご回答ありがとうございます。 アドバイス通りにやってみたらうまく行きました! お礼が遅くなって申し訳ありません。 Exitイベントで次に行ってしまうのですね。 大変勉強になりました。助かりました。