O comportamento que você está descrevendo para seus controles é semelhante ao de ter várias caixas de seleção acompanhadas por uma caixa de seleção Selecionar tudo para ativar ou desativar simultaneamente todas as caixas de seleção no conjunto:
Paraconseguirisso,acreditoquevocêprecisaráusaralgumcódigoVBAnosváriosmanipuladoresdeeventosAfterUpdateparaseuscontroles.
Noexemploaseguir,suponhoquevocêtenhaumconjuntodecaixasdeseleçãochamadaschk1,chk2echk3eumaúnicacaixadeseleçãoSelecionartudochamadachkA(noentanto,issopoderiaserexpandidoparaqualquernúmerodecaixasdeseleção,simplesmenteaumentandoolimitesuperiordosForloops).
Vocêpodeentãoalcançarocomportamentodesejadousandoasduasfunçõesaseguir:
Umafunçãoparaalternartodasascaixasdeseleçãodeopçõesparaumdeterminadovalor:
FunctionToggleAll(vAsInteger)DimiAsIntegerFori=1To3Controls("chk" & i).Value = v
Next i
End Function
Uma função para testar se todas as opções estão ou não habilitadas e habilitar ou desabilitar a caixa de seleção Selecionar Tudo de acordo:
Function AllEnabled()
Dim i As Integer, v As Integer: v = -1
For i = 1 To 3
v = v * Abs(Controls("chk" & i).Value)
Next i
chkA.Value = v
End Function
Em seguida, basta avaliar as funções acima de dentro dos manipuladores de eventos After Update para seus controles:
Private Sub chk1_AfterUpdate()
AllEnabled
End Sub
Private Sub chk2_AfterUpdate()
AllEnabled
End Sub
Private Sub chk3_AfterUpdate()
AllEnabled
End Sub
Private Sub chkA_AfterUpdate()
ToggleAll chkA
End Sub
Aqui, toda vez que o valor das caixas de seleção de opções individuais é alterado, a função AllEnabled verifica se todas as caixas de opções estão ativadas e define o valor da caixa de seleção Selecionar Tudo de acordo.
Quando o valor da caixa de seleção chkA ) é modificado, a função ToggleAll é avaliada, simultaneamente habilitando ou desabilitando a configuração de todas as caixas de opção no formulário.
