[[20201006211214]] 『VBA チェックボックスの連鎖判定について』(フォーキー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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

チェックボックスでは、
値の変化によっても Clickイベントが発生する為です。

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


リストボックスにチェックボックスを表示しては?
(まっつわん) 2020/10/06(火) 22:36

 別なアプローチで
 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.