vba:为什么单击事件在初始化时扩散?

vba:为什么单击事件在初始化时扩散?,vba,excel,Vba,Excel,在excel中,我有一个从列表中动态创建的带有复选框的用户表单 在初始化时,我调用一个子节点来影响复选框的单击事件。 然后我有一个类模块调用MyEvents,在其中我声明click event for复选框。 下面是MyEvents类模块: Option Explicit Public WithEvents chkGroup As MSForms.CheckBox Private Sub chkGroup_Click() Debug.Print "chkGroup_Click ---

在excel中,我有一个从列表中动态创建的带有复选框的用户表单 在初始化时,我调用一个子节点来影响复选框的单击事件。
然后我有一个类模块调用MyEvents,在其中我声明click event for复选框。
下面是MyEvents类模块:

Option Explicit

Public WithEvents chkGroup As MSForms.CheckBox

Private Sub chkGroup_Click()
    Debug.Print "chkGroup_Click -----> " & chkGroup.Caption
End Sub
以下是userForm上的子项:

Private Sub initCheckBox(chanelList As Variant)

    Dim myEvent As MyEvents
    Dim chkBox As Collection
    Dim n As Long, j As Integer, i As Integer
    n = Application.CountA(chanelList)
    Dim checkBoxChanel() As MSForms.CheckBox
    ReDim checkBoxChanel(n) As MSForms.CheckBox
    n = 1
    j = 1
    i = 1
    Set chkBox = New Collection
    chkBoxNum = 0
    For Each chanel In chanelList
        Set myEvent = New MyEvents
        Set checkBoxChanel(n) = Frame1.Controls.Add("Forms.CheckBox.1", "chkBoxChanel" & n)
        Set myEvent.chkGroup = Frame1.Controls("chkBoxChanel" & n)
        chkBox.Add myEvent
        With checkBoxChanel(n)
            .Top = j
            .Left = i
            .Caption = chanel
            .AutoSize = True
            .Value = True
            .Enabled = False
        End With
        n = n + 1
        i = i + 80
        If n Mod 3 = 0 Then
            j = j + 20
            i = 1
        End If
    Next

End Sub

有人能解释一下为什么
clickevent
在初始化时会扩散吗。这是正常的行为吗?

好的,我找到了窍门。将复选框值设置为true就像单击复选框一样!为了避免这种情况,我只需要在将值设置为true后影响事件。多亏了all for you comment and answers

您应该缩进代码4空格以突出显示语法,而不是使用
标记。还有,你说的“扩散”是什么意思?嗨,谢谢你的关注。我的意思是,在初始化userForm时,即使用户没有单击复选框,也会调用chkGroup\u Click。在“userForm\u Initialize”中是否有直接或间接触发事件的代码?如果没有,那么您首先需要在UserForm_中设置一个开关初始化并在退出时关闭,然后在clickevent中选中开关。在模块级别(即在任何代码之前)声明myEvent。现在它超出了范围。