• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TextBoxに連続で入力する方法)

連続でTextBoxに入力する方法

このQ&Aのポイント
  • TextBoxに連続で入力する方法について質問があります。
  • Form1に配置されたTextBox1にKey入力を受け、Enter Keyで取り込む動作を連続して行いたいですが、カーソルがTextBox2に移動してしまいます。
  • Enter Keyの後、カーソルがTextBox1に戻るようにする方法を教えてください。

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

  • ベストアンサー
回答No.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 ' ' //

dORAGON2394
質問者

お礼

TextBox2 の.TabStop プロパティをFalseに設定しましたら、問題が解決しました。本当にありがとうございました。また、それに関連した事項でもご指導頂き、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MSForms.ReturnInteger

    Excel VBAで 違うSubから textbox_keypress をコールしたいのですが、 vbKeyReturnを受け渡せません。 ****************************************** Private Sub StartButton_Click() Dim KeyCode As MSForms.ReturnInteger If EngTypeStartButton.Caption = "" Then KeyCode.Value = vbKeyReturn <---ここでエラーになる。 Call TextBox_KeyDown(KeyCode, 0) End If End Sub ****************************************** 『実行エラー91 オブジェクト変数またはWithブロック変数が設定されていません』 と表示されます。 vbKeyReturnの代わりに13としても結果は同じです。 受け側のSubは以下のような始まりです。 Private Sub TextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) このSubは正常に動作しています。 どなたか私の間違いを教えていただけないでしょうか? よろしくお願いいたします。

  • エクセルBVAのフォーム式のKeyCode~の意味がわかりません

    エクセルBVAです Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyDown Then KeyCode = 0 End If End Sub ヘルプをみると キーを押したとき、およびキーを離したときに続いて発生します。KeyDown イベントはキーを押すと発生し、KeyUp イベントはキーを離すと発生します。 キーってenterのことですかね? なら、 If KeyCode = vbKeyDown Then KeyCode = 0 End If で、KeyCodeを0ににするってどういうことでしょうか?

  • エラー時カーソルを戻したいのですが?

    エクセルVBAに入出荷(在庫管理)を作成しているのですが テキスト1に品番を入力して品番が無かった場合 テキスト1などを空白にしてテキスト1にカーソルを 戻したいのですが下記のように書き込むとテキスト2に カーソルが行ってしまいます。どこを直せばいいでしょうか? Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim i As Integer If KeyCode = 13 Then For i = 4 To 400 If Sheets("倉庫在庫(記入用)").Cells(i, 1) = TextBox1 Then Label6 = Sheets("倉庫在庫(記入用)").Cells(i, 4) Label7 = Sheets("倉庫在庫(記入用)").Cells(i, 5) TextBox2.SetFocus Exit Sub End If Next i MsgBox "品番がありません!" TextBox1 = "" Label6 = "" Label7 = "" End If TextBox1.SetFocus End Sub

  • エクセル VBA タブストップに対する質問2

    下記の「エクセル VBA タブストップに対する質問」に書き込みした者ですが、一難去ってまた一難です。又、暗雲が漂ってきました。 条件は下記といっしょで テキストボックスが1~5まであり、テキストボックス2~4まではデータが入っています。 全てのTabStopはTrue、TabIndexは順に1~5が入っています。 テキストボックス1に何もデータを入れないで、Enterが押された場合、 テキストボックス1をアクティブにしたいのですが、下記で質問した回答で動かしても、きちんと動いてくれません。 どうかご指導よろしくお願いいたします。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then 'ENTER If TextBox1.Value = "" Then TextBox1.SetFocus End If End If End Sub このコードでテキストボックス1に何も入れずにEnterを押すとテキストボックス2がアクティブになってしまいます。

  • TextBox内で日本語入力中を判断する方法

    TextBox内で「Enter」PUSHの有無を下記コードで実現しておりますが Private Sub TextBox1_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then     処理 End If End Sub 日本語変換の際(もじ→文字)の「Enter」を処理対象外にする方法を教えていただけないでしょうか? もしくは日本語入力中を判断する方法を教えていただけないでしょうか? 言語はVB6.0です。 よろしくお願い致します。

  • 【Access】サブフォーム間のカーソル移動がわからなくて困っています。

    2つのサブフォームがあり、サブフォーム間のカーソル移動を実現したいのですが、 意図した動作にならず、困っております。 その為、下記の条件を満たす動作をご教示いただける方がいらっしゃいましたら、 ご教示の程、よろしくお願いします。 【条件】 1. Form1_SUBのfield2でEnterキー押下時、同じ行のForm2_SUBのIDに移動したいです (Form1_SUBの1行目のfield2でEnterキー押下時、 Form2_SUBの1行目のIDにカーソルを移動したいです。 下記のソースでは Form2_SUBの最後のカーソル位置があった行のIDに遷移してしまいます)。 2. Form2_SUBのfield2でEnterキー押下時、次の行のForm1_SUBのIDに移動したいです (Form2_SUBの1行目のfield2でEnterキー押下時、 Form1_SUBの2行目のIDにカーソルを移動したいです。 下記のソースでは Form1_SUBの最後のカーソル位置があった行のIDに遷移してしまいます)。 【フォーム名】 親:OYAFORM サブ:Form1_SUB(T1テーブルを連結した帳票フォームです。) サブ:Form2_SUB(T2テーブルを連結した帳票フォームです。) 【テーブル名】 T1(ID, field1, field2) T2(ID, field1, field2) 【F1_SUBのソース】 Private Sub field2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Forms!OYAFORM!Form2_SUB.SetFocus Forms!OYAFORM!Form2_SUB.Form!ID.SetFocus End If End Sub 【F2_SUBのソース】 Private Sub field2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Forms!OYAFORM!Form1_SUB.SetFocus Forms!OYAFORM!Form1_SUB.Form!ID.SetFocus End If End Sub 以上、よろしくお願いします。

  • TextBoxでEnterキーを押すと、にあるButtonを押したのと同じ効果を出す方法

    VB初心者です。 まだ、はじめたばかりなので、上手く質問を説明できませんが、よろしくお願いします。 環境はVisualBasic .net 2003です。 フォームにテキストボックス(TextBox)とボタン(Button)があります。 テキストボックス内でEnterキーを押すと、ボタン(Button)を押したのと同様の効果をだしたいのですが。 VC++6.0だと、SendMessage(WM_COMMAND , ..... のようなやり方でできたはずですが・・・ --------------------------- テキストボックスのコード Private Sub txtTest_KeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtTest.KeyDown If (e.KeyCode = Keys.Enter) Then '★★★ここでどういうコードを書いてよいかわかりません。 End If End Sub ---------------------------- ボタンを押したときのイベントハンドラ Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click     ボタンを押したら、このイベントハンドラを呼び出したい。     もしくは、間接的に呼び出したい。 ------- どなたか、やり方をご存知の方がいらっしゃいましたら、よろしくお願いします。

  • VB2005 TextBoxの入力制限について

    はじめて質問させていただきます。 現在、VB2005を使ってプログラムを組んでいるのですが、半角カタカナだけをTextBoxに入力し、表示する方法がわかりません。 Private Sub TextBox6_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox6.KeyDown TextBox6.ImeMode = Windows.Forms.ImeMode.KatakanaHalf End Sub Private Sub TextBox6_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress If (e.KeyChar < "ア"c Or e.KeyChar > "-"c) And e.KeyChar <> vbBack Then e.Handled = True End If End Sub ↑見にくいかもしれませんがコードです。 この方法ではだめなのでしょうか? 回答をお願いします

  • 【Excel VBA】UserForm上のTextBoxについて

    UserForm上にTextBoxを配置し テキストを入力後Enterを押すことで中身を判定するロジックをKeyUp関数内に設けているのですが、 たまにEnterが反応しないことがあります。 その他のキー入力は入りますし、 Enter自体も一旦他のウィンドウをアクティブにしてから 再度UserFormをアクティブに戻して入力すると反応します。 Enterが押されるまでは以下のコードにより関数を抜けています。 If KeyCode.Value <> vbKeyReturn Or TextBox1.Value = "" Then Exit Sub 再現性もないので何が原因なのか判りません。 よろしくお願いいたします。

  • PreviewKeyDownについて

     Form1にButton1とTextBox1、TextBox2、TextBox3を配置します。 TextBox2はMultiLineにします。 プログラムを実行し、1度目は4などを入れ「Enterキー」を押し、間違えます。 TextBox3には「不正解」と表示されます。 次に、textbox2に正解の3を入れ「Enterキー」を押しても「正解」とは表示されません。 私の頭では「正解」と表示されると思うのですが、どこがおかしいのでしょうか。  もう一つ、TextBox2はEnterキーを押したときの「ピン」という警告音が出ないようにMultiLineにしていますが、MultiLineにせず、警告音を消す方法はありますか。宜しくお願いいたします。  以下はコードです。 Dim Problem As String Dim RightAnswer As String Dim Answer As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load problem = "1+2=" RightAnswer = "3" End Sub Private Sub TextBox2_PreviewKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles TextBox2.PreviewKeyDown If e.KeyCode = Keys.Enter Then Answer = Me.TextBox2.Text If Answer = RightAnswer Then Me.TextBox3.Text = "正解" Else Me.TextBox2.Text = "" Me.TextBox3.Text = "不正解" Me.TextBox2.Focus() End If End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.TextBox1.Text = Problem Me.TextBox2.Focus() End Sub

このQ&Aのポイント
  • DCP-L2550DW往復ハガキ印刷のやり方がわからない方へ、簡単な解決方法を紹介します。
  • DCP-L2550DW往復ハガキ印刷でトラブルが発生した方へ、試した方法やエラーの解決策をお伝えします。
  • DCP-L2550DWの往復ハガキ印刷に関する質問に対するFAQをまとめました。お困りの方はご参考にしてください。
回答を見る

専門家に質問してみよう