VBA – Como Filtrar dados no ListBox

VBA - Como Filtrar dados no ListBox

Este é um código de exemplo que tenho a muito tempo, mas como o pessoal tem pedido muito, vou deixá-lo em uma forma mais visível.

Como o VBA carece de controles de apresentação de dados mais avançados, como Grids e Listas complexas, acabamos apelando para o controle ListBox para apresentação de dados vindos de ResultSets (particularmente, prefiro apresentar os dados em uma planilha). Bom, como os dados já estão na LisBox, porque não aplicar o filtro nele mesmo?

Para ver um exemplo, proceda da seguinte forma:

  • Em um novo arquivo, crie uma lista de dados na Plan1, na coluna A a partir da célula A1
  • Abra o VBA (Alt+F11)
  • Adicione um UserForm ao projeto
  • No UserForm, adicione um controle TextBox e um ListBox (mantenha os nomes padrão dos controles)
  • Cliquem em F7 para exibir o código e adicione o seguinte:
  • Option Explicit
    'Autor: Tomás Vásquez.
    '       www.tomasvasquez.com.br/blog
    '       www.tomasvasquez.com.br/forum
    '       www.tomasvasquez.com.br/cursocsharp
    'Data:  15 de Janeiro de 2007.
    'Versão: 1.00 - Em VBA Microsoft Excel 2003 e 2007
    Private TextoDigitado As String
     
    Private Sub TextBox1_Change()
        TextoDigitado = TextBox1.Text
        Call PreencheLista
    End Sub
     
    Private Sub UserForm_Initialize()
        Call PreencheLista
    End Sub
     
    Private Sub PreencheLista()
        Dim ws As Worksheet
        Dim i As Integer
        Dim TextoCelula As String
        Set ws = ThisWorkbook.Worksheets(1)
        i = 1
        ListBox1.Clear
        With ws
            While .Cells(i, 1).Value <> Empty
                TextoCelula = .Cells(i, 1).Value
                If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
                    ListBox1.AddItem .Cells(i, 1)
                End If
                i = i + 1
            Wend
        End With
    End Sub

Execute o UserForm e digite valores válidos de filtro no TextBox e veja o efeito.

Trocando em miúdos, primeiro o UserForm carrega os dados da Plan1 no ListBox. Depois, o evento TextChange é mapeado para que toda digitação provoque a refiltragem dos dados. A forma de comparação é simples, mas poderia ter sido feita também com o operador Like.

Download do arquivo

http://www.tomasvasquez.com.br/forum/download/file.php?id=2142

Comentários

comentários

7 thoughts on “VBA – Como Filtrar dados no ListBox”

  1. ok mas e se eu trabalho com duas planilhas onde plan A eu cadastro e tranporto para plan B sendo que a plan B émeu “banco de dados”, porém para faazer a consulta eu ñ queria abrir a plan B e sim criar uma listbox na plan A carregando dados filtrados da plan B.
    grato!

  2. Eu tenho um listbox com 3 colunas e gostaria de fazer a pesquisa na segunda ou na terceira coluna, penso em colocar 2 options que o usuário escolheria se a pesquisa seria na coluna 2 ou 3.

  3. Olá Tomás! Sou iniciante no assunto e fiquei com uma dúvida de como aproveitar o seu código caso tenha duas colunas ou mais em minha planilha. Você conseguiria me auxiliar? O exemplo 2 fiquei muito perdida…
    []s,
    Lu Sato.

Comments are closed.