• ベストアンサー

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

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

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.7

基本的に、Enterキーを押せばメッセージボックスの 「はい」を押すことになります。キーボードの 「N」を押せばメッセージボックスの「いいえ」 を押すことになります。 バーコードリーダーの設定で"ENTER"は設定できるのでは?

osarusan0214
質問者

お礼

む~ なかなかうまいこといかないですね~^^; ただ色々勉強になりました! 長々と付き合っていただきましたので、ベストアンサーとさせていただきます! ありがとうございました!!

その他の回答 (7)

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.8

ダミーのコマンドボタンを追加(仮に Command1 とします。) 目的のテキストボックスと Command1 の TabStop を True、 それ以外のコントロールの TabStop を False にします。 Command1 は、間違ってクリックされる危険を出来るだけ少なくするように 0, 0 の位置に、サイズも 縦横とも 0 にしておきます。 Private Sub Command1_Enter()   With Me.TextBox1     .SetFocus     .SelStart = 0     .SelLength = Len(.Text)   End With End Sub これでとりあえず textbox1 が選択状態になります。 > msgbox "aaa",vbinformation この処理をどこで実行するか、ですが 他に、textbox1 の AfterUpdate Command1 の Enter なども考えられますね。 一長一短がありますが。 いろいろテストして、最適なイベントで実行するようにしてください。

osarusan0214
質問者

お礼

うまくいかないですね^^; とりあえず、別の方法を探して見ます! ありがとうございました!!

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

No4では、 If MsgBox("aaa", vbYesNo, "いいえを選択すればフォーカスが外れます") = vbYes Then のようにしたら、わかりやすいのでは、と。

osarusan0214
質問者

補足

説明下手で申し訳ありません^^; バーコードリーダーを使用したい!! ということを先に言っておくべきでした。 なので、基本的にキーボード操作。マウス操作はしたくないのです。 そのためのテキストボックスを固定したい!という質問です。 (起動と終了はマウスorキーボード操作を行います。そのため、固定して他をクリックできないと終了ができなくなってしまいますToT)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

No4の中の Dim ret As Integer は使っていないのでコメントアウトか削除 しておいてください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

ひょっとしたら以下では、 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim ret As Integer If MsgBox("aaa", vbYesNo) = vbYes Then With Me!TextBox1 .SetFocus End With Cancel = True Else Cancel = False End If End Sub

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

考えておられるイベントの順序、内容をもう一度確認。 1 テキストボックスに値を打ち込みテキストボックスから移動すると確定  イベント内容は別のセルに入力した文字の表示です 2 フォーカスは別のボタンに移動してしまいます   ボタンの機能は、終了するためのunloadです 3 これが動作した後、またtextbox1を選択状態にしたいです いずれにしてもTextBox1のフォーカス喪失時のイベントに 再びTextBox1にフォーカスを自在に戻したり外したりするのは 面倒なので、あっさりとボタンクリック時のイベントで、 Private Sub CommandButton100_Click() MsgBox "aaa", vbInformation Me!TextBox1.SetFocus End Sub のほうが、簡単なような。TextBox1_Exitは最重要課題 ですか。

osarusan0214
質問者

補足

これはつまり、ボタンをクリックしないと戻らないのでは? と思ってしまうのは、私が浅はかだからですかね^^;? あ!大切なことを書き忘れていました! 別にテキストボックスやボタン等は増設してもまったく問題ありません!! Tabindexで順序を変えたりもOKです!! この条件を付けても厳しいですかね?

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

フォーム内の構成や、 >テキストボックスに値を打ち込みテキストボックスから移動すると確定 このときフォーカスはどこに一旦移動しているのか、 >ただ、これですと他に配置してあるボタンが使えないです このボタンの機能は? など、疑問点もありますが、要はフォーカスを一旦TextBox1から 外すことができて、外すときに何のイベントも起こさなければ いいのならば、テキストボックスではなく何のイベントも 起こさないただのボタンを設定してそのボタンをクリックすれば フォーカスが一旦TextBox1からはずれます。 ただ、 >msgbox "aaa",vbinformation が実際にはどのようなイベントになっているのか 定かでないのでこうした手法がいいのか分かりませんが。

osarusan0214
質問者

補足

失礼しました^^; 説明不足でしたorz まず一つ目フォーカスは別のボタンに移動してしまいます。 二つ目 ボタンの機能は、終了するためのunloadです^^ 三つ目 イベント内容は別のセルに入力した文字の表示です。 という感じです。 フォーム内の構成はかなりごちゃごちゃしちゃってます^^;

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

TextBox1のみフォームにある場合はフォーカスを 外すことができないので、フォーカスを移動できる 他のTextBoxがある場合など、そちらにフォーカスを 一旦移動して、 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) MsgBox "aaa", vbInformation Cancel.Value = True Me!TextBox1.SetFocus End Sub

osarusan0214
質問者

補足

fmfm なるほど~ ただ、これですと他に配置してあるボタンが使えないですToT どうすればこれも一緒に解決できますか~?

関連する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 フレーム内のイベント

    フレーム内に、テキストボックスを配置し、 そのテキストボックスをExitした場合にFormatを変更したいのですが、 フレーム内にテキストボックスがあるためかイベントが発生しません。   1) Frame1 の中に Textbox1 を配置   2) Textbox1には数値を入力   3) 入力後、次のコントロールに移動した場合、    Textbox1.textをformat(Textbox1.text,"#,##0")にする   Private Sub Textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)     msgbox "Exit"   End Sub   としましたが、ユーザフォームを終了した時に、msgが出力されます。 フレーム内のイベントはどのようにすればよいか、教えていただきたいです。 よろしくお願いいたします。

  • エクセル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で同じテキストボックスを繰り返し使いたい

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

  • エクセルVBA テキストボックス処理?

    エクセル2000 VBAにて入力フォームの テキストボックス1に下記を書き込んだのですが カーソルがテキストボックス1にあるとき 他の処理(コマンドボタン、マウスにて他のテキストボックスに カーソルを移すなど)が出来ません。 フォームを閉じるときもメッセージボックスのコメントがでます。 どの処理を行ってもテキストボックス1の処理が終わってからしか 行わないようなのですが??? Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Integer '品番確認用 For i = 3 To 100 If Sheets("品番マスタ").Cells(i, 1) = TextBox1.Text Then Label1 = Sheets("品番マスタ").Cells(i, 2).Value 'メーカー Label2 = Sheets("品番マスタ").Cells(i, 3).Value 'タイプ Label3 = Sheets("品番マスタ").Cells(i, 4).Value '品名 Label4 = Sheets("品番マスタ").Cells(i, 5).Value '内容量 Label6 = Sheets("品番マスタ").Cells(i, 8).Value '背番号 Exit Sub End If Next i MsgBox "品番がありません" TextBox1 = "" Cancel = True 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

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

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

  • ユーザーフォームの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

  • リストボックス

    すいません以下の処理に困っております。 リストボックスで値を取得して他のリストボックスにその値を 出力したいのですがまったくできません。 <例> リストボックス1 a b c リストボックス2(上で選択した値を出力) a ちなみに構文は、 ------------------------------------------------------------ Private Sub btn選択_Click() ListBox2.Text = ListBox1.Text 'ListBox1.ListIndex + 1 & ": " & ListBox1.Text End Sub Private Sub CommandButton1_Click() End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub UserForm_Initialize() With ListBox1 .AddItem "スケジューラ" .AddItem "データ変換" .AddItem "DWH Server" .AddItem "PPP Server" .AddItem "ファイヤーウォール" .AddItem "暗号オプション" End With End Sub ---------------------------------------------------- 初心者でまったくできません。 御教授をお願いします。

専門家に質問してみよう