vba:为什么单击事件在初始化时扩散?
在excel中,我有一个从列表中动态创建的带有复选框的用户表单 在初始化时,我调用一个子节点来影响复选框的单击事件。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 ---
然后我有一个类模块调用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。现在它超出了范围。