| 
    
     |  | atsjack さん UO3さん。こんばんは。 
 クラスモジュールで処理をする簡単なサンプルです。
 (UO3さん、クラスバカでごめんなさい^^)
 
 クラスモジュールを1つ挿入します。名前はデフォルトのClass1のままで
 結構です。
 
 Class1
 
 Option Explicit
 
 Private WithEvents mCheckBox As MSForms.CheckBox
 Private mTargetForm     As Object
 
 Public Sub Init(ByVal NewCheckBox As MSForms.CheckBox, ByVal NewForm As Object)
 Set mCheckBox = NewCheckBox
 Set mTargetForm = NewForm
 End Sub
 
 Private Sub Class_Terminate()
 Set mCheckBox = Nothing
 Set mTargetForm = Nothing
 End Sub
 
 Private Sub mCheckBox_Click()
 Call mTargetForm.CheckCount_Calculate
 End Sub
 
 Class1ここまで
 
 該当UserFormのモジュールに
 
 Option Explicit
 Private myCheckBox() As Class1
 
 Private Sub UserForm_Initialize()
 
 Dim chk As Object
 Dim i  As Long
 
 'UserFormに配置してあるコントロールを全て列挙
 For Each chk In Me.Controls
 '変数chkがCheckBoxだったら
 If TypeName(chk) = "CheckBox" Then
 '配列のサイズをRedimして確保
 ReDim Preserve myCheckBox(i) As Class1
 'クラスのインスタンスを作成し配列に確保
 Set myCheckBox(i) = New Class1
 'クラスのメソッド"Init"を呼び出しCheckBoxとUserFormを登録
 myCheckBox(i).Init chk, Me
 '次のCheckBoxの格納の為にiを+1
 i = i + 1
 End If
 Next
 End Sub
 
 Private Sub UserForm_Terminate()
 'クラスを解放
 Erase myCheckBox
 End Sub
 
 'checkされている数をカウントするプロシージャ
 'このプロシージャのスコープはpublic
 Public Sub CheckCount_Calculate()
 
 Dim chk As Object
 Dim c  As Long
 
 For Each chk In Me.Controls
 If TypeName(chk) = "CheckBox" Then
 'CheckBox.ValueがTrueなら+1
 If chk.Value Then
 c = c + 1
 End If
 End If
 Next
 
 Debug.Print "Checkされている数は、" & c
 
 End Sub
 
 このクラスはクラスに登録したCheckBoxにイベント(Click)が
 発生するとUserFormに用意したカウントをするプロシージャ
 を呼びだす仕組みです。
 
 クラスモジュールは大変便利です。是非押さえてくださいね。
 
 |  |