UserFormでClass

左のユーザーフォームは7つボタンがあるので,クラス側でそれぞれのボタンが押されたときのイベント処理を記述。
ユーザーフォームでNewClass1でインスタンス化して,初期化でコマンドボタンの番号と関連づける。
'**************** myCommB に記述する部分 *****************
Option Explicit
'////////////////////////////////////////////
'コマンドボタンクラス
'UserFormのコマンドボタン1~7が押されたときの処理
'////////////////////////////////////////////
'イベントを持つコマンドボタン型の変数名をBtnと宣言②
Private WithEvents Btn As MSForms.CommandButton
'ボタン番号格納用の変数名をmyNOと宣言③
Private myNO As Integer
'New によって作成される時のメソッド(コンストラクタ処理?)
Public Sub NewClass(ByVal C As MSForms.CommandButton)
' 引数C(任意)のコマンドボタンを変数②に格納
Set Btn = C
End Sub
'Letプロパティ名をMyIndexとした④
Public Property Let MyIndex(ByVal i As Integer)
myNO = i 'ボタン番号③myNOを入れ込む
End Property
'Getのプロパティ名をMyIndex⑤
Public Property Get MyIndex() As Integer
MyIndex = myNO 'ボタン番号③を取り出す
End Property
Private Sub Btn_Click()
'----------------------------------
'コマンドボタンが押されたときの動作
'----------------------------------
Select Case MyIndex 'MyIndexでボタン番号を取り出す
Case 1
'コマンドボタン1が押されたときの処理をここに書く
Case 2
Case 3
Case 4
Case 5, 6
Case 7
End Select
End Sub
'**************** UserFormに記述する部分 *****************
Option Explicit
'モジュールレベルの変数Btnを 型myCommB(①と同じ)で宣言
'変数名は任意ここではBtn⑥
Private Btn(1 To 7) As New myCommB
Private Sub UserForm_Initialize()
Dim i As Integer
'コマンドボタンをクリックしたときイベントが実行されるようにする
For i = 1 To 7
'インスタンス化 コマンドボタンのイベントを登録し実体化
'ここのBtnは⑥で宣言した変数名
Btn(i).NewClass Controls("CommandButton" & i)
'④でMyIndexプロパティにコマンドボタンの番号を登録
Btn(i).MyIndex = i
Next
End Sub
オプションボタンクラス OptionButton ’オブジェクト名 myOpClass ①
'**************** myOpClass に記述する部分 *****************
Option Explicit
'////////////////////////////////////////////
'オプションボタンクラス
'////////////////////////////////////////////
'イベントを持つオプションボタン型の変数名をOptと宣言②
Private WithEvents Opt As MSForms.OptionButton
'ボタン番号格納用の変数名をmyNOと宣言③
Private myNO As Integer
'New によって作成される時のメソッド(コンストラクタ処理
Public Sub NewClass(ByVal c As MSForms.OptionButton)
' 引数C(任意)のコマンドボタンを変数②に格納
Set Opt = c
End Sub
'Letプロパティ名をMyIndexとした④
Public Property Let MyIndex(ByVal i As Integer)
myNO = i 'ボタン番号myNoに番号を格納
End Property
'Getのプロパティ名をMyIndex⑤
Public Property Get MyIndex() As Integer
MyIndex = myNO
End Property
Private Sub Opt_Click()
'----------------------------------
'オプションボタンがクリックされたとき
'----------------------------------
Select Case MyIndex
Case 1
' この部分に番号に応じた処理を書く
Case 2
' ……
case 15
End Select
End Sub
'**************** UserFormに記述する部分 *****************
Option Explicit
'モジュールレベルの変数Optを 型myOpClass(①と同じ)で宣言
'変数名は任意ここではBtn⑥
Private Opt(1 To 15) As New myOpClass
Private Sub UserForm_Initialize()
Dim i As Integer
'オプションボタンをクリックしたときイベントが実行されるようにする
For i = 1 To 15
'インスタンス化 イベントを登録し実体化
'ここのOptは⑥で宣言した変数名
Opt(i).NewClass Controls("OptionButton" & i)
'④でMyIndexプロパティにボタンの番号を登録
Opt(i).MyIndex = i
Next
End Sub
テキストボックスクラス TextBox ’オブジェクト名 myTBoxClass ①
'**************** myTBoxClass に記述する部分 *****************
Option Explicit
'////////////////////////////////////////////
'テキストボックスクラス
'////////////////////////////////////////////
'イベントを持つテキストボックス型の変数名をTBoxと宣言②
Private WithEvents TBox As MSForms.TextBox
'ボタン番号格納用の変数名をmyNOと宣言③
Private myNO As Integer 'ボタン番号用
'New によって作成される時のメソッド(コンストラクタ処理
Public Sub NewClass(ByVal mT As MSForms.TextBox)
' 引数mT(任意)のテキストボックスを変数②に格納
Set TBox = mT
End Sub
'Letプロパティ名をMBoxNoxとした④
Public Property Let MBoxNo(ByVal i As Integer)
myNO = i
End Property
'Getのプロパティ名をMBoxNoとした⑤
Public Property Get MBoxNo() As Integer
MBoxNo = myNO
End Property
Private Sub Tbox_change()
'テキストボックスを書き換えたとき割り込みが発生しないように
Application.EnableEvents = False
Select Case MBoxNo 'MBoxNoでテキストボックス番号を取り出す
' この部分に処理
Case 1
TBox.Text = StrConv(TBox.Text, vbNarrow)
Case 2
End Select
Application.EnableEvents = True
End Sub
'**************** UserFormに記述する部分 *****************
Option Explicit
'モジュールレベルの変数 TBoxを 型myTBoxClass(①と同じ)で宣言
'変数名は任意ここではTbox⑥
Private TBox(1 To 6) As New myTBoxClass
Private Sub UserForm_Initialize()
Dim i As Integer
'オプションボタンをクリックしたときイベントが実行されるようにする
For i = 1 To 6
'インスタンス化 コマンドボタンのイベントを登録し実体化
'ここのTBoxは⑥で宣言した変数名
TBox(i).NewClass Controls("TextBox" & i)
'④でMBoxNoプロパティでコマンドボタンの番号を登録
TBox(i).MBoxNo = i '④のプロパティ名がMBoxNoになっているから
Next
End Sub
スピンボタンクラス Spb ’オブジェクト名 mySpiClass ①
'**************** mySpiClass に記述する部分 *****************
Option Explicit
'////////////////////////////////////////////
'スピンボタンクラス 未使用のためバグがあるかも
'////////////////////////////////////////////
'イベントを持つスピンボタン型の変数名をSpbと宣言②
Private WithEvents Spb As MSForms.SpinButton
'ボタン番号格納用の変数名をmyNOと宣言③
Private myNO As Integer 'ボタン番号用
'New によって作成される時のメソッド(コンストラクタ処理
Public Sub NewClass(ByVal C As MSForms.SpinButton)
' 引数mT(任意)のテキストボックスを変数②に格納
Set Spb = C
End Sub
'Letプロパティ名をmyNoとした④
Public Property Let mSPNo(ByVal i As Integer)
myNO = i
End Property
'Getのプロパティ名をmGNoとした⑤
Public Property Get mSPNo() As Integer
mSPNo = myNO
End Property
Private Sub Spb_SpinUp()
'書き換えたとき割り込みが発生しないように
Application.EnableEvents = False
Select Case myNO '番号を取り出す
' この部分に処理
Case 1
Case 2
End Select
Application.EnableEvents = True
End Sub
Private Sub Spb__SpinDown()
'書き換えたとき割り込みが発生しないように
Application.EnableEvents = False
Select Case myNO '番号を取り出す
' この部分に処理
Case 1
Case 2
End Select
Application.EnableEvents = True
End Sub
'**************** UserFormに記述する部分 *****************
'モジュールレベルの変数 宣言
Private Spb(1 To 6) As New mySpi
Private Sub UserForm_Initialize()
Dim i As Integer
'オプションボタンをクリックしたときイベントが実行されるようにする
For i = 1 To 1
'インスタンス化 コマンドボタンのイベントを登録し実体化
'ここのTBoxは⑥で宣言した変数名
Spb(i).NewClass Controls("SpinButton" & i)
'④でMBoxNoプロパティでコマンドボタンの番号を登録
Spb(i).mSPNo = i '④のプロパティ名がMBoxNoになっているから
Next
With Worksheets("希望校入力")
Label2.Caption = .Columns("g").ColumnWidth
End With
End Sub