Página 1 de 1

Filtro no Listbox com "*"

Enviado: Dom Nov 29, 2020 11:29 am
por fallex
Olá amigos, bom dia.
Estou encontrando problemas ao utilizar um filtro com listbox no vba.
Eu tenho formulário com filtro de cpf, o que funciona perfeitamente, entretanto para pesquisar nome não funciona. Creio que a diferença é que o filtro de CPF é uma pesquisa exata, e o nome é uma pesquisa com "*", que deve filtrar por qualquer valor que contenha o texto.
O código que eu utilizei é abaixo.

Código: Selecionar todos

Private Sub btnbuscanome_Click()

Dim nome As String
nome = Me.txtnome.Text
'APLICAÇÃO DO FILTRO
ActiveSheet.Range("$A$1:$CD$1069").AutoFilter Field:=8, Criteria1:="*" & nome & "*"

'CONDICAO PARA CARREGAR A LISTBOX
If ListBox1.ListCount < 1 Then
Call carregar_listbox
End If

'PROCURA O VALOR NOME NA LISTBOX
For item = 0 To ListBox1.ListCount - 1

If txtnome.Value <> "" Then
On Error Resume Next
If ListBox1.List(item, 6) = nome Then

Else
ListBox1.RemoveItem (item)
item = item - 1
ListBox1 = Null
End If
End If

Next

End Sub
Este código filtra o valor "nome" na planilha corretamente, entretanto, na listbox ele faz uma varredura na linha 6, "If ListBox1.List(item, 6) = nome", onde possui os nomes na listbox. Aqui era para excluir da listbox os itens cujo valor "nome" não forem iguais ao valor "nome", porém, a listbox exclui todos os registros, já que o filtro na listbox procura como valor exato e não como "*" & nome & "*".

Pra resumir, se eu filtro no nome Aline....todas as Aline aparecem na planilha, independente do sobrenome, mas na listbox, não aparece nenhuma pois a busca na listbox acontece com o valor exato, não considerando os sobrenomes.

Obrigado a todos pela ajuda.

Re: Filtro no Listbox com "*"

Enviado: Dom Nov 29, 2020 1:42 pm
por webmaster
fallex,

Acho que o operador Like é o que você procura. Esse tutorial explica bem sobre o mesmo:

http://www.jorgepaulino.com/2013/04/operador-like.html

Re: Filtro no Listbox com "*"

Enviado: Seg Nov 30, 2020 11:14 am
por Reinaldo
Assim no escuro, vamos no "achômetro":
altere a linha
If ListBox1.List(item, 6) = nome Then
para
If ListBox1.List(item, 6) like "*" & nome & "*" Then
Se não atender poste um modelo representativo de sua estrutura/dados

Re: Filtro no Listbox com "*"

Enviado: Qua Dez 02, 2020 7:36 pm
por fallex
Olá Amigos,

Eu entendi o conceito do Like, mas não consegui implementa-lo no projeto.
Reinaldo, testei suas idéias....o filtro ainda funciona mas na planilha, não funciona na listbox.

Como você sugeriu, em anexo está meu material de estudo. É ainda incompleto e certamente possui erros. De qualquer forma, se você utilizar o material, e fizer uma busca pelo cpf ou pedido verá que funciona perfeitamente....mas no nome não funciona....creio que utilizando será possível ver o que quero dizer filtrar na listbox.

Obrigado pelas ajudas.
https://drive.google.com/drive/folders/ ... sp=sharing

A proposito, não sei como colocar planilha aqui, então subi no google drive e colei o link.

Obrigado a todos

Re: Filtro no Listbox com "*"

Enviado: Qui Dez 03, 2020 7:48 am
por Reinaldo
Pelo que pude "ver" o filtro conforme abaixo funciona (retira do listbox itens diferente do pesquisado)

Código: Selecionar todos

Private Sub btnbuscanome_Click()
Dim Nome As String
Nome = Me.txtnome.Text

'APLICAÇÃO DO FILTRO
'ActiveSheet.Range("$A$1:$CD$1069").AutoFilter Field:=8, Criteria1:="*" & Nome & "*"

'CONDICAO PARA CARREGAR A LISTBOX
If ListBox1.ListCount < 1 Then Call carregar_listbox

'PROCURA O VALOR NOME NA LISTBOX
For Item = 0 To ListBox1.ListCount - 1
    If txtnome.Value <> "" Then
        On Error Resume Next
        If ListBox1.List(Item, 6) Like "*" & Nome & "*" Then
        
        Else
            ListBox1.RemoveItem (Item)
            Item = Item - 1
            ListBox1 = Null
        End If
    End If

Next
End Sub
Se não atender, de um exemplo do que executa e o que espera "receber"

Re: Filtro no Listbox com "*" [RESOLVIDO]

Enviado: Qui Dez 03, 2020 7:10 pm
por fallex
Olá Reinaldo, boa noite.

Testei novamente e percebi o erro que cometi antes, ao digitar o nome não estava digitando com a primeira letra em maiúsculo, e portanto o filtro na listbox nao funcionava.
Em outras palavras obrigatoriamente eu tenho que procurar por Bruce para dar certo....caso procure por bruce, embora o filtro funcione na planilha não funciona na listbox.

Obrigado Reinaldo pelas informações, e pela grande ajuda.

Re: Filtro no Listbox com "*"

Enviado: Sex Dez 04, 2020 10:52 am
por Reinaldo
... não estava digitando com a primeira letra em maiúsculo...
Pode experimentar:
substitua/altere a linha da rotina:

Código: Selecionar todos

Nome = Me.txtnome.Text
If ListBox1.List(Item, 6) Like "*" & Nome & "*" Then
Para:

Código: Selecionar todos

Nome = UCase(Me.txtnome.Text)
If UCase(ListBox1.List(Item, 6)) Like "*" & Nome & "*" Then

Re: Filtro no Listbox com "*" [RESOLVIDO]

Enviado: Dom Dez 27, 2020 12:33 pm
por fallex
Deu certo Reinaldo, obrigado pelas dicas.

Re: Filtro no Listbox com "*"

Enviado: Qua Fev 24, 2021 7:53 pm
por paulotuca
Boa noite!

Algum poderia me ajudar com a busca em um listbox? eu faço a busca e depois que clico em limpar tudo some e não faz mais a busca, e queria saber se e possivel dar dois cliques no listbox e os dados voltar para a page cadastro?