- ベストアンサー
vbaで同じテキストボックスを繰り返し使いたい
エクセル2003 VBAでデータ入力フォームを作成中です。 データ2種類あり、2つのtextbox(t1 , t2)作りました。 t1のデータ入力後はEnterKeyでExitして private SUB t1.exit(ByVal Cancel As MSForms.ReturnBoolean) でエクセルのセル内への所定の場所に書き込みを実行しています。 ところが次にfocus(tabというのか)が移動する t2では 繰り返しデータを入力したいのです。ですからt1と同じようにしたのではEnterでt1にfocusが逃げてしまいます。データは2桁の数字です。Enterで確定してさらに繰り返しt2内でデータを入れ、0を入力しEnterしたときに初めてt1に移らせたいのです。EnterKeyBehaviorをtrueにするのか また private SUB t2.Exit(ByVal Cancel As MSForms.ReturnBoolean) で記述していいのかわかりません。教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
No.1です。 t2に戻って新たに値を入力するのだから、Cancel = True の前後)どちらでもいいです)に t2.Text = "" と入れてt2の内容をクリアしておくといいかもしれません。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
標準モジュールに Public i Public j Sub test01() i = 2 j = 2 UserForm1.Show End Sub iは明細最初行、jは明細最初列(B列)を指定。 ーーーー Userform1にTextBox1とTextBox2を貼り付け。 TextBox1のイベントで Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Cells(i, 1) = TextBox1.Text TextBox2.SetFocus End Sub --- TextBox2のイベントで Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If TextBox2.Text = "0" Then TextBox2.Text = "" i = i + 1 j = 2 Cancel = False TextBox1.SetFocus MsgBox "第" & i & "行目入力" Else Cells(i, j) = TextBox2.Text TextBox2.Text = "" j = j + 1 End If Cancel = True TextBox2.SetFocus End Sub <実行関係> 標準モジュールの test01を実行する。 ーー <入力のお約束。> そして次ぎの操作を入力する。 (A)はテキストボックス1に入力 それ以外はテキストボックス2で入力。 (E)はENTERキーを押すことを意味す。 (0)は半角0とENTERキーを押す。(全角で0を入れないよう用心)。 (C)はESCキーを押すことを意味す。 ことを意味する。 テキストボックス1に対し、まず東京と入力しENTER。以下下記にしたがって入力する。 東京(A) 国立(E) 八王子(E)青梅(E) 東村山(E) 0(E) (ESC)(TXB1クリック)神奈川(A)横浜(E) 相模原(E) 0(E) (ESC)(TBX1クリック)京都(A) 八幡 向日 常用(E)0(E) 以下略 東京 国立 八王子 青梅 東村山 神奈川 横浜 相模原 京都 八幡 向日 常用 がシートに入力されます。 結構私にとって難しかった。不適当箇所もあるかも。ご参考に。 ーーー しかしこの質問の発想は普通は使わないと思う。複雑になり、もろいプログラムに(操作によってはエラーが出やすい)なりやすいと思う。
お礼
詳しい回答を ありがとうございました 参考になります。 imogasiさんには たびたびお世話になります。
こんにちは。 Exitイベントは、Cancel = True とすることで、イベントをキャンセル出来ます。 データを入力してExitイベントで入力したデータが0以外の時に処理をしてCancel = Trueにして元のテキストボックスに戻る、とすればいいでしょう。 Private SUB t2.Exit(ByVal Cancel As MSForms.ReturnBoolean) If t2.Text <> "0" Then 'ここにデータに対する処理を書く Cancel = True End If こんな感じでしょうか。
お礼
明快な回答ありがとうございました。 無事 思い通りの ものができました。 ありがとうございました。