3
在Excel VBA中我添加了一個命令按鈕到窗體......像下面編程方式添加一個命令一個窗體
Set ctrl = Me.Controls.Add(_
bstrProgID:="Forms.CommandButton.1", _
Name:="CommandButton1", Visible:=True)
現在我想知道我怎麼會告訴它被點擊時它做什麼?謝謝!!
在Excel VBA中我添加了一個命令按鈕到窗體......像下面編程方式添加一個命令一個窗體
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
現在,在您的形式使用,創建一個空白用戶表單並粘貼此代碼到其中:
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
CallByName也可以傳遞對傳遞命令按鈕的Name或Tag屬性有用的參數。 – ak112358 2012-08-20 14:47:43