在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