沢山のチェックボックス ② チェックボックス追加に対応
昨日は、ユーザーフォームに配置された沢山のチェックボックスの中から、
一つだけチェックする方法の簡素化に取り組んでみた。
infoment.hatenablog.com
今日は、昨日の続きから。
昨日は、CheckBox1 ~ CheckBox10までを一つのグループとして扱った。
何だか見た目が味気ないので、二つ足して干支にしてみた。
このように、チェックボックスの数が増えることも、業務ではよくあること。
そのたびにFor ~ Next を書き換えるのは面倒だ。
そこで、CheckBoxが何個あるか数えることにした。
Sub SwichCheckBox(checkbox_number As Long) Dim i As Long If Me.Controls("CheckBox" & checkbox_number) = False Then Exit Sub End If For i = 1 To CheckBoxTotalNumber Select Case i Case checkbox_number Me.Controls("CheckBox" & i) = True Case Else Me.Controls("CheckBox" & i) = False End Select Next End Sub Private Property Get CheckBoxTotalNumber() As Long Dim Control As MSforms.Control For Each Control In Me.Controls If TypeName(Control) = "CheckBox" Then CheckBoxTotalNumber = CheckBoxTotalNumber + 1 End If Next End Property
上記のように、毎回数えたくない方は、さらに変数で受けても良いと思う。
CheckBoxの1~12が味気ないという方は、Enumと組み合わせても良いかも。
Enum 干支 en子 = 1 en丑 en寅 en卯 en辰 en巳 en午 en未 en申 en酉 en戌 en亥 [_eLast] End Enum
すると各CheckBoxのクリックイベントも、どのCheckBoxがどの干支と対応しているかなど、少し分かり易くなってくる。
Private Sub CheckBox1_Click() SwichCheckBox 干支.en子 End Sub Private Sub CheckBox2_Click() SwichCheckBox 干支.en丑 End Sub Private Sub CheckBox3_Click() SwichCheckBox 干支.en寅 End Sub ' 以降、省略。
ここまで工夫しても、CheckBoxが12個ならクリックイベントも12個、100個なら100個必要な訳で。
次回に続きます。
参考まで。