abreuluiston 13/10/2023, 16:31
Olá FInformatica,
Na verdade não é em virtude da chamada ser através do evento after_update. Isso ocorre pq a limpeza, como escrevi da primeira vez, limpa apenas a próxima combox e não todas as subsequentes. Além disso ela não limpava o valor antigo que havia sido selecionado mesmo os elementos não existindo mais. Ou seja, você alterava o valor da primeira combo internamente o procedimento de limpeza acontecia somente na segunda combo, mas o valor selecionado anteriormente da combo 2 permanecia em tela.
Então, um ajuste simples de apenas uma linha resolveria essa questão de não limpar o valor que havia sido selecionado. Porém, para as combos subsequentes não resolveria pq elas não foram chamadas para a limpeza.
Para isso você poderia controlar da seguinte forma:
No evento da combobox1 você chamaria a limpeza de todas as combos subsequentes. Algo como:
limparCombos ComboBox2
limparCombos ComboBox3
limparCombos ComboBox4
limparCombos ComboBox5
limparCombos ComboBox6
No evento da combobox2 a chamada seria idêntica, porem considerando somente as combos de 3 a 6 e assim até a chamada da ComboBox5 que limparia somente a comboBox6.
Percebe a trabalheira? Sem falar que o código ficaria feio rsrs.
Então, entrei com um outro conceito nesse mesmo post que é o de recursividade. Trata-se de um recurso poderoso que pode ser utilizado como exemplo para resolver essa questão. A recursividade nada mais é do que um procedimento chamando ele mesmo. Para isso é necessário controlar quantas vezes ele chamará ele mesmo para não ocorrer estouro de pilha.
Vou descrever abaixo a SUB final de limpeza e anexar novamente. Assim você e quem observar esse post pode pegar o modelo final e ao mesmo tempo fazer a alteração diretamente no seu próprio BD copiando e colando o novo código.
Só um detalhe, veja que criei mais um parâmetro na SUB. Então, em cada chamada você deverá acrescentar a variável que representa a combox a ser limpa:
no evento da combobox1 a chamada fica: limparCombos ComboBox2, 2
no evento da combobox2 a chamada fica: limparCombos ComboBox3, 3 e assim por diante.
O novo código é o que segue:
Private Sub limparCombos(wCombo As ComboBox, nCombo As Integer) ' wCombo é o nome da combox que o código eliminará os dados antes de incluir os novos.
Dim X As Integer, Y As Integer, wComboNova As ComboBox
If wCombo.ListCount > 0 Then
For X = 1 To wCombo.ListCount
wCombo.RemoveItem 0
Next
wCombo.Value = "" ' essa linha limpa o valor que havia sido selecionado anteriormente e a tela fica coerente pq o valor pode não existir mas na lista
' recursividade - chamada da própria sub de limpeza para limpar as combos subsequentes
For Y = nCombo + 1 To 6
limparCombos Me("ComboBox" & Y), Y ' aqui outro recurso interessante que é uma forma de referenciar um objeto (controle) existente no form.
Next
End If
End Sub
Agora acredito que finalizamos.
At.
Luis Abreu
- Anexos
- combobox_controladas.zip
- Você não tem permissão para fazer download dos arquivos anexados.
- (83 Kb) Baixado 9 vez(es)