Przypisz programy obsługi zdarzeń do formantów na formularzu użytkownika tworzonych dynamicznie w VBA
Znalazłem wiele zasobów w Internecieprawieco chcę zrobić, ale nie do końca. Mam listę nazw „zakres”. Dla każdego dnia w dzienniku chcę utworzyć przycisk na formularzu użytkownika, który będzie uruchamiał makro tego dnia. jestem w staniedynamicznie dodawaj przyciski ale nie wiem, jak przekazać tekst daycell.text z podanego zakresu, do przycisku, do modułu obsługi zdarzeń, do makra: S Heres kod, który muszę utworzyć w formularzu użytkownika:
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
Aby obejść powyższy problem, obecnie monituję użytkownika o wpisanie dnia, który chcą uruchomić (np. Dzień1) i przekazanie go do makra i działa:
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
Tak więc dla każdego z moich przycisków runButton musi wyświetlać tekst daycell.text i uruchamiać makro, które używa tego samego tekstu jako parametru, aby wybrać arkusz do wykonania swoich rzeczy.
Każda pomoc byłaby niesamowita. Widziałem odpowiedzi, które dynamicznie zapisują kod vba, aby poradzić sobie z makrami, ale wierzę, że musi istnieć jakiś sposób, w jaki można to zrobić bardziej elegancko poprzez przekazywanie parametrów, po prostu nie wiem jak. Z góry bardzo dziękuję!