|
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に用意したカウントをするプロシージャ
を呼びだす仕組みです。
クラスモジュールは大変便利です。是非押さえてくださいね。
|
|