P
Phillip
I have 6 Combobox controls on a userform
named ComboBox1 to Combobox6
When I click on a combobox the class
Msgbox displays the combobox name
I clicked corrrectly.
However the raise event only fires on
the last combobox
It seems to be a scope problem but I
cannot see the answer
What extra code do I need to fire
the raise event for any combobox I click
UserForm Code
Public colevents As Collection
Public WithEvents cls As ClsComboEvent
Private Sub cls_GetClickedControl(n As String)
MsgBox n 'Only fires on last combobox click
End Sub
Private Sub UserForm_Initialize()
Dim ctrl As MSForms.Control
Dim x As Long
Set colevents = New Collection
For Each ctrl In Me.Controls
If TypeOf ctrl Is ComboBox Then
For x = 1 To 3 'add 3 choices
ctrl.AddItem "Choice" & CStr(x)
Next
Set cls = New ClsComboEvent
Set cls.Cevent = ctrl
colevents.Add cls
End If
Next
End Sub
Class Module code
Class is named cls
Public WithEvents Cevent As MSForms.ComboBox
Event GetClickedControl(n As String)
Private Sub Cevent_Click()
Dim ControlName As String
ControlName = Cevent.Name
'MsgBox ControlName 'this fires correctly
RaiseEvent GetClickedControl(ControlName)
End Sub
named ComboBox1 to Combobox6
When I click on a combobox the class
Msgbox displays the combobox name
I clicked corrrectly.
However the raise event only fires on
the last combobox
It seems to be a scope problem but I
cannot see the answer
What extra code do I need to fire
the raise event for any combobox I click
UserForm Code
Public colevents As Collection
Public WithEvents cls As ClsComboEvent
Private Sub cls_GetClickedControl(n As String)
MsgBox n 'Only fires on last combobox click
End Sub
Private Sub UserForm_Initialize()
Dim ctrl As MSForms.Control
Dim x As Long
Set colevents = New Collection
For Each ctrl In Me.Controls
If TypeOf ctrl Is ComboBox Then
For x = 1 To 3 'add 3 choices
ctrl.AddItem "Choice" & CStr(x)
Next
Set cls = New ClsComboEvent
Set cls.Cevent = ctrl
colevents.Add cls
End If
Next
End Sub
Class Module code
Class is named cls
Public WithEvents Cevent As MSForms.ComboBox
Event GetClickedControl(n As String)
Private Sub Cevent_Click()
Dim ControlName As String
ControlName = Cevent.Name
'MsgBox ControlName 'this fires correctly
RaiseEvent GetClickedControl(ControlName)
End Sub