Назначьте обработчики событий для элементов управления в пользовательской форме, созданной динамически в VBA
Я нашел много ресурсов в Интернете, которые делаютпочти Что я хочу сделать, но не совсем. У меня есть именованный диапазон "дневник". Для каждого дня в dayList я хочу создать кнопку в форме пользователя, которая будет запускать макрос для этого дня. Я способен на добавляем кнопки динамически но не знаю, как передать daycell.text из именованного диапазона, в кнопку, в обработчик событий, в макрос: S Вот код, который мне нужен для создания формы пользователя:
Sub addLabel()
ReadingsLauncher.Show vbModeless
Dim theLabel As Object
Dim labelCounter As Long
Dim daycell As Range
Dim btn As CommandButton
Dim btnCaption As String
For Each daycell In Range("daylist")
btnCaption = daycell.Text
Set theLabel = ReadingsLauncher.Controls.Add("Forms.Label.1", btnCaption, True)
With theLabel
.Caption = btnCaption
.Left = 10
.Width = 50
.Top = 20 * labelCounter
End With
Set btn = ReadingsLauncher.Controls.Add("Forms.CommandButton.1", "runButton", True)
With btn
.Caption = "Run Macro for " & btnCaption
.Left = 80
.Width = 80
.Top = 20 * labelCounter
' .OnAction = "btnPressed"
End With
labelCounter = labelCounter + 1
Next daycell
End Sub
Чтобы обойти вышеупомянутую проблему, я в настоящее время предлагаю пользователю ввести день, который он хочет запустить (например, День 1), и передать его макросу, и он работает:
Sub B45runJoinTransactionAndFMMS()
loadDayNumber = InputBox("Please type the day you would like to load:", Title:="Enter Day", Default:="Day1")
Call JoinTransactionAndFMMS(loadDayNumber)
End Sub
Sub JoinTransactionAndFMMS(loadDayNumber As String)
xDayNumber = loadDayNumber
Sheets(xDayNumber).Activate
-Do stuff
End Sub
Для каждого из моих runButtons необходимо отобразить daycell.text и запустить макрос, который использует тот же текст в качестве параметра, чтобы выбрать рабочий лист для выполнения своих задач.
Любая помощь будет потрясающей. Я видел ответы, которые динамически записывают код vba для обработки макросов, но я считаю, что должно быть что-то, что можно сделать немного более элегантно с помощью передачи параметров, просто не знаю, как. Спасибо заранее