
エクセルのマクロを作成中なのですが、
チェックボックスのTrue/Falseを他のプロシージャから直接変更すると、
clickのイベントに設定してあるはずのプロシージャが反応してしまいます。
本来、そういった操作で反応するのはchangeのイベントだと認識しているため、
意図しない挙動になってしまって困っています。何が原因でしょうか?
エクセルのバージョンは2013、VBAのバージョンは7.1です。
以下ソース
(ユーザーフォームにテキストボックス「TextBox」とチェックボックス「CheckBox」を配置)
テキストボックスに何かを入力するとチェックボックスをTrueにしますが、
そうするとCheckBox_Clickでないと表示されないはずのメッセージボックスが出てしまいます。
Private Sub TextBox_Change()
Me.CheckBox = True
End Sub
Private Sub CheckBox_Click()
MsgBox "test"
End Sub

No.2ベストアンサー
- 回答日時:
こんばんは。
>他のプロシージャから直接変更すると、
このように、ActiveControl で、回避すればよいと思います。
If ActiveControl.Name = CheckBox1.Name Then
なお、私なら、このようにしていると思います。TextBox が空なら、CheckBox もオフになるということです。意味が違っていたら、ご指摘ください。
Private Sub TextBox_Change()
If Me.TextBox.Text <> "" Then
Me.CheckBox.Value = 1
Else
Me.CheckBox.Value = 0
End If
End Sub
Private Sub CheckBox_Click()
'直接処理しないと、MsgBox は働かない。
If ActiveControl.Name = CheckBox.Name Then
MsgBox "Test"
End If
End Sub
ご回答ありがとうございます。
外部から値が変わった時と、使用者が直接チェックボックスを操作した時で
場合分けしたかったので、まさしくこのような挙動をイメージしていました。
たしかに直接操作したかどうかはフォーカスの有無で判断できるかな?とは思ったのですが、
ActiveControlの使い方を知らなくて行き詰まっていました。
教えていただいたソースをうまく組み込んでみようと思います。
No.1
- 回答日時:
こちらで動作確認しました。
「CheckBox.Value」が False → True へ変わるとき、そして True → False へ変わるときも
1.Private Sub CheckBox_Change()
2.Private Sub CheckBox_Click()
の順でイベントが発生しますね。
仕様がそのようになっています。
CheckBox の チェック状態を何に利用しようとしているのか?
(おそらくTextBoxに変更があったことを残す?)
CheckBoxの チェック(またはClick)によって、何をしたいのか?
を示せば、対応可能な(打開策を提案してくれる?)回答者もたくさんいますよ。
ご回答ありがとうございます。
やはり仕様なんですね…。勘違いしてしまいそうなので、
チェックボックスにClickのイベントを使用するのは避けようと思います。
具体的にマクロでやりたいことですが、
まずエクセルのシートをデータベースとして使っていまして、
それらのセルのデータを読み取って、各オブジェクトの値に格納していくことで
前回ユーザーフォームで使用者が操作した状態を復元することを考えています。
チェックボックスは、各オブジェクトの挙動を変えるオプションのような項目として
使っていまして、使用者が任意にClickでFalseからTrueに切り替えたときだけ、
「このオプションはAの代わりにBを行うようにします。よろしいですか?」
といった確認メッセージを表示させたかったのですが、
Initializeなどで前述の状態の復元を行って、
チェックボックスを直接Trueにした場合であってもその都度確認メッセージが
実行されてしまっていたので、それが冗長に感じたという経緯でした。
テキストボックスからも間接的にチェックボックスを制御したいと考え、
CheckBox_Clickのプロシージャでコードを組み立てたところ
このような挙動が発覚しましたので、
セルから値を読み取り~といったあまり関係なさそうなくだりは抜きにしまして、
最小限のオブジェクトだけを配置したユーザーフォームを作ってみましたら
やはり同じような挙動になってしまったため、
それをそのまま質問用のソースとして使わせていただきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい
Visual Basic(VBA)
-
【VBA】シート上の複数のチェックボックスのうちどれか一つでも変更した場合のイベント
Visual Basic(VBA)
-
エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?
Excel(エクセル)
-
-
4
ClickとChangeイベントの違いはどこにあるの。
Visual Basic(VBA)
-
5
2つのマクロでチェックボックスが連動しません
Visual Basic(VBA)
-
6
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
7
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
8
Excel VBAでCheckboxの名前を変数にとって値を調べたい
Visual Basic(VBA)
-
9
UserForm1.Showでエラーになります。
工学
-
10
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
11
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
12
エクセルVBAでチェックボックスにチェックを入れる
Excel(エクセル)
-
13
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
複数選択のListBoxでClickイベントが拾えません
Visual Basic(VBA)
-
16
なぜエラーになるのでしょう?アクティブコントロール
その他(Microsoft Office)
-
17
エクセル VBA CheckBox名に変数を使用
Excel(エクセル)
-
18
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
19
VBA。複数のChangeイベントをまとめる方法
Visual Basic(VBA)
-
20
CheckBoxの配列化
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VB】タブ切り替え時のイベント
-
EXCEL VBA でIEを制御して、INP...
-
KEYPREVIEW=TRUEについて。意味...
-
タブキー押下時のイベントをひ...
-
(VBA)チェックボックスのclick...
-
テキストボックスの入力文字を1...
-
VB IEブラウザへのキーイベント...
-
コマンドボタン(入力)をクリッ...
-
Excel VBA マクロ実行中のみテンキ...
-
キーイベントを擬似的に発生さ...
-
特定のキーを押すまでループさ...
-
「ご処理進めて頂きますようお...
-
UPS警告音を止めたい
-
銀行の窓口処理の件で知ってる...
-
エクセルVBAで、MsgBox やInput...
-
Googleフォーム・複数人の申し...
-
エクセルで、日付を入力すると...
-
CloseとDisposeの違い
-
お客様から1MB未満の写真を送っ...
-
アクセスVBAのMe!と[ ]
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のキーを押すまでループさ...
-
【VB】タブ切り替え時のイベント
-
(VBA)チェックボックスのclick...
-
KEYPREVIEW=TRUEについて。意味...
-
Excel VBA マクロ実行中のみテンキ...
-
タブキー押下時のイベントをひ...
-
一定時間操作されないと自動で...
-
コンボボックスにキー入力をさ...
-
Visual Basic 6.0 コンボボック...
-
WPFでの時刻入力コントロールに...
-
VB.NETでフォームがない...
-
VB.NETのDropDownListをReadOnl...
-
コマンドボタン(入力)をクリッ...
-
エクセルVBAのテキストボック、...
-
Access データ表示 完了時のイ...
-
キーイベントを擬似的に発生さ...
-
テキストボックスの入力文字を1...
-
イベントハンドラが取得できな...
-
C# WMPメディアの終了検知 その2
-
キーバッファについての質問
おすすめ情報