Excel VBA将处理程序添加到表单中的每个复选框

Excel VBA将处理程序添加到表单中的每个复选框,vba,excel,checkbox,Vba,Excel,Checkbox,我有一个excel表单,在运行时添加了大量复选框。我想在每个复选框中添加一个处理程序,当值更改时将运行这些复选框。我知道在其他版本的Visual Basic中,我会使用AddHandler,但在Excel VBA中不起作用 根据一个示例,我得出了以下代码: 'This is in a class module called CheckboxHandler Public WithEvents cb As MSForms.CheckBox Private Sub cb_change() M

我有一个excel表单,在运行时添加了大量复选框。我想在每个复选框中添加一个处理程序,当值更改时将运行这些复选框。我知道在其他版本的Visual Basic中,我会使用AddHandler,但在Excel VBA中不起作用

根据一个示例,我得出了以下代码:

'This is in a class module called CheckboxHandler
Public WithEvents cb As MSForms.CheckBox

Private Sub cb_change()
    MsgBox ("test")
end sub
在我的用户表单中,我有以下代码:

With CreateObject("Scripting.Dictionary")
.....'Unrelated code omitted

'Variable Checkboxes
'Add Handler to checkboxes
Dim colCBHandlers As Collection
Set colCBHandlers = New Collection
Dim objHandler As CheckboxHandler

Dim i As Long
Dim chkBox As MSForms.CheckBox
For i = 1 To .count - 1
    Set chkBox = Me.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
    chkBox.Caption = .Keys()(i)
    chkBox.VALUE = False
    chkBox.Top = (chkBox.Height + 10) * (i - 1) + 55
    chkBox.Left = 725
    Set objHandler = New CheckboxHandler
    Set objHandler.cb = chkBox
    colCBHandlers.Add objHandler
Next i
End With

创建复选框的子对象退出后,
colCBHandlers
将退出范围


您需要将该集合声明为全局集合(在模块级别),以便在创建和填充后不会丢失它

这是一个不恰当的问题吗?我对否决票感到困惑。谢谢!我意识到这一点,我回来更新我的问题,结果发现你已经有了!