'------------------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 ----
Pergunta
WAYNEWAVE
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:
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?
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.