在 Excel 中,我在运行时在用户窗体上添加按钮。如何添加这些按钮操作以调用带参数的子/函数?
这是我目前添加按钮的方式,它不接受我添加的“OnAction”
Dim MyR As Range, MyB As MSForms.Control
For i = 2 To ActiveSheet.UsedRange.Rows.Count
If (Len(ActiveSheet.Cells(i, 1).Value) > 0) Then
Set MyR = Range(ActiveSheet.Cells(i, 1), ActiveSheet.Cells(i, 1))
Set MyB = UserForm1.Controls.Add("Forms.CommandButton.1")
With MyB
.Name = i
.Left = 50
.Top = 25 * i
.Caption = "Caption text"
.OnAction = "SomeFunction"
.Parameter = i
End With
End If
Next i
上面的代码在 .OnAction 上失败,我找不到如何在这里以编程方式添加一个操作,每个按钮的参数都不同?
看看这里:Assign on-click VBA function to a dynamically created button on Excel Userform
你会发现 @598Bubblehead 提供了一个很好解释的例子。不同之处在于您要传递参数。我建议使用自定义按钮的
Tag
属性。
您需要做的就是:
添加类模块并命名
MyCustomButton
Public WithEvents btn As MSForms.CommandButton
Public frm As UserForm
Dim iCount As Long
Private Sub btn_Click()
MsgBox "Parameter is: '" & btn.Tag & "'", vbInformation, "Welcome!"
End Sub
然后使用下面的代码:
Option Explicit
Sub DoSomething()
Dim MyB As MSForms.Control
Dim btnEvent As MyCustomButton
Set MyB = UserForm1.Controls.Add("Forms.CommandButton.1")
With MyB
.Name = "DynamicButton"
.Caption = "Click me!"
.Left = 10
.Top = 10
.Width = 75
.Height = 32
.Tag = "Hello from VBA!"
End With
Set btnEvent = New MyCustomButton
Set btnEvent.btn = MyB
Set btnEvent.frm = UserForm1
UserForm1.Show
End Sub