Для динамического добавления управляющего события в форму Excel; сначала нужно добавить событие (я) в модуль класса. Для моего примера я собираюсь добавить модуль класса с именем clsTEST с одним событием, btn_click ()
'#### 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
Когда вы активируете форму, она создаст кнопку. каждый раз, когда вы нажимаете на кнопку, заголовок будет меняться.