Usuário com melhor resposta
Como fazer pesquisa em qualquer parte do campo da ListBox?

Pergunta
-
Pessoal,
Tenho o código abaixo que funciona perfeitamente na pesquisa por código ou nome na listbox. Mas gostaria de fazer a pesquisa da seguinte maneira, na pesquisa por nome: Se eu começar a digitar "poderos...", já filtre "O poderoso Chefão", começando a digitar "sonh...", já filtre "Um sonho de liberdade".
É possível fazer esse tipo de filtro "por qualquer parte do campo" na ListBox?
O código que estou usando hoje:
'1 - PESQUISANDO PELO NOME Sub pesquisanome() TextoDigitado = UserForm1.TextBox1.Text 'Range("a1").Select Dim Ws As Worksheet Dim linha As Integer Dim linhalistbox As Integer Dim TextoCelula As String Set Ws = ThisWorkbook.Worksheets("plan2") linha = 2 linhalistbox = 0 UserForm1.ListBox1.Clear With Ws While .Cells(linha, 1).Value <> Empty TextoCelula = .Cells(linha, 1).Value If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then With UserForm1.ListBox1 .AddItem .List(linhalistbox, 0) = Sheets("plan2").Cells(linha, 1) .List(linhalistbox, 1) = Sheets("plan2").Cells(linha, 2) .List(linhalistbox, 2) = Sheets("plan2").Cells(linha, 3) linhalistbox = linhalistbox + 1 End With End If linha = linha + 1 Wend End With End Sub 2 - PESQUISANDO PELO CÓDIGO Sub pesquisacodigo() TextoDigitado = UserForm1.TextBox2.Text 'Range("a1").Select Dim Ws As Worksheet Dim linha As Integer Dim linhalistbox As Integer Dim TextoCelula As String Set Ws = ThisWorkbook.Worksheets("plan2") linha = 2 linhalistbox = 0 UserForm1.ListBox1.Clear With Ws While .Cells(linha, 1).Value <> Empty TextoCelula = .Cells(linha, 2).Value If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then With UserForm1.ListBox1 .AddItem .List(linhalistbox, 0) = Sheets("plan2").Cells(linha, 1) .List(linhalistbox, 1) = Sheets("plan2").Cells(linha, 2) .List(linhalistbox, 2) = Sheets("plan2").Cells(linha, 3) linhalistbox = linhalistbox + 1 End With End If linha = linha + 1 Wend End With End Sub
Obrigada! :)
Respostas
-
Olá, boa noite.
É possível sim, basta utilizar ou a função "InStr" ou o operador "Like" para fazer as comparações. Para o primeiro caso, utilize o argumento "vbTextCompare", para ignorar a capitulação. Para o segundo caso insira os caracteres coringa para generalização, como por exemplo "*texto procurado*".
Consegue a partir daí?
Filipe Magno
- Marcado como Resposta Jeniffer Oliveira segunda-feira, 14 de janeiro de 2019 22:00
-
Oi Filipe!!
Muito obrigada pela dica, consegui fazer aqui, está funcionando perfeitamente, consigo pesquisar qualquer parte do campo agora! Show :)
Utilizei Instr e VbTextCompare
Ficou assim meu código:
Sub pesquisanome() TextoDigitado = UserForm1.TextBox1.Text Dim Ws As Worksheet Dim linha As Integer Dim linhalistbox As Integer Dim TextoCelula As String Dim MeuValor As Variant Set Ws = ThisWorkbook.Worksheets("plan2") linha = 2 linhalistbox = 0 UserForm1.ListBox1.Clear With Ws While .Cells(linha, 1).Value <> Empty TextoCelula = .Cells(linha, 1).Value 'Essa parte que pesquisa qualquer parte do campo >>>>>> MeuValor = InStr(1, TextoCelula, TextoDigitado, vbTextCompare) If MeuValor > 0 Then With UserForm1.ListBox1 .AddItem .List(linhalistbox, 0) = Sheets("plan2").Cells(linha, 1) .List(linhalistbox, 1) = Sheets("plan2").Cells(linha, 2) .List(linhalistbox, 2) = Sheets("plan2").Cells(linha, 3) linhalistbox = linhalistbox + 1 End With End If linha = linha + 1 Wend End With End Sub
- Marcado como Resposta Jeniffer Oliveira segunda-feira, 14 de janeiro de 2019 22:01
Todas as Respostas
-
Olá, boa noite.
É possível sim, basta utilizar ou a função "InStr" ou o operador "Like" para fazer as comparações. Para o primeiro caso, utilize o argumento "vbTextCompare", para ignorar a capitulação. Para o segundo caso insira os caracteres coringa para generalização, como por exemplo "*texto procurado*".
Consegue a partir daí?
Filipe Magno
- Marcado como Resposta Jeniffer Oliveira segunda-feira, 14 de janeiro de 2019 22:00
-
Oi Filipe!!
Muito obrigada pela dica, consegui fazer aqui, está funcionando perfeitamente, consigo pesquisar qualquer parte do campo agora! Show :)
Utilizei Instr e VbTextCompare
Ficou assim meu código:
Sub pesquisanome() TextoDigitado = UserForm1.TextBox1.Text Dim Ws As Worksheet Dim linha As Integer Dim linhalistbox As Integer Dim TextoCelula As String Dim MeuValor As Variant Set Ws = ThisWorkbook.Worksheets("plan2") linha = 2 linhalistbox = 0 UserForm1.ListBox1.Clear With Ws While .Cells(linha, 1).Value <> Empty TextoCelula = .Cells(linha, 1).Value 'Essa parte que pesquisa qualquer parte do campo >>>>>> MeuValor = InStr(1, TextoCelula, TextoDigitado, vbTextCompare) If MeuValor > 0 Then With UserForm1.ListBox1 .AddItem .List(linhalistbox, 0) = Sheets("plan2").Cells(linha, 1) .List(linhalistbox, 1) = Sheets("plan2").Cells(linha, 2) .List(linhalistbox, 2) = Sheets("plan2").Cells(linha, 3) linhalistbox = linhalistbox + 1 End With End If linha = linha + 1 Wend End With End Sub
- Marcado como Resposta Jeniffer Oliveira segunda-feira, 14 de janeiro de 2019 22:01