• ベストアンサー

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

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

  • pythu
  • お礼率100% (5/5)

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

回答1だと永久に抜けられないので訂正。 Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If ComboBox1.Value = "" Then MsgBox "値が不正です。", vbInformation, "フォーム名" Cancel = True End If End Sub

pythu
質問者

お礼

できました、ありがとうございました。

その他の回答 (1)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

ComboBox1.の値が空欄だった場合、抜けられないようにするには、 Cancel = Trueを入れてみてください Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If ComboBox1.Value = "" Then MsgBox "値が不正です。", vbInformation, "フォーム名" End If Cancel = True End Sub

pythu
質問者

お礼

できました、ありがとうございました。

pythu
質問者

補足

できました、ありがとうございました。

関連するQ&A

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

    質問番号:5013953でフォーカスを移動しない方法を質問し、解決しました続きの質問です。 Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If ComboBox1.Value = "" Then MsgBox "値が不正です。", vbInformation, "フォーム名" Cancel = True End If End Sub この場合、コンボボックスをExitで移動しなくしたまでは良かったのですが、 これによって他の部分で不具合が生じたので再度質問させてください。。 フォームにデータを入力中に中断する必要が出た場合、コマンドボタンで[終了]をつくったのです。 Private Sub 終了cmd_Click() End 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について質問です。

    エクセル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 と作っていかなくてはいけないのでしょうか? プロシージャ名に変数使おうとしたら上手くできませんでした。 どなたか助けてください。

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

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

  • エクセル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のExitイベントについて

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

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

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

  • エクセル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 を使った場合は、どうしても、次のテキストボックスにフォーカスが移動してしまいました。 以上、長くなりましたが、よろしくお願い致します。

  • エクセルVBAにて、2回エラーになってしまう

    現在、エクセルVBAにて、エラーのチェックを行っているのですが、 他の数値項目は問題ないのですが、下記の個所のみ、 エラーメッセージが2回出力されます。 (1回目のExitSubがきかない) お分かりになる方がおられましたら、ご回答、よろしくお願い致します。 '費用(明細1) Private Sub txtMei4_1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Set mytxt = Me.Controls("txtMei4_1") If mytxt.Text <> "" And _ IsNumeric(mytxt.Text) = False Then MsgBox "数値を入力してください" Cancel = True Exit Sub ←ここで、Exitせず、もう一度このPrivate Subに戻ってくる End If End Sub 他のテキストでも同様のチェックをしているのですが、 この部分のみ、msgboxが2回出力されます。 申し訳ありません。 よろしくお願い致します。

専門家に質問してみよう