Excel VBA: como executar código quando qualquer valor da caixa de seleção é alterado em um formulário do usuário?

0

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.

B-Ballerl
fonte
11
Esta pergunta é respondida (incluindo um exemplo de código) em http://stackoverflow.com/questions/34877566/how-make-vba-run-on-clicking-any-checkbox-in-a-userform
geodekl