踩踏

时间:2016-03-18 18:32:47

标签: excel vba excel-vba class

我正在尝试编写代码来处理"更改"我的用户表单上任何ComboBox的事件。

我按this问题的答案,创建了一个单独的课程等。

但是,它不起作用。在新项目上使用相同的代码可以正常工作,当我使用"一步一步"执行(F8),但在使用正常运行时它不会。

看着其他人类似的困境,我添加了#34; DoEvents"但那没有用。

这是我在UserForm中的代码

Private Sub UserForm_Initialize()

Dim ComboBox_Collection As Collection
Dim ctrl As Control
Dim cbc As ComboBox_Class

Set ComboBox_Collection = New Collection
    For Each ctrl In UserForm1.MultiPage.Pages(2).Controls
    DoEvents
        If TypeName(ctrl) = "ComboBox" Then
            DoEvents
            Set cbc = New ComboBox_Class
            Set cbc.Control = ctrl
            ComboBox_Collection.Add cbc
            DoEvents
        End If
    Next ctrl
Set cbc = Nothing

End Sub

类模块,名为" ComboBox_Class":

Private WithEvents TriggerComboBox As MSForms.ComboBox

Public Property Set Control(CB As MSForms.ComboBox)
    Set TriggerComboBox = CB
End Property

Private Sub TriggerComboBox_Change()
    MsgBox ("yay")
End Sub

1 个答案:

答案 0 :(得分:2)

ComboBox_Collection需要是一个全局变量(至少是表单模块的全局变量),或者只要UserForm_Initialize Sub完成执行就会消失/超出范围