标签:VBA,类模块,用户窗体
本示例演示,当用户单击用户窗体中的命令按钮时,会弹出该命令按钮名称信息。
这个示例来源于ozgrid.com,有兴趣的朋友可以研究。在用户窗体上共有24个命令按钮,如下图1所示。
图1
当单击某个命令按钮时,会依次显示该命名按钮名称和标题信息,如下图2所示。
图2
在VBE中,插入一个类模块,将其重命名为“clsFrmCtls”,输入下面的代码:
Public mName
Public mFrm As Object
Public WithEvents mCommandbutton As MSForms.CommandButton
Private Sub mCommandButton_Click()
Call mFrm.SelectedChange(mName)
End Sub
或者:
Public mName
Public mFrm As Object
Public Event SelectedChange(objCtr)
Public WithEvents mCommandbutton As MSForms.CommandButton
Private Sub mCommandButton_Click()
RaiseEvent mFrm.SelectedChange(mName)
End Sub
然后,插入一个用户窗体,添加控件,如上图1所示,在该用户窗体代码模块中,输入下面的代码:
Dim mcolEvents As Collection
Public Sub SelectedChange(objCtr)
MsgBox objCtr
MsgBox Me(objCtr).Caption
End Sub
Private Sub UserForm_Initialize()
Dim cCBEvents As clsFrmCtls
Dim intCon
Set mcolEvents = New Collection
For Each intCon In Array(1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24)
Set cCBEvents = New clsFrmCtls
Set cCBEvents.mFrm = Me
cCBEvents.mName = Me.Controls("CommandButton" & intCon).Name
Set cCBEvents.mCommandbutton = Me.Controls("CommandButton" & intCon)
mcolEvents.Add cCBEvents
Next intCon
End Sub
Private Sub butClose_Click()
Unload Me
End Sub
Private Sub UserForm_Terminate()
Set mcolEvents = Nothing
End Sub