|
ユーザーフォームとクラスモジュールの場合、下記の
.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 を書き込まないようにする方法があれば、よろしくお願いします。
|
|