[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA チェックボックスの連鎖判定について』(フォーキー)
Private Sub CheckBox1_Click() With Me If .ListBox1.ListIndex = -1 Then MsgBox "リストを選択してください" .CheckBox1.Value = False End If End With End Sub
お世話になります。 VBAのユーザーフォーム上に、リストボックスとチェックボックスを配置してます。 チェックボックスをクリックしたとき、リストボックスが未選択の場合はキャンセル処理を行いたいのですが、上のコードだとメッセージボックスが2回表示されます。 未選択状態にしたときに、再びリストボックスが未選択かどうかの判定を行っているらしいのですが、回避する方法が分かりません。 よろしくお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows10 >
ユーザーフォームのモジュールレベル変数でフラグたててはどうでしょうか? Private flg_EV As Boolean Private Sub CheckBox1_Click() If flg_EV = TRUE Then ExitSub With Me If .ListBox1.ListIndex = -1 Then MsgBox "リストを選択してください" flg_EV = True .CheckBox1.Value = False flg_EV = False End If End With End Sub (稲葉) 2020/10/06(火) 21:48
稲葉さんありがとうございます。動作確認しました。 フラグって本当に便利ですね。ぱっと思いつけるようにしたいです。 恥ずかしながら、モジュールレベル変数というものを知らなかったです。勉強してみます。 ありがとうございました。 (フォーキー) 2020/10/06(火) 22:01
True(チェックを付けた)時の判定なのですから、最初に True か否かを
判断すれば良いです。その場合 Changeイベントにした方が混乱しないで良いでしょう。
Private Sub CheckBox1_Change() With Me If (.CheckBox1.Value = True) And _ (.ListBox1.ListIndex = -1) Then MsgBox "リストを選択してください" .CheckBox1.Value = False End If End With End Sub
(AddinBox 角田) 2020/10/06(火) 22:15
別なアプローチで ListBoxが選択されていないときは、CheckBoxkを押せないようにすればどうでしょう
Private Sub UserForm_Initialize() Me.ListBox1.List = Array("a", "b", "c") Me.CheckBox1.Enabled = False End Sub
Private Sub ListBox1_Change() If Me.ListBox1.ListIndex <> -1 Then Me.CheckBox1.Enabled = True End If End Sub (´・ω・`) 2020/10/07(水) 00:20
私のはあまりよくない手でしたね、、、 理想いうと、リストボックス選択→チェックボックス→リストボックス外す操作したときに チェックボックスの状態残るから、 私なら全部選択させたあと、コマンドボタンクリックした時に各コントロールチェックするかも 全文見てみたいですねぇ (稲葉) 2020/10/07(水) 06:30
>チェックボックスでは、値の変化によっても Clickイベントが発生する為です。 Click = マウスクリックの印象でした。changeイベントだと回避、やってみます。
>リストボックスにチェックボックスを表示しては? 初めて知りました! ちょうど別の場面でそういう使い方をしたいと思ってたので、ちょっと調べてみます。
>ListBoxが選択されていないときは、 CheckBoxkを押せないようにすればどうでしょう 選択されてない = 押せない。一番無駄がないですね。参考にします。
稲葉さん、再び投稿ありがとうございます。
やっぱりイベント連鎖って難しいですね。便利ですけど。
>全文見てみたいですねぇ
すみません。練習用に書いてただけですので、これで全部です。。。
改めて、皆さん、ありがとうございます。
考え方とサンプルコード、非常に勉強になりました。
(フォーキー) 2020/10/07(水) 06:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.