Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


29136 / 76738 ←次へ | 前へ→

【52888】Re:クラスによるコントロールの配列処理
発言  ichinose  - 07/12/7(金) 22:36 -

引用なし
パスワード
   ▼ハナ さん:
こんばんは。
>>このコードは、本来はまだ問題点があります(モジュール間の結合度が強すぎる)
>同じプロジェクト内で別の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
0 hits

【52863】クラスによるコントロールの配列処理 ハナ 07/12/7(金) 9:33 質問
【52867】Re:クラスによるコントロールの配列処理 ichinose 07/12/7(金) 11:34 発言
【52870】Re:クラスによるコントロールの配列処理 ハナ 07/12/7(金) 12:00 発言
【52871】Re:クラスによるコントロールの配列処理 ハナ 07/12/7(金) 12:34 お礼
【52888】Re:クラスによるコントロールの配列処理 ichinose 07/12/7(金) 22:36 発言

29136 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free