|
▼新参者 さん:
こんにちは
>のようにオブジェクトを一個一個書いてました。
>もっと簡単なやり方があると思うのですが分かりません。
↑が一番簡単と思います。
難易度でいうと高いと思いますが、使い方は簡単な例
勉強の種にでもしてください。
・新規Book
・UserFormにTextBox2個、CommandButton2個配置
・プロジェクトにClassモジュールを2つ追加
以下をコピペ
'////////////UserForm/////////////
Private clsText As Class1
Private Sub CommandButton1_Click()
clsText.ClearText
End Sub
Private Sub CommandButton2_Click()
MsgBox "TextBox2のデータは" & clsText.Items(2).Text
End Sub
Private Sub UserForm_Initialize()
Set clsText = New Class1
clsText.AddItem Me.TextBox1
clsText.AddItem Me.TextBox2
Me.CommandButton1.Caption = "TextBoxをクリアする"
Me.CommandButton2.Caption = "TextBox2のデータを取得する"
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set clsText = Nothing
End Sub
'Class1に以下をコピペ
Option Explicit
Private mCol As Collection
Private clsTxt As Class2
Private Sub Class_Initialize()
Set mCol = New Collection
End Sub
Private Sub Class_Terminate()
Set mCol = Nothing
End Sub
Public Function AddItem(pData As MSForms.TextBox)
Set clsTxt = New Class2
Set clsTxt.mTextBox = pData
mCol.Add clsTxt
End Function
Public Property Get Items(pData) As MSForms.TextBox
Set Items = mCol.Item(pData).mTextBox
End Property
Public Function ClearText()
Dim t As Object
For Each t In mCol
t.ClearText
Next
End Function
'Class2に以下をコピペ
Option Explicit
Private WithEvents mText As MSForms.TextBox
Public Property Set mTextBox(pData As MSForms.TextBox)
Set mText = pData
End Property
Public Property Get mTextBox() As MSForms.TextBox
Set mTextBox = mText
End Property
Public Function ClearText()
mText.Text = ""
End Function
準備が出来たらUserFormを表示させてください。textboxにも適当に入力。
多分操作は解ると思います。
ちなみに、for eachが使いたいならCollectionを調べると参考になると思います。
|
|