TEXTBOX_CHANGEのイベント抑制
- エクセルの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 は使えないのかな?? どなたかご教授をお願いします。
- B_BOSS
- お礼率10% (18/166)
- Visual Basic
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
UserFormには影響を及ぼさないと思いますよ フォーム変数として Dim bFlag as Boolean を定義しておいて Private Sub TextBox1_Change() ' 再突入際には処理を中断する if bFlag then Exit Sub ' 再突入用にフラグを設定 bFlag = True TextBox1.Text = "" ' 次回のためにフラグを設定 bFlag = False End Sub
関連する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
- ベストアンサー
- Excel(エクセル)
- アクセス イベントの発生を停止させたい
アクセスでイベントを発生しないようにしたいのですが エクセルで使用できる、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)がエラー表示されます。 各イベントの発生のタイミング、連鎖、終了等の理解が不足していて、その理由がよく分かりません。どなたか教えていただけないでしょうか。よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- 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 ------------------------------------
- ベストアンサー
- Excel(エクセル)
- 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 これを上に付け加えればうまくいきそうなのですが、うまくいきませんでした…。どなたか解決方法を教えて下さい。
- ベストアンサー
- Visual Basic
- 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つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございました。 教えていただいた方法で、うまく動作しました。