none
Como fazer pesquisa em qualquer parte do campo da ListBox? RRS feed

  • 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! :)

    domingo, 13 de janeiro de 2019 22:50

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

    domingo, 13 de janeiro de 2019 23:10
  • 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
    segunda-feira, 14 de janeiro de 2019 22:00

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

    domingo, 13 de janeiro de 2019 23:10
  • 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
    segunda-feira, 14 de janeiro de 2019 22:00