Como executar código quando qualquer valor da caixa de seleção é alterado em um formulário do usuário?
Estou tentando usar um módulo de classe, mas o código está agindo de uma maneira estranha que eu não entendo.
O código reconhecerá apenas que o valor de uma caixa de seleção foi alterado na primeira vez em que ocorrer se, e somente se, houver um ponto de interrupção definido no código para o evento _Change (). Nas demais instâncias, ele não reconhece mais alterações.
Aqui está o meu código em Userform_Initalize ()
Private Sub UserForm_Initialize()
Dim ckCollection As New Collection
Dim ctrl As MSForms.Control
Dim obj As clsCheckBoxes
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.CheckBox _
And Not TypeOf ctrl Is MSForms.OptionButton _
And Not TypeOf ctrl Is MSForms.ToggleButton _
And Not ctrl.Name = "ckEditFileDescription" Then 'do not need this particular checkbox in this class module
Set obj = New clsCheckBoxes
Set obj.Control = ctrl
ckCollection.Add obj
End If
Next ctrl
Set obj = Nothing
E aqui está o meu código no meu módulo de classe clsCheckBoxes
Private WithEvents xlCheckBoxes As MSForms.CheckBox
Public Property Set Control(cK As MSForms.CheckBox)
Set xlCheckBoxes = cK
End Property
Private Sub xlCheckBoxes_Change()
Call CheckVisibility
'This is the code I want to run when any of the checkboxes change
'but it seems to only recognize the event if the "Call CheckVisibility" is a
'breakpoint, and even then, it will only recognize the first time a checkbox value
'is changed
End Sub
Em uma nota lateral, "Se TypeOf ctrl É MSForms.CheckBox" está retornando algumas das minhas caixas de opções e botões de alternância e não sei por que. As instruções "Adicionar não" parecem corrigi-lo, mas ainda parece estranho que isso esteja acontecendo.