Ir para conteúdo
Fórum Script Brasil
  • 0

ComboBox Encadeado não Filtra Corretamente


WAYNEWAVE

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?

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...