- ベストアンサー
連続でTextBoxに入力する方法
- TextBoxに連続で入力する方法について質問があります。
- Form1に配置されたTextBox1にKey入力を受け、Enter Keyで取り込む動作を連続して行いたいですが、カーソルがTextBox2に移動してしまいます。
- Enter Keyの後、カーソルがTextBox1に戻るようにする方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 TextBox やLabelを除いた殆どのコントロールは、 指定されている.TabIndexの順(デフォルトでは挿入順)に、 フォーカスを移動します。 TextBox1 = "" を実行すると、まず、 値入力確定を意味する、 _BeforeUpdate→_AfterUpdate イベントが発生しますので、 フォーカスは.TabIndexで規定された次のコントロールに移ります。 簡単な対処方法を紹介しますが、 まずはすぐに確認できるので、試してください。 デザイン画面でプロパティフォームを開いて、、 TextBox2 の.TabStop プロパティ(デフォルトではTrue) をFalseに設定します。 これだけ、でも。 TextBox1,TextBox2以外にコントロールが無ければ、 「Enter キーを確定の契機にしたTextBox1にのみ連続入力」 が、ご提示のコードのまま、可能になります。 この点の確認が済んだら、TextBox1を始めとして、 Label以外のコントロールのすべて .TabStop プロパティをFalseに設定しておきましょう。 後で訳分からなくならないように、 そもそも目的に副わないオートタブの設定については、 統一しておいた方が、後々、変更を加える時にも困らないです。 ユーザーフォームを表示した時に、 TextBox1.SetFocusを実行するのが億劫ということでしたら、 お奨めはしませんが、 TextBox1 のみ .TabStop プロパティをTrueに設定する手もアリ。 > Sheets("Sheet1").Range("A1") = TextBox1.Value これが、ちょっと不思議なのですが、 ただ[A1]に上書きを続けるだけでいいのでしょうか? もし、[A列]で順に下に送るようなことをやりたいのでしたら、 Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Offset(1) = TextBox1.Value みたいなことかな?と。 因みに、TextBox1入力中に、↑↓方向キーを押すと、 これも、Enter キー 同様に入力確定→フォーカス移動 が(.TabStop プロパティとは無縁に)自動化されています。 実質上Enter キー と ↑↓方向キー は同列に扱った方が 自然ですが、このキーの違いで機能を分ける手段としても 使えますね。 同列に扱う場合でしたら、 > If KeyCode = vbKeyReturn Then ' ' 処理 > End If に代えて、 Select Case KeyCode Case vbKeyReturn, vbKeyUp, vbKeyDown ' ' 処理 End Select のようにもできます。 上記の説明(今抱えた問題)の状況を確認したいようでしたら、 以下記載の各イベント(Debug.Print)を (テスト用として一時的に)追加して、 ご質問時点の設定のまま(TextBox2.TabStop=Trueの状態で)、 TextBox1 に 1 をタイプして即Enter キー ぐらいの操作で、 イミディエイトウィンドウを確認すると Tbx1_CH ■1■ Tbx1_CH ■■ Tbx1_B_UpDate ■■ Tbx1_UpDate_A ■■ Tbx1_Exit ■■ という処理の流れが見えてくると思います。 たぶん、この順番が、今期待しているものと違うということなのでしょう。 ' ' // Private Sub TextBox1_Change() Debug.Print "Tbx1_CH", "■"; TextBox1.Value; "■" End Sub Private Sub TextBox1_AfterUpdate() Debug.Print "Tbx1_UpDate_A", "■"; TextBox1.Value; "■" End Sub Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Debug.Print "Tbx1_B_UpDate", "■"; TextBox1.Value; "■" End Sub Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Debug.Print "Tbx1_Exit", "■"; TextBox1.Value; "■" End Sub ' ' //
お礼
TextBox2 の.TabStop プロパティをFalseに設定しましたら、問題が解決しました。本当にありがとうございました。また、それに関連した事項でもご指導頂き、ありがとうございました。