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
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!
Mauricio,
A partir de agora responderei a perguntas no fórum:
http://www.tomasvasquez.com.br/forum
Nos vemos lá!
Tomas
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.
Alberto,
Podemos discutir isso no fórum: http://www.tomasvasquez.com.br/forum/
Nos vemos lá!
Abraços
Tomás
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.
Luciana,
Já deu uma olhada nesse post?
https://www.tomasvasquez.com.br/blog/microsoft-office/vba-filtrar-dados-no-listbox-tela-de-pesquisa-parte-2
Além disso, sempre temos o fórum.
Abraços
Tomás