hatena
hatena
2021/09/17 (金) 17:50:36
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
通報 ...