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áriosmanipuladoresdeeventosAfterUpdate
paraseuscontroles.
Noexemploaseguir,suponhoquevocêtenhaumconjuntodecaixasdeseleçãochamadaschk1
,chk2
echk3
eumaúnicacaixadeseleçãoSelecionartudochamadachkA
(noentanto,issopoderiaserexpandidoparaqualquernúmerodecaixasdeseleção,simplesmenteaumentandoolimitesuperiordosFor
loops).
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.