| 
    
     |  | ▼ハナ さん: こんばんは。
 >>このコードは、本来はまだ問題点があります(モジュール間の結合度が強すぎる)
 >同じプロジェクト内で別のUserFormでコマンドボタンコントロールを配列化していますが、そのEvent処理を別のクラスモジュールでやらせてます。
 >そのへんを統合することができる・・の問題でしょうか。
 
 Userformのコントロールのイベントプロシジャーをクラスモジュール内に記述することが
 このクラスモジュールとUserformの結合度(関わり度合い)を強くしているということです。
 結合度が強いとそのまま再利用すことが困難になります。
 クラスの中の記述されているコントロールのイベントプロシジャーは、特定のUserform内にあるコントロールに関するコードが入っているのですから、特定のUserformとの関わりが強すぎるのです。
 Userformが変わるたびにクラスのコードも変えなければなりません。
 
 クラスって、オブジェクトの設計図ですよね?
 ExcelのWorkbookやWorksheetというオブジェクトの中のコードを毎回変更しなければ使えなかったら、VBAでは使えませんよね?
 
 本来は、クラスモジュール内に記述しているTextboxのイベントプロシジャーは、
 Userform内に記述されるべきなのです。
 
 これを可能にしたアドインを角田さんが紹介しています。
 www.h3.dion.ne.jp/~sakatsu/Breakthrough_P-Ctrl_Arrays.htm
 (擬似からの脱却)
 
 これが「本来はまだ問題点があります」と申し上げた理由なのです。
 が、汎用的にコントロール配列を実現するためのオブジェクトの作成は、結構大変ですから
 これは取りあえずは、現行コードで良しとしましょう!!
 又は、上記URLにあるアドインを利用してください。
 
 
 >Private Sub myTxt_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 >  Call Syori_FromTextBox(Txt)
 >End Sub
 >
 >>>************************************************************
 >>>標準モジュール
 >>>Public Sub Syori_FromTextBox(objTextBox As MSForms.TextBox)
 >>>  objTextBox.Text = "OK"
 >>>End Sub
 
 クラスとユーザーフォームとの結合度の強さを上記のように認めたとしても、更にこの標準モジュールでユーザーフォームのコントロールに関わるコードを記述するのは私は、疑問に感じます。
 
 クラス、Userform、標準の各モジュールの結合度が強くなってしまいます。
 仕様書に記述する場合には、「このクラスの利用に当たっては、標準モジュールに以下のプロシジャーの記述が必須となります。」なんていう但し書きが必要になってしまいます。
 一般的なオブジェクトにはないですよね!!
 
 クラスとユーザーフォームとの結合度の強さを上記のように認めた場合、標準モジュールのプロシジャーは、クラス内に記述するか、Userform内に記述してクラスから呼び出すかのどちらかだと思いますよ!! 時間があったら、検討してしてみてください。
 
 クラスモジュールに
 
 Private Sub myTxt_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 myTxt.Parent.Syori_FromTextBox myTxt
 End Sub
 
 Userform1のモジュールに
 
 >>Public Sub Syori_FromTextBox(objTextBox As MSForms.TextBox)
 >>  objTextBox.Text = "OK"
 >>End Sub
 
 |  |