コントロール イベントを Excel フォームに動的に追加するには、次のようにします。最初にクラス モジュールにイベントを追加する必要があります。私の例では、1 つのイベント btn_click() を持つ clsTEST という名前のクラス モジュールを追加します。
'#### CLASS NAMED clsTEST
Public WithEvents btn As MSForms.CommandButton
Public frm As UserForm
Dim iCount As Long
Private Sub btn_Click()
iCount = IIf(iCount < 1, 1, iCount + 1)
btn.Caption = "Count " & Str(iCount)
End Sub
'### END CLASS
ご覧のとおり、これが行う唯一のことは、ボタンのキャプションをクリックした回数に設定することです。次に、フォーム コードに次のように入力します。
Dim mColButtons As New Collection '## SET A NEW COLLECTION
Private Sub UserForm_Activate()
'
Dim btnEvent As clsTEST
Dim ctl As MSForms.Control
'
Set ctl = Me.Controls.Add("Forms.CommandButton.1")
'
With ctl
.Caption = "XYZ"
.Name = "AButton"
END With
'
Set btnEvent = new clsTEST
Set btnEvent.btn = ctl
set btnEvent.frm = Me
'
mColButtons.add btnEvent
'End Sub
フォームをアクティブにすると、ボタンが作成されます。ボタンをクリックするたびにキャプションが変わります。