Microsoft Access 掲示板

クラスモジュールについて / 7

9 コメント
views
4 フォロー
7

hirotonさんも指摘していますし、上の回答でも、下記のように仕様を提示してます。

この関連付けをどのように表現するかを決める必要がありますね。

例えば、
cmdホゲ と txtホゲ というように、先頭3文字でコントロールの種類、後の部分で項目名を表現するというような仕様にするとします。

もし、コントロールの名前を変更せずにということなら、下記のような仕様でどうでしょうか。
(こちらの仕様の方がコードがシンプルになるし、変更に強いコードになります。)

仕様
コマンドボタンのTagプロパティに関連付けるテキストボックス名を設定しておく。


コマンドボタン名「コマンド51」
テキストボックス名「テキスト0」
の場合、コマンドボタン「コマンド51」のTagプロパティに「テキスト0」と設定する。

クラスモジュール

Option Explicit

Private WithEvents コマンド As CommandButton
Private WithEvents テキスト As TextBox

'初期化メソッド 引数はコマンドボタン コマンドボタンのTagにテキストボックス名を設定しておく
Public Sub Init(objコマンド As CommandButton)
    Set コマンド = objコマンド
    Set テキスト = objコマンド.Parent.Controls(objコマンド.Tag)
    コマンド.OnClick = "[イベント プロシージャ]"
End Sub

Private Sub コマンド_Click()
    テキスト.Value = IIf(Nz(テキスト.Value) = "有", "無", "有")
End Sub

'自身を返すプロパティ
Public Property Get Self() As Variant
    Set Self = Me
End Property

フォームモジュール

Private Sub Form_Load()
    Static co As New Collection    'Class1保存用
    Dim ctl As Control
    For Each ctl In Me.Controls
        If ctl.ControlType = acCommandButton And ctl.Tag <> "" Then
            With New Class1
                .Init ctl
                co.Add .Self
            End With
        End If
    Next
End Sub
通報 ...