解決済みになっちゃいましたが、興味深い内容なので作ってみました。
今回の要件は、
複数のボタンをグループ化して、その中の一つだけを選択できるようにするということですね。
せっかくクラスにするのですから、できるだけ汎用性のあるものにしたいので、
下記のような設計を考えてみました。
SelectButtonクラス
クリックすると選択状態(背景色 赤)になる
・Selectedプロパティ 選択=True / 非選択=False
SelectButtonGroupクラス
SelectButtonのグループ
・Addメソッド コマンドボタンをグループに追加する。
このクラスを作ることによって各グループごとにボタンの数が異なる場合でも簡単に対応できます。
SelectButtonクラス
Option Explicit
Private WithEvents btn As MSForms.CommandButton
Private Slected_ As Boolean '選択
Private GroupBtns_ As Collection
'クラスにコマンドボタンと属するグループ(Collection)を登録する。
Public Sub setBtn(ByVal cb As MSForms.CommandButton, ByVal GroupBtns As Collection)
Set btn = cb
Set GroupBtns_ = GroupBtns
End Sub
'選択状態の設定
Public Property Let Slected(ByVal new_Slected As Boolean)
If Slected_ <> new_Slected Then
Slected_ = new_Slected
If Slected_ Then
btn.BackColor = vbRed
Else
btn.BackColor = vbButtonFace
End If
End If
End Property
'選択状態の取得
Public Property Get Slected() As Boolean
Slected = Slected_
End Property
Private Sub Btn_Click()
Dim ctl As SelectButton
For Each ctl In GroupBtns_
ctl.Slected = False
Next
Slected_ = True
btn.BackColor = vbRed
End Sub
SelectButtonGroupクラス
Option Explicit
Private BtnGrp As Collection
Public Sub Add(ByVal btn As MSForms.CommandButton)
Dim selBtn As SelectButton
Set selBtn = New SelectButton
selBtn.setBtn btn, BtnGrp
BtnGrp.Add selBtn
End Sub
Private Sub Class_Initialize()
Set BtnGrp = New Collection
End Sub
Private Sub Class_Terminate()
Dim selBtn As SelectButton
For Each selBtn In BtnGrp
selBtn.Slected = False
Set selBtn = Nothing
Next
Set BtnGrp = Nothing
End Sub
Sheet1 に、CommandButton1 ~ 10 の10個のコマンドボタンがあり、
1 ~ 5, 6 ~ 8, 9 ~ 10 の3グループに分ける、
Sheet2 に、CommandButton1 ~ 5 がありすべて一つのグループにする、
場合のコード例
ThisWorkBookモジュール
Option Explicit
Private SelBtnGrp(3) As SelectButtonGroup
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set SelBtnGrp(0) = Nothing
Set SelBtnGrp(1) = Nothing
Set SelBtnGrp(2) = Nothing
Set SelBtnGrp(3) = Nothing
End Sub
Private Sub Workbook_Open()
Dim i As Integer
With Worksheets("Sheet1")
Set SelBtnGrp(0) = New SelectButtonGroup
For i = 1 To 5
SelBtnGrp(0).Add .OLEObjects("CommandButton" & i).Object
Next
Set SelBtnGrp(1) = New SelectButtonGroup
For i = 6 To 8
SelBtnGrp(1).Add .OLEObjects("CommandButton" & i).Object
Next
Set SelBtnGrp(2) = New SelectButtonGroup
For i = 9 To 10
SelBtnGrp(2).Add .OLEObjects("CommandButton" & i).Object
Next
End With
With Worksheets("Sheet2")
Set SelBtnGrp(3) = New SelectButtonGroup
For i = 1 To 5
SelBtnGrp(3).Add .OLEObjects("CommandButton" & i).Object
Next
End With
End Sub
一応、最小限の雛形です。今後、拡張したいこととして、下記が考えられます。
SelectButtonクラスに
Countプロパティ、
SelectIndexプロパティ、
Changeイベント
などの実装