以编程方式向用户窗体添加一个commandbutton

在Excel VBA中,我添加了一个commandbutton到用户窗体…如下所示

Set ctrl = Me.Controls.Add( _ bstrProgID:="Forms.CommandButton.1", _ Name:="CommandButton1", Visible:=True) 

现在我想知道如何告诉它在点击时该怎么做? 谢谢!!

这是vba 会让你做的那些技巧之一,但是你可能不应该这样做。 基于所有相同的原因,你不应该使用改变你的代码的代码。

这就是说,这里是如何做你想做的。 首先插入一个类模块并将其命名为DynBtn,然后将此代码粘贴到其中:

 Private WithEvents mobjBtn As MSForms.CommandButton Private msOnAction As String ''// This has to be generic or call by name won't be able to find the methods ''// in your form. Private mobjParent As Object Public Property Get Object() As MSForms.CommandButton Set Object = mobjBtn End Property Public Function Load(ByVal parentFormName As Object, ByVal btn As MSForms.CommandButton, ByVal procedure As String) As DynBtn Set mobjParent = parentFormName Set mobjBtn = btn msOnAction = procedure Set Load = Me End Function Private Sub Class_Terminate() Set mobjParent = Nothing Set mobjBtn = Nothing End Sub Private Sub mobjBtn_Click() CallByName mobjParent, msOnAction, VbMethod End Sub 

现在,在你的表单中使用这个,创build一个空白的用户表单并粘贴到这个代码:

 Private Const mcsCmdBtn As String = "Forms.CommandButton.1" Private mBtn() As DynBtn Private Sub UserForm_Initialize() Dim i As Long ReDim mBtn(1) As DynBtn For i = 0 To UBound(mBtn) Set mBtn(i) = New DynBtn Next ''// One Liner mBtn(0).Load(Me, Me.Controls.Add(mcsCmdBtn, "Btn1", True), "DoSomething").Object.Caption = "Test 1" ''// Or using with block. With mBtn(1).Load(Me, Me.Controls.Add(mcsCmdBtn, "Btn2", True), "DoSomethingElse").Object .Caption = "Test 2" .Top = .Height + 10 End With End Sub Public Sub DoSomething() MsgBox "It Worked!" End Sub Public Sub DoSomethingElse() MsgBox "Yay!" End Sub Private Sub UserForm_Terminate() Erase mBtn End Sub