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!