TEXTBOX_CHANGEのイベント抑制

このQ&Aのポイント
  • エクセルのVBAで、ユーザーフォーム内のTEXTBOXの内容を変更した際のイベント抑制方法を教えてください。
  • ユーザーフォーム内ではApplication.EnableEventsは使えないのかな?
  • ご教授をお願いします。
回答を見る
  • ベストアンサー

TEXTBOX_CHANGEのイベント抑制

TEXTBOX_CHANGE イベントでのイベント抑制方法を教えてください。 エクセルのVBAで、ユーザーフォーム内のTEXTBOXの内容を変更した際にイベントが発生しない様にしたいのですが、うまくいきません。 Private Sub TextBox1_Change() Application.EnableEvents = False UserForm1.TextBox1.Text = "" Application.EnableEvents = True UserForm1.TextBox1.SetFocus End Sub  ユーザーフォーム内では Application.EnableEvents  は使えないのかな?? どなたかご教授をお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

UserFormには影響を及ぼさないと思いますよ フォーム変数として Dim bFlag as Boolean を定義しておいて Private Sub TextBox1_Change()   ' 再突入際には処理を中断する   if bFlag then Exit Sub   ' 再突入用にフラグを設定   bFlag = True   TextBox1.Text = ""   ' 次回のためにフラグを設定   bFlag = False End Sub

B_BOSS
質問者

お礼

ありがとうございました。  教えていただいた方法で、うまく動作しました。

関連するQ&A

  • エクセルVBAでユーザーフォームのテキストボックス

    ユーザーフォーム上にテキストボックスを8個設置しました。 そこに数値が入力された場合は自動的にカンマ区切りが表示されるように以下のコードを書きました。 これで希望の動きはしてくれるのですが、このやりかたは正しいでしょうか? また、テキストボックスは8個あるので、それぞれに下記のように8通りコードをかかなければいけないのでしょうか?ご教示ください。 Private Sub TextBox1_Change()   If IsNumeric(TextBox1.Value) Then Application.EnableEvents=False     TextBox1.Text = Format(TextBox1.Value, "#,##0") Application.EnableEvents=True   End If End Sub 途中(2~7)略 Private Sub TextBox8_Change()   If IsNumeric(TextBox8.Value) Then Application.EnableEvents=False     TextBox8.Text = Format(TextBox8.Value, "#,##0") Application.EnableEvents=True   End If End Sub

  • アクセス イベントの発生を停止させたい

    アクセスでイベントを発生しないようにしたいのですが エクセルで使用できる、Application.EnableEvents = Falseを使うと、 コンパイルエラーになります。 フォームを指定して、 .FilterOn = True を通ると、 該当のフォームのPrivate Sub Form_Current()イベントが発生してしまうので、 Application.EnableEvents = Falseのように、イベントの発生を停止させたいです。

  • VBA ユーザーフォームのChangeイベントを停止したい

    ユーザーフォームのChangeイベントは Application.EnableEvents = Falseで停止できないのですか? シート上のChangeイベントの停止はできましたが、ユーザーフォーム上のテキストボックス等のChangeイベントは停止できませんでした。 ユーザーフォームのChangeイベントを停止する方法があれば教えてください。

  • Vba UserForm SetFocus

    ExcelのVbaでUserForm上に英単語のタイピング練習のソフトを作ろうとしていますが、うまくいきません。コントロールのイベントについての理解が不足しているのが分かりました。 ユーザフォーム上の複数のテキストボックス間のフォーカスの移動について教えて下さい。 UserForm1にテキストボックスを3つ、コマンドボタンを1つ配置しました。それぞれTextBox1、TextBox2、TextBox3、CommandButton1とします。 Private Sub CommandButton1_Click() TextBox3.SetFocus ・・・(1) End Sub Private Sub TextBox3_Enter() MsgBox "In TextBox3" TextBox2.SetFocus ・・・(2) End Sub 各TextBoxのTabStopプロパティは「True」、「TabIndex」は番号順になっています。 コマンドボタンのTabStopプロパティは「False」にしています。 フォームを表示し、コマンドボタンをクリックするとエラーが発生します。 (2)の実行の後(?)、(1)がエラー表示されます。 各イベントの発生のタイミング、連鎖、終了等の理解が不足していて、その理由がよく分かりません。どなたか教えていただけないでしょうか。よろしくお願いします。

  • VBAから変更した時だけイベントを発生させない方法

    Excel VBA で、コンボボックスの選択をユーザーが変更した時はイベントハンドラが呼び出されて処理をしていますが、VBAのコードからコンボボックスの選択を変更した時には、このイベントハンドラが呼び出されないようにしたいのですが、どのように記述すればよいでしょうか。 例えば、下記のコードの (A) の部分で、VBAのコードからコンボボックスの選択を変更していますが、ここでイベントが発生しないようにしたいのですが、Application.EnableEvents = False を記述してもイベントが発生していますがなぜでしょうか。どのように記述すれば (A) の部分でイベントが発生しなくなりますでしょうか。 よろしくお願いします。(Windows7 , Excel2010 ) ---Module1---------- Option Explicit Sub main()  UserForm1.Show End Sub ---UserForm1-------- Option Explicit Private Sub UserForm_Initialize()  Dim i As Integer  ComboBox1.Style = fmStyleDropDownList  For i = 1 To 30   ComboBox1.AddItem Format(i, "00")  Next i End Sub Private Sub CommandButton1_Click()  Dim num As Integer  Dim index As Integer  num = ComboBox1.ListCount  index = ComboBox1.ListIndex  If index = num - 1 Then   Application.EnableEvents = False   ComboBox1.ListIndex = -1 '<----------(A)   Application.EnableEvents = True  Else   ComboBox1.ListIndex = index + 1  End If End Sub Private Sub ComboBox1_Change()  MsgBox ("ComboBox1_Changeイベント発生") End Sub ------------------------------------

  • VBA初心者です。

    VBA初心者です。 ユーザーフォームにテキストボックスとコンボボックスを1つずつ作り、それらを Private Sub ComboBox1_Change()    TextBox1.Value = ComboBox1.Value End Sub というふうに繋いでるとき、テキストボックスにフォーカスをあてさせないようするため、 Private Sub UserForm_Initialize()    TextBox1.Enabled = False End Sub このようにしました。ここまでは問題ありません。質問したいことは、このときテキストボックスに表示させる文字が淡色になるのを防ぐ方法です。    TextBox1.Locked = True これを上に付け加えればうまくいきそうなのですが、うまくいきませんでした…。どなたか解決方法を教えて下さい。

  • EXCEL2000でTextBox1にフォーカスをあてたい

    いつもお世話になります。 OSはWin XP Home EXCEL2000です。 現在以下の現象で悩んでおります。 EXCEL2000のVBAでUserform1(シート上ではない方です)を作り、そこにTextbox1(TabIndex = 0)とCommandButton1(TabIndex = 1)を配置しました。 UserFormを初回に表示した時、及びフォームの右上の「X」で閉じた後は問題ないのですが、以下のコードでUserForm1を閉じた後に再び他のマクロからUserForm1.showとやると、どこにもフォーカスがない状態でUserForm1が立ち上がります。 Private Sub CommandButton1_Click() UserForm1.TextBox1.SetFocus UserForm1.Hide End Sub 一方他のマクロから UserForm1.show UserForm1.textbox1.SetFocus とやってみても期待通りにフォーカスはあたりません。 どのような場合でもUserFormが表示されたときにはtextbox1にフォーカスをあてるようにしたいのです。 尚、この現象はEXCEL2002だと同じコードでも問題なくフォーカスがあたります。 以上よろしくお願いします。

  • VBAでシート上のTEXTBOXの値を変更するとイベントが無限に入る。

    ExcelのVBAでシート上に貼り付けたCheckBoxで  内容を変更したくない場合、  下記のようなプログラムを作りました。 Private Sub CheckBox1_Click()     MsgBox "内容を変更しないでください"     If CheckBox1.Value = True Then       CheckBox1.Value = False     Else       CheckBox1.Value = True     End If End Sub すると、イベントが入りまくって、抜け出せなくなりました。 セルの場合は、Application.EnableEvents = False を使用してイベントを止めることができたのですが、 コントロールの場合は、そのような命令が見つかりません。 なにか良い手はないでしょうか。 よろしくお願いいたします。

  • ExcelマクロのApplication.EnableEvents

    Sub AAA()   Application.EnableEvents = False   If a = 0 then     処理A   End If   Application.EnableEvents = True End Sub このようなコードを組んでいます。 処理Aは、他シートへの書込みを行っており、 他シートのWorksheet_Changeイベントが動いて欲しくないので、 上記の位置にApplication.EnableEventsのFalseとTrueを入れたのですが、 (FalseとTrueを入れた位置は「If文の前後」ではなく、「コードの最初と最後」です) 処理Aによって他シートのWorksheet_Changeイベントも動きました。 ここで、  Application.EnableEvents = False  処理A  Application.EnableEvents = True のように記述したら、処理Aによる他シートのWorksheet_Changeイベントは止められました。 動かしたくない処理がある場合は、 その処理を行っている部分をピンポイントでFalseとTrueで挟まないといけないのでしょうか。 (最初と最後に宣言するのではダメなのでしょうか) それとも今回のような動作をした要因は別にあるのでしょうか。

  • エクセル マクロ 初心者です

    エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。