Cara, dei uma mexida no teu código:
Private Sub buscar_Click()
ListBox1.Clear
Range("B1").Select
Dim linhaatual As Integer
Dim ultimalinha As Integer
If Textbox1.Text <> "" Then
ultimalinha = Range("A" & Rows.Count).End(xlUp).Row
contador = 0
Do While contador <= ultimalinha
ActiveCell.Offset(1, 0).Select
contador = contador + 1
If ActiveCell.Value = Textbox1.Value Then
'ListBox1.Clear
linhaatual = ActiveCell.Row
ListBox1.AddItem Plan1.Range("B" & linhaatual)
ListBox1.List(ListBox1.ListCount - 1, 1) = Plan1.Range("c" & linhaatual)
ListBox1.List(ListBox1.ListCount - 1, 2) = Plan1.Range("d" & linhaatual)
ListBox1.List(ListBox1.ListCount - 1, 3) = Plan1.Range("e" & linhaatual)
Else
'MsgBox "Linha não encontrada", vbCritical, "erro"
End If
Loop
End If
End Sub
Cara, primeiramente, vc sabe seguir o código linha a linha? (Use F8) Isso ajuda a achar erros de lógica.
O maior problema está no teu loop (Do loop).
Veja, vc fez o loop terminar, e só depois disso vc retorna as informações para o listbox. Com isso, a parte em que retorna essas informações só vai ser executada uma única vez, trazendo um único resultado.
Outra coisa, eu mexi no teu loop, porque vc estava contando até a linha 300, porém, o loop interrompia no primeiro valor diferente da pesquisa (ActiveCell.Value <> Textbox1.Value). Da forma como fiz, tirei essa parte, e coloquei ele rodando até a última linha existente.
Outra coisa: como vc está aprendendo, veja alguma coisa sobre indentação. Eu fiz no teu código. Fica mais fácil de se localizar. Compare com o teu, tem 2 "ifs", e 2 "end ifs", qual corresponde a qual? No teu código fica mais chato de ver, no meu, basta acompanhar verticalmente.
Também tirei aquela msgbox lá. Imagine o um loop rodando em 300 linhas e trazendo umas 200 msgbox com a mesma informação. Haja paciência, rs.
No mais, dá uma olhada nos 2, compare as diferenças, e se precisar, só perguntar.
Abraço
Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.
Gilmar
Postado : 24/03/2014 5:44 am