Код для добавления кнопки во время выполнения, а затем для добавления событий действительно настолько прост, насколько это трудно выяснить. Я могу сказать, что потому, что я потратил больше времени на это недоумение и меня раздражало больше, чем что-либо другоеиначе я когда-либо программировал ..
Создайте пользовательскую форму и введите следующий код:
Option Explicit
Dim ButArray() As New Class2
Private Sub UserForm_Initialize()
Dim ctlbut As MSForms.CommandButton
Dim butTop As Long, i As Long
'~~> Decide on the .Top for the 1st TextBox
butTop = 30
For i = 1 To 10
Set ctlbut = Me.Controls.Add("Forms.CommandButton.1", "butTest" & i)
'~~> Define the TextBox .Top and the .Left property here
ctlbut.Top = butTop: ctlbut.Left = 50
ctlbut.Caption = Cells(i, 7).Value
'~~> Increment the .Top for the next TextBox
butTop = butTop + 20
ReDim Preserve ButArray(1 To i)
Set ButArray(i).butEvents = ctlbut
Next
End Sub
Теперь вам нужно добавить модуль класса в ваш код для проекта ..Пожалуйста, запомните его модуль класса, а не модуль. И вставьте следующий простой код (в моем случае имя класса Class2) -
Public WithEvents butEvents As MSForms.CommandButton
Private Sub butEvents_click()
MsgBox "Hi Shrey"
End Sub
Вот так.Теперь запустите