• ベストアンサー

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) で記述していいのかわかりません。教えてください。

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

  • ベストアンサー
noname#187541
noname#187541
回答No.2

No.1です。 t2に戻って新たに値を入力するのだから、Cancel = True の前後)どちらでもいいです)に t2.Text = "" と入れてt2の内容をクリアしておくといいかもしれません。

yamutya
質問者

お礼

明快な回答ありがとうございました。 無事 思い通りの ものができました。 ありがとうございました。

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

標準モジュールに 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) 以下略 東京 国立 八王子 青梅 東村山 神奈川 横浜 相模原 京都 八幡 向日 常用 がシートに入力されます。 結構私にとって難しかった。不適当箇所もあるかも。ご参考に。 ーーー しかしこの質問の発想は普通は使わないと思う。複雑になり、もろいプログラムに(操作によってはエラーが出やすい)なりやすいと思う。

yamutya
質問者

お礼

詳しい回答を ありがとうございました 参考になります。 imogasiさんには たびたびお世話になります。

全文を見る
すると、全ての回答が全文表示されます。
noname#187541
noname#187541
回答No.1

こんにちは。 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 こんな感じでしょうか。

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

関連するQ&A

  • テキストボックス内の簡単な計算

    はじめまして、よろしくお願いいたします。 エクセル(2003)のマクロで質問です。 いくつか複数のテキストボックスが配置されています。 加算など簡単な計算をテキストボックス内で計算させていおいて、 最終的にボタンで、それら各々のテキストボックスに対応させた エクセルのシートのセルに代入させようとしています。 さて、テキストボックス内で簡単な計算をさせるため、 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = Evaluate(TextBox1.Text) End Sub Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2.Text = Evaluate(TextBox2.Text) End Sub Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox3.Text = Evaluate(TextBox3.Text) End Sub … とさせましたが、 何も入力がないテキストボックスは そのままなにもしなくていいよ、とさせたいですのですが、 上記のままだと、何もない(値が入力されていない) テキストボックスに到達すると 止まります。 何も入力がないテキストボックスは 何もしなくていいよ、は どうしたらよいでしょうか? 誠に不勉強で恐縮ですが ご教授願います。

  • EXCEL VBA フォームコード簡素化

    EXCEL VBAのフォームにテキストボックスを複数作成しております。 下記のように複数のテキストボックスで同じ処理を行うのですが コントロール→ループか何かで簡素化できないでしょうか? Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox17.Value = Format(TextBox17.Value, "0.00") End Sub Private Sub TextBox18_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox18.Value = Format(TextBox18.Value, "0.00") End Sub Private Sub TextBox19_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox19.Value = Format(TextBox19.Value, "0.00") End Sub Private Sub TextBox20_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox20.Value = Format(TextBox20.Value, "0.00") End Sub Private Sub TextBox21_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox21.Value = Format(TextBox21.Value, "0.00") End Sub Private Sub TextBox22_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox22.Value = Format(TextBox22.Value, "0.00") End Sub 以上お力添えお願いいたします。

  • エクセルVBA 時刻の計算 テキストボックス

    お知恵をお貸しください。 入力を簡単にするためのユーザーフォームを作っています。 開始時間(txt開始)に「14:00」 終了時間(txt終了)に「19:00」と入力すると 時間(txt時間)は「5:00」(19:00-14:00=5:00) 通常(8:00~18..00)に「4」(4:00*24) 時間外(6:00~8:00、18:00~22:00)に「1」(1:00*24) 深夜(22:00~6:00) と表示させたく思います。 通常、時間外、深夜のテキストボックスに表示することができません。 よろしくお願いします。 Private Sub txt時間_Exit(ByVal Cancel As MSForms.ReturnBoolean) If txt開始 > TimeValue("8:00") And txt開始 < TimeValue("18:00") Then txt通常.Text = TimeValue(txt時間.Value) * 24 End If End Sub Private Sub txt終了_Exit(ByVal Cancel As MSForms.ReturnBoolean) txt時間.Value = Format((TimeValue(txt終了.Text) - TimeValue(txt開始.Text)), "h:mm") End Sub

  • エクセルVBAについて質問です。

    エクセルVBAについて質問です。 ユーザーフォームのテキストボックスに数字以外を入力するとエラーメッセージが出るように関数を作ったのですが、 Private Function AA(objtextbox As MSForms.TextBox) As Boolean Dim A As String AA = False A = Trim(objtextbox.Text) If objtextbox.Text <> "" Then If IsNumeric(A) = False Then MsgBox "数値 Error", vbCritical With objtextbox .SetFocus .SelStart = 0 .SelLength = Len(.Value) End With AA = True End If End If End Function Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub テキストボックス200近くある場合、1つ1つに Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub と作っていかなくてはいけないのでしょうか? プロシージャ名に変数使おうとしたら上手くできませんでした。 どなたか助けてください。

  • VBAのExitイベントについて

    VBA(Excel)についてご質問します。 フォームにて、IDというオブジェクト名のテキストボックス、 Private Sub ID_Exit(ByVal Cancel As MSForms.ReturnBoolean) という関数(Exitイベント)を用意しました。 IDにフォーカスがある状態で、フォーカスを移動しようとすると、この関数が必ず実行されるかと思います。 そのとき、特定のボタン(例えばキャンセルボタン)がクリックされたためにフォーカスが移動したときは、この関数の処理を実行したくない。もしくはこの関数内で特定のボタンがクリックされたこと(そのためにフォーカスが移動したこと)を検出して、処理をスキップしたいです。 どうすれば実現できますでしょうか? よろしくお願いします。

  • エクセルVBAのテキストボック、Exitイベント

    エクセルのVBAで簡単なデータ登録のマクロを作成しています。 フォームのテキストボックスに入力した値を、エクセルシートに展開する程度の機能です。 製品コードを必須にしており、製品コードが入っていない時はエラーメッセージを表示します。 製品コードが入力されていないときは、製品コードのテキストボックスにフォーカスがあたったままにしたく、ネットで調べてExitイベントに以下の処理を作成しました。 Private Sub mySeiCD_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim myMsgBoxValue As String If Len(mySeiCD.Value) = 0 Then myMsgBoxValue = MsgBox("製品コードは入力必須です。" ,vbOKOnly, "製品コード未入力") Cancel = True End If End Sub 製品コード未入力の際にフォーカスはそのままになりましたが、フォームを閉じることができなくなりました。 閉じるボタンを押しても、Exitイベントにひっかかてしまいます。 当然の動きと思いますが、回避する方法はありませんでしょうか? Exitイベントを使わずに、SetFocus を使った場合は、どうしても、次のテキストボックスにフォーカスが移動してしまいました。 以上、長くなりましたが、よろしくお願い致します。

  • Excel VBAでフォーカスを移動しない方法

    Excel VBA リストのソースを設定してあるコンボボックスから次のコンボボックスに移動する際、入力にエラーあれば フォーカスを移動しないようにするコードはどのようにすればいいのですか? 現在は Private Sub [コンボボックス名1]_Exit(ByVal Cancel As MSForms.ReturnBoolean) If [コンボボックス名2] = "" Then MsgBox "値が不正です。", vbInformation, "フォーム名" End If End Sub としています。

  • エクセルマクロのテキストボックスを選択したい

    こんばんわ! エクセルマクロのユーザーフォームのテキストボックスを選択したままにしたいのですが、どうしたらよいでしょうか? 具体的には テキストボックスに値を打ち込みテキストボックスから移動すると確定?するようにしています。(下のプログラム) Private Sub textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) msgbox "aaa",vbinformation endsub これが動作した後、またtextbox1を選択状態にしたいです。 アドバイスの程よろしくお願いいたします。

  • ByVal Cancel As MSForms.R

    (ByVal Cancel As MSForms.ReturnBoolean)の意味を教えてください。 エクセルのユーザーフォームで、 クリックした場合は、フォームモジュールに Private Sub UserForm_Click() End Sub のひな形が出来て、 ダブルクリックした時は Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean) End Sub が出来上がります。 なぜ、DblClickの時はカッコの中に色々入るのでしょうか? それにByValは値渡しの時に使う言葉ですよね? DblClickの時は、何かの値を渡しているのですか?

  • ユーザーフォームのSetFocusが働かない?

    エクセルのユーザーフォームにtextboxが2つとCommandButtonが2つ配置しています。 textbox1に入力されるのを10以下に限定するため、それ以上の数字が入力されるとExit時にエラーを表示し、textbox1にフォーカスを戻したいのです。 ですが、以下のようにするとエラー時にはtextbox2も飛ばしてCommandButton1にフォーカスされます。 どのようにするのが正解なのでしょうか。 よろしくお願いします。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If CInt(TextBox1.Text) > 10 Then MsgBox ("ダメ") TextBox1.SetFocus End If End Sub

スキャナー機能が使えない
このQ&Aのポイント
  • Windows11を22H2にアップデート後、Brother Utilitiesをインストールしなおしたのですが、Acrobatなどからスキャナーが見つかりません
  • お使いの環境はWindows11 22H2で、スキャナーを有線LANで接続しています。
  • 関連するソフトとしてはAcrobatを使用しています。
回答を見る

専門家に質問してみよう