Inquiridor
ComboBox Encadeado Nao Filtra Corretamente

Pergunta
-
Boa tarde,
Tenho um formulário encadeado que filtra em cinco níveis, com base em uma planilha de cadastros (Plan1).
1º Categoria; 2º Produto; 3º Tipo; 4º Tamanho; 5º Cor;
Segue o código:
'------------------Primeiro Nível--------------------------------------- Private Sub ComboBoxCategorias_Change() Call PreencheCombo2 End Sub Sub PreencheCombo2() Dim OCOLLECTION As New Collection Dim VARVALUE As Variant Dim I As Long Dim L As Long L = 2 ComboBoxProdutos.Clear On Error Resume Next For Each VARVALUE In Plan1.Range("B2:B" & Plan1.Range("A65536").End(xlUp).Row) If ComboBoxCategorias.Value = Plan1.Range("A" & L).Value Then OCOLLECTION.Add VARVALUE, VARVALUE End If L = L + 1 Next For I = 1 To OCOLLECTION.Count ComboBoxProdutos.AddItem OCOLLECTION.Item(I) Next I End Sub '-------------Segundo Nível-------------------------------------------- Private Sub ComboBoxProdutos_Change() Call PreencheCombo3 End Sub Sub PreencheCombo3() Dim OCOLLECTION As New Collection Dim VARVALUE As Variant Dim I As Long Dim L As Long L = 2 ComboBoxTipo.Clear On Error Resume Next For Each VARVALUE In Plan1.Range("C2:C" & Plan1.Range("A65536").End(xlUp).Row) If ComboBoxProdutos.Value = Plan1.Range("B" & L).Value Then OCOLLECTION.Add VARVALUE, VARVALUE End If L = L + 1 Next For I = 1 To OCOLLECTION.Count ComboBoxTipo.AddItem OCOLLECTION.Item(I) Next I End Sub '--------------------Terceiro Nível------------------------------------- Private Sub ComboBoxTipo_Change() Call PreencheCombo4 End Sub Sub PreencheCombo4() Dim OCOLLECTION As New Collection Dim VARVALUE As Variant Dim I As Long Dim L As Long L = 2 ComboBoxTamanho.Clear On Error Resume Next For Each VARVALUE In Plan1.Range("D2:D" & Plan1.Range("A65536").End(xlUp).Row) If ComboBoxProduto.Value = Plan1.Range("B" & L).Value Then If ComboBoxTipo.Value = Plan1.Range("C" & L).Value Then OCOLLECTION.Add VARVALUE, VARVALUE End If End If L = L + 1 Next For I = 1 To OCOLLECTION.Count ComboBoxTamanho.AddItem OCOLLECTION.Item(I) Next I End Sub '----------------------Quarto Nível----------------------------------- Sub PreencheCombo6() Dim OCOLLECTION As New Collection Dim VARVALUE As Variant Dim I As Long Dim L As Long L = 2 ComboBoxCor.Clear On Error Resume Next For Each VARVALUE In Plan1.Range("E2:E" & Plan1.Range("A65536").End(xlUp).Row) If ComboBoxTamanho.Value = Plan1.Range("D" & L).Value Then OCOLLECTION.Add VARVALUE, VARVALUE End If L = L + 1 Next For I = 1 To OCOLLECTION.Count ComboBox5.AddItem OCOLLECTION.Item(I) Next I End Sub '-------------------------Quinto Nível-------------------------------- Private Sub UserForm_Initialize() Dim OCOLLECTION As New Collection Dim VARVALUE As Variant Dim I As Long On Error Resume Next For Each VARVALUE In Plan1.Range("A2:A" & Plan1.Range("A65536").End(xlUp).Row) OCOLLECTION.Add VARVALUE, VARVALUE Next For I = 1 To OCOLLECTION.Count ComboBoxCategorias.AddItem OCOLLECTION.Item(I) Next I End Sub
Esse código apresenta dois problemas na sua execução:
PRIMEIRO: Ele não está filtrando em cadeia, ou seja, ele filtra somente com base no último critério e não com base em todos os critérios, trazendo na Combox valores em excesso, por exemplo, eu escolho:
Categoria: Recheios;
Produto: Pillow Top;
Tipo: Pluma de Ganso;
Tamanho: SK, C, S, ou Q/K ----- Isso é o que era pra ele trazer -----
Mas ele traz:
Categoria: Recheios;
Produto: Pillow Top;
Tipo: Pluma de Ganso;
Tamanho: SK, C, S,Q/K, 40x90cm, 60x90cm, 30x70cm ----- Isso é o que ele Traz ----
Isso acontece por que o código filtra com base apenas no ultimo critério(Tipo:Pluma de Ganso) quando na verdade era pra filtrar com base em todos os critérios.
SEGUNDO:
Quando o critério anterior é vazio, ele não traz o posterior corretamente, por exemplo:
Categoria: Recheios;
Produto: Protetor de Colchão;
Tipo: (vazio)
Tamanho: SK, C, S OU Q/K ----- Isso é o que era pra ele Trazer ----
Mas ele traz:
Categoria: Recheios;
Produto: Protetor de Colchão;
Tipo: (vazio)
Tamanho: (vazio) ----- Isso é o que ele Traz ----
Alguém pode me ajudar?
Todas as Respostas
-
-
-
Desculpa, achei que tinha sido claro quando exemplifiquei o problema, vou tentar de novo:
PRIMEIRO PROBLEMA:
Tenho cinco ComboBox que deveriam filtrar a Combobox subsequente com base nas ultimas escolhidas, ou seja, a intenção é que o código "amarre" uma condição a outra bom base em vários critérios, por exemplo, quando eu escolho:
Negrito são as opções que eu escolhi dentre as opções que apareceu na list.
1º ComboBoxCategorias: Recheios; Cama Superior; Decorativa; Aromas; Banho ----Aparece isto (Está Correto) ----
2º ComboBoxProdutos: Pillow Top; Recheio de Duvet; Protetor de Colchão; Travesseiros; Protetor Travesseiros; Recheio de Almofada; Recheio de Rolinho ----Aparece isto (Está Correto) ----
3º ComboBoxTipo: Aloevera; Pluma de Ganso ----Aparece isto (Está Correto) ----
4º ComboBoxTamanho: SK; Q/K; C; S; 50x70cm; 50x90cm; ----Aparece isto (Está ERRADO) ----
Deveria aparecer:
4º ComboBoxTamanho: SK; Q/K; C; S
Eu acredito que isso acontece porque o código amarra a próxima combobox com base na anterior, quando na verdade ele deveraia amarrar com base em todas as escolhidas anteriormente, não somente na anterior(Como se vc fosse na tabela de cadastros e filtrasse as condições que eu escolhi)
Então, para gerar a ComboBoxTamanho o código tem como critério a ComboBoxTipo quando na verdade deveria ter como critério a ComboBoxTipo, ComboBoxProdutos e ComboBoxCategorias.
SEGUNDO PROBLEMA:
1º ComboBoxCategorias: Recheios; Cama Superior; Decorativa; Aromas; Banho ----Aparece isto (Está Correto) ----
2º ComboBoxProdutos: Pillow Top; Recheio de Duvet; Protetor de Colchão; Travesseiros; Protetor Travesseiros; Recheio de Almofada; Recheio de Rolinho ----Aparece isto (Está Correto) ----
3º ComboBoxTipo: (vazio) ----Aparece isto (Está Correto, porém eu não seleciono na lista pq ele não permite) ----
4º ComboBoxTamanho: (vazio) ----Aparece isto (Está ERRADO) ----
Deveria aparecer:
4º ComboBoxTamanho: SK; Q/K; C; S
Ou seja, se eu tenho uma combo vazia, a combo subsequente não aparece corretamente. Por mais que esteja vazio, mas vazio também é um critério neste caso...- Editado Guilas segunda-feira, 1 de abril de 2019 01:43 Erro de formato