| 
    
     |  | ユーザーフォームとクラスモジュールの場合、下記の .Caller = Me
 のようにすれば、UserForm1 をクラスモジュールに渡すことができます。
 
 Private ChckBox(1 To 3) As New Class1
 
 Private Sub UserForm_Initialize()
 Dim i As Long
 For i = 1 To 3
 With ChckBox(i)
 .Item = Me.Controls("CheckBox" & i)
 .Caller = Me
 End With
 Next i
 End Sub
 
 Public Sub test()
 MsgBox "OK"
 End Sub
 
 'クラスモジュールClass1
 Private MyCaller As Object 'UserForm用の変数
 Private WithEvents MyCtrl As MSForms.CheckBox
 
 Public Property Let Caller(NewCaller As Object)
 Set MyCaller = NewCaller
 End Property
 
 Private Sub MyCtrl_Click()
 Call MyCaller.test
 End Sub
 
 
 標準モジュールとクラスモジュールの場合、
 .Caller = Module1
 では、Module1 をクラスモジュールに渡すことはできませんでした。
 それで、今のところ下記のように、直接Module1を指定して
 Module1.test
 で動かしています。
 
 'クラスモジュールClass1
 Private WithEvents Sht As Worksheet
 ・・・・
 Private Sub Sht_SelectionChange(ByVal Target As Range)
 Module1.test
 End Sub
 
 '■標準モジュール
 Sub Set_SheetEvent()
 Dim clsSheet As Class1
 With Workbooks("TestBook")
 Set clsSheet = New Class1
 Set clsSheet.Sheet = .Sheets("Sheet1")
 End With
 Set clsSheet = Nothing
 Workbooks("TestBook").Activate
 Public Sub test()
 MsgBox "OK"
 End Sub
 
 クラスモジュールには、直接モジュール名などを入れないようにするのが望ましいというのが頭にあります。
 クラスモジュールに Module1 を書き込まないようにする方法があれば、よろしくお願いします。
 
 
 |  |