Weisen Sie Ereignishandler Steuerelementen in Benutzerformularen zu, die dynamisch in VBA erstellt wurden

Ich habe im Internet viele Quellen gefunden, die dies tunfastwas ich tun möchte, aber nicht ganz. Ich habe einen benannten Bereich "Tagesliste". Für jeden Tag in der Tagesliste möchte ich eine Schaltfläche in einem Benutzerformular erstellen, die das Makro für diesen Tag ausführt. ich bin fähigFügen Sie die Schaltflächen dynamisch hinzu Aber ich weiß nicht, wie ich das TagZellenKennwort aus dem angegebenen Bereich an die Schaltfläche, den Ereignishandler und das Makro übergeben soll.

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

Um das obige Problem zu umgehen, fordere ich den Benutzer derzeit auf, den Tag einzugeben, den er ausführen möchte (z. B. Tag1), und dies an das Makro zu übergeben, und es funktioniert:

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

Daher muss für jeden meiner runButtons daycell.text angezeigt und ein Makro ausgeführt werden, das denselben Text als Parameter verwendet, um das Arbeitsblatt auszuwählen, auf dem die Aufgaben ausgeführt werden sollen.

Jede Hilfe wäre großartig. Ich habe Antworten gesehen, die dynamisch den VBA-Code schreiben, um die Makros zu handhaben, aber ich glaube, es muss eine Möglichkeit geben, es etwas eleganter zu machen, indem Parameter übergeben werden, nur nicht sicher, wie. Vielen Dank im Voraus!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage