Jump to content
Fórum Script Brasil
  • 0

ComboBox Encadeado não Filtra Corretamente


Question

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 to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148719
    • Total Posts
      644508
×
×
  • Create New...