Asigne controladores de eventos a los controles en el formulario de usuario creados dinámicamente en VBA
He encontrado muchos recursos en internet que hacencasiLo que quiero hacer, pero no del todo. Tengo un rango denominado "lista de días". Para cada día en la lista de días, quiero crear un botón en un formulario de usuario que ejecutará la macro para ese día. soy capaz deagrega los botones dinámicamente pero no sé cómo pasar el daycell.text desde el rango nombrado, al botón, al controlador de eventos, a la macro: S Aquí está el código que tengo para crear el formulario de usuario:
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
Para solucionar el problema anterior, actualmente le pido al usuario que escriba el día que desea ejecutar (por ejemplo, el Día 1) y lo pase a la macro y funciona:
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
Por lo tanto, para cada uno de mis runButtons, debe mostrar daycell.text y ejecutar una macro que use ese mismo texto como parámetro para seleccionar la hoja de trabajo para hacer su trabajo.
Cualquier ayuda sería increíble. He visto respuestas que escriben dinámicamente el código vba para manejar las macros, pero creo que debe haber alguna forma de hacerlo de forma más elegante a través de los parámetros de paso, pero no estoy seguro de cómo hacerlo. ¡Muchas gracias de antemano!