|
▼ハナ さん:
こんにちは。
現状の記述は、非常にわかりやすくて、すぐ再現できました。
お手本ですね!!
さて、
>いつも参考にさせていただいてます。
>UserForm上に配置したTextBoxを配列として扱う処理を
>MOUGの「スキルアップ講座」を参考にして、以下のように作成しました
>動作および内容は
>UserForm1上のTextBoxをダブルクリックするとそのTextBoxに文字”OK”が入る
>というイメージです。
>
>標準モジュール
>Sub test()
>UserForm1.Show
>End Sub
>
>で、UserForm1を表示。
>
>UserForm1
>*TextBox1〜3を配置
>コレクション インスタンス生成
>
>Option Explicit
>Option Base 1
Dim myClass1(3) As Class1
>Private Sub UserForm_Initialize()
'> Dim myTextBox As New Collection
> Dim i As Integer
'> With myTextBox
'> .Add Item:=TextBox1
'> .Add Item:=TextBox2
'> .Add Item:=TextBox3
'> End With
'このコレクション殆ど要りません
> For i = 1 To 3
> Set myClass1(i) = New Class1
> With myClass1(i)
.Txt = Controls("textbox" & i)
> .Index = i
> End With
> Next
>End Sub
>
>クラスモジュール「Class1」でTextBoxダブルクリック時の
>メソッド記述(イベントプロシジャー)
>標準モジュールに記述の *** Syori_FromTextBox をCall ***
>
>Option Explicit
>
>Private WithEvents myTxt As MSForms.TextBox
>Private t_intIndex As Integer
>
>Public Property Get Cmd() As MSForms.TextBox
> Set Txt = myTxt
>End Property
>
>Public Property Let Txt(ByVal txtNewValue As MSForms.TextBox)
> Set myTxt = txtNewValue
>End Property
>
>Public Property Get Index() As Integer
> Index = t_intIndex
>End Property
>
>Public Property Let Index(ByVal intNewValue As Integer)
> t_intIndex = intNewValue
>End Property
>
>
>Private Sub myTxt_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
myTxt.Text = "ok"
'ここで「OK」の設定を行う
>End Sub
'以下の標準モジュールは要りません
>************************************************************
>標準モジュール
>Public Sub Syori_FromTextBox(objTextBox As MSForms.TextBox)
> objTextBox.Text = "OK"
>End Sub
として試してください。
このコードは、本来はまだ問題点があります(モジュール間の結合度が強すぎる)
が、クラスモジュールを理解する
段階なら、上記でよいです。
|
|