Ir para conteúdo
Fórum Script Brasil
  • 0

Pesquisa em tempo Real


Michelle Alves

Pergunta

Peço até desculpas antes, pois já estou abusando da boa vontade dos amigos do fórum, principalmente o Kuroi, mas já quebrei a cabeça demais com isso. Vi uma pesquisa na internet, que ao digitar os dados no TEXTBOX o LIST filtra em tempo real. Tentei adaptar para minha situação, mas fiz algo errado e gostaria de entender o que há de errado, para primeiramente aprender essa pesquisa que achei muito interessante e depois incluir ela no meu projeto. Lembrando que no exemplo que vi, ela filtrava num LIST com apenas uma coluna, o meu tem 3 colunas.

Private Sub TextBox2_Change()

TextBox2.Value = UCase(TextBox2.Value)

Pesquisar

Dim i As Long

Dim sFind As String

sFind = TextBox2.Text

If Len(sFind) = 0 Then

ListBox1.ListIndex = -1

ListBox1.TopIndex = 0

Else

For i = 0 To ListBox1.ListCount - 1

If UCase(Left(ListBox1.List(i), Len(sFind))) = UCase(sFind) Then

UserForm2.ListBox1.AddItem Range("C" & i).Value

UserForm2.ListBox1.List(linha, 1) = Range("B" & i).Value

UserForm2.ListBox1.List(linha, 2) = Range("D" & i).Value

ListBox1.TopIndex = i

ListBox1.ListIndex = i

Exit For

End If

Next i

End If

End Sub

Sub Pesquisar()

Dim PrimEndereço, C

ListBox1.Clear

With Range("a2:d500") 'seu intervalo de pesquisa

Set C = .Find(TextBox2, LookIn:=xlValues)

If Not C Is Nothing Then

PrimEndereço = C.Address

Do

ListBox1.AddItem C

UserForm2.ListBox1.AddItem Range("C" & i).Value

UserForm2.ListBox1.List(linha, 1) = Range("B" & i).Value

UserForm2.ListBox1.List(linha, 2) = Range("D" & i).Value

Set C = .FindNext©

Loop While Not C Is Nothing And C.Address <> PrimEndereço

End If

End With

End Sub

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Obrigada Kuroi, espero pode retribuir para outras pessoas.

Então, olha só. No FORM1 tem um button que chama PESQUISA, quando clico nele, leva para o FORM2, que já será carregado com todos os itens do cadastro.

O que eu queria era que a medida que eu fosse escrevendo o nome do que procuro ele já filtrasse. Deu para entender ou ficou confuso ?

Editado por Michelle Alves
Link para o comentário
Compartilhar em outros sites

  • 0

kUROI,

Realmente, eu havia definido anteriormente a variável e depois postei sem o exemplo, ela puxava só o primeiro item cadastrado.

Mas com teu código foi assim: Rodar o código rodou, mas não puxou dado algum. Tentei da seguinte forma:

Private Sub TextBox2_Change()

TextBox2.Value = UCase(TextBox2.Value)

Pesquisar

Dim i As Long

Dim sFind As String

sFind = TextBox2.Text

If Len(sFind) = 0 Then

ListBox1.ListIndex = -1

ListBox1.TopIndex = 0

Else

For i = 0 To ListBox1.ListCount - 1

If UCase(Left(ListBox1.List(i), Len(sFind))) = UCase(sFind) Then

UserForm2.ListBox1.AddItem Range("C" & i).Value

UserForm2.ListBox1.List(UserForm2.ListBox1.ListCount - 1, 1) = Range("B" & i).Value

UUserForm2.ListBox1.List(UserForm2.ListBox1.ListCount - 1, 1) = Range("D" & i).Value

ListBox1.TopIndex = i

ListBox1.ListIndex = i

Exit For

End If

Next i

End If

End Sub

Sub Pesquisar()

Dim PrimEndereço, C

ListBox1.Clear

With Range("a2:d500") 'seu intervalo de pesquisa

Set C = .Find(TextBox2, LookIn:=xlValues)

If Not C Is Nothing Then

PrimEndereço = C.Address

Do

ListBox1.AddItem C

UserForm2.ListBox1.AddItem Range("C" & i).Value

UserForm2.ListBox1.List(UserForm2.ListBox1.ListCount - 1, 1) = Range("B" & i).Value

UserForm2.ListBox1.List(UserForm2.ListBox1.ListCount - 1, 1) = Range("D" & i).Value

Set C = .FindNext©

Loop While Not C Is Nothing And C.Address <> PrimEndereço

End If

End With

End Sub

Editado por Michelle Alves
Link para o comentário
Compartilhar em outros sites

  • 0

ai michelle, a sub ficou assim ó:

Sub Pesquisar()
Dim PrimEndereço, C As Range
ListBox1.Clear
With Sheets("BDCQE").Range("B2:B500") 'seu intervalo de pesquisa
    Set C = .Find(TextBox2.Text, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)
    If Not C Is Nothing Then
        PrimEndereço = C.Address
        Do
            UserForm2.ListBox1.AddItem Sheets("BDCQE").Range("C" & C.Row).Value
    
            UserForm2.ListBox1.List(UserForm2.ListBox1.ListCount - 1, 1) = Sheets("BDCQE").Range("B" & C.Row).Value
            UserForm2.ListBox1.List(UserForm2.ListBox1.ListCount - 1, 2) = Sheets("BDCQE").Range("D" & C.Row).Value
    
            Set C = .FindNext(After:=C)
        Loop While Not C Is Nothing And C.Address <> PrimEndereço
    End If
End With
End Sub[/code] o q eu mudei foi: 1 - sempre q for acessar o range, tem q especificar a planilha na frente, senao ele vai procurar na planilha atual. 2 - você tava passando as colunas trocadas no listbox. 3 - o findnext tem q ter o After:=C dentro. e ai funcionou aqui, mas tem q alterar tb o TextBox2_Change(). apaga essas linhas:
[code]UserForm2.ListBox1.AddItem Range("C" & i).Value

UserForm2.ListBox1.List(UserForm2.ListBox1.ListCount - 1, 1) = Range("B" & i).Value
UUserForm2.ListBox1.List(UserForm2.ListBox1.ListCount - 1, 1) = Range("D" & i).Value
q elas vao atrapalhar, isso já ta sendo feito no Pesquisa. alias, pode apagar td, não sei qual a finalidade do codigo q ta la, mas pelo menos pra esse filtro acho q não vai servir. e tb tem q adicionar o codigo pra ele poder carregar os dados de novo, caso ele apague o texto do textbox pode dexar a sub assim ó:
Private Sub TextBox2_Change()
    TextBox2.Value = UCase(TextBox2.Value)
    
    If TextBox2.Text = "" Then
        UserForm_Initialize
        Exit Sub
    End If
    
    Pesquisar
End Sub[/code]

quanto ao codigo é ate simples de entender, ó:

primero, a cada tecla digitada no textbox, ele procura o texto no range q você quer. quando ele acha, ele fica num loop q insere os dados no listbox e chama o findnext ate chegar não encontrar mais nd.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,4k
    • Posts
      652,1k
×
×
  • Criar Novo...