在excel中的userformcheckbox添加运行时事件
我已经尝试@DaveShaw 代码 ,对于checkbox的运行时事件,点击不是一个有效的方法checkbox? 它从来没有进入方法checkBoxEvent_click
Dim CheckBoxArray() As New ClassEvents for i=0 to 10 Set cTemp = MOM.Frame_MOM_MOM.Controls.Add("Forms.CheckBox.1") With cTemp .Top = HeaderOffset + RowOffset + i * 25 'your top pos .Visible = True .Left = 30 'your left pos .Width = widthOfLabel 'your width .Name = Replace(keyArrays(i, 1), " ", "_") .Caption = keyArrays(i, 1) 'your caption , End With ReDim Preserve CheckBoxArray(0 To i) Set CheckBoxArray(i).checkBoxEvent = cTemp next i
和我的ClassEvents类看起来像这样:
Public WithEvents checkBoxEvent As MSForms.checkBox Private Sub checkBoxEvent_click() MsgBox "halla" 'checkBox.Caption End Sub
你必须保留Dim CheckBoxArray() As New ClassEvents
在你的userfom代码窗格的最上面,因此在它的任何子/函数之外
此外还使用Option Explicit
语句
它成为了
Option Explicit Dim CheckBoxArray() As New ClassEvents '<--| keep this line at the very top of your userform code pane Private Sub UserForm_Initialize() Dim i As Long Dim cTemp As MSForms.CheckBox '<-- with "Option Explicit" you have to declare all your variables For i = 0 To 10 Set cTemp = MOM.Frame_MOM_MOM.Controls.Add("Forms.CheckBox.1") With cTemp .Top = HeaderOffset + RowOffset + i * 25 'your top pos .Visible = True .Left = 30 'your left pos .Width = widthOfLabel 'your width .Name = Replace(keyArrays(i, 1), " ", "_") .Caption = keyArrays(i, 1) 'your caption , End With ReDim Preserve CheckBoxArray(0 To i) Set CheckBoxArray(i).checkBoxEvent = cTemp Next i End Sub
此外,由于您已经知道数组的维度,所以在开始的时候将它Dim
,而不要在每次迭代时重新使用它。
Option Explicit Dim CheckBoxArray(0 To 10) As New ClassEvents '<--| keep this line at the very top of your userform code pane Private Sub UserForm_Initialize() Dim i As Long Dim cTemp As MSForms.CheckBox '<-- with "Option Explicit" you have to declare all your variables For i = 0 To 10 Set cTemp = MOM.Frame_MOM_MOM.Controls.Add("Forms.CheckBox.1") With cTemp .Top = HeaderOffset + RowOffset + i * 25 'your top pos .Visible = True .Left = 30 'your left pos .Width = widthOfLabel 'your width .Name = Replace(keyArrays(i, 1), " ", "_") .Caption = keyArrays(i, 1) 'your caption , End With Set CheckBoxArray(i).checkBoxEvent = cTemp Next i End Sub