DE LISTBOX PARA LISTVIEW - VBA

ALANTB 19/08/2009 13:14:08
#320259
Olá pessoal.Achei essa rotina (site Tomas Vasquez) para filtrar dados de um listbox digitando o critério em um textbox no EXCEL – VBA.Como ficaria a mesma rotina só que com um ListView????

Private TextoDigitado As String
--------------------------------------
Private Sub TextBox1_Change()
TextoDigitado = TextBox1.Text
Call PreencheLista
End Sub
---------------------------------------
Private Sub UserForm_Initialize()
Call PreencheLista
End Sub
---------------------------------------
Private Sub PreencheLista()
Dim ws As Worksheet
Dim i As Integer
Dim TextoCelula As String
Set ws = ThisWorkbook.Worksheets(1)
i = 1
ListBox1.Clear
With ws
While .Cells(i, 1).Value <> Empty
TextoCelula = .Cells(i, 1).Value
If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
ListBox1.AddItem .Cells(i, 1)
End If
i = i + 1
Wend
End With
End Sub
------------------------------------------------------------
WEBMASTER 19/08/2009 20:49:04
#320350
So basta mudar duas linhas...

Private Sub PreencheLista()
Dim ws As Worksheet
Dim i As Integer
Dim TextoCelula As String
Set ws = ThisWorkbook.Worksheets(1)
i = 1
[ô]ListBox1.Clear
Listview1.clear
With ws
While .Cells(i, 1).Value <> Empty
TextoCelula = .Cells(i, 1).Value
If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
[ô]ListBox1.AddItem .Cells(i, 1)
ListView1.ListItems.Add ,, .Cells(i, 1)
End If
i = i + 1
Wend
End With
End Sub
ALANTB 20/08/2009 09:34:19
#320387
Webmaster, da maneira que colocaste acima eu já havia tentado. O que ocorre :

- ListView.clear da erro o certo deveria ser ListView.columnheaders.clear,
- A propriedade View do ListView deve ser lvReport,
- GridLines = true,
-Com a linha ListView.ListItens.Add ,, .Cells(i,1), cada caracter digitado no textbox , o item correspondente no listview começa a ser inserido e vai se repetindo.

Sendo assim , voltamos a estaca zero....
WEBMASTER 20/08/2009 09:42:46
#320390
Resposta escolhida
Vamos la:

- ListView.clear da erro o certo deveria ser ListView.columnheaders.clear,
Nao necessariamente isso causa um erro.
Adicione um columnheader ao listview e pronto...

- A propriedade View do ListView deve ser lvReport,
Ok, isso voce configura.

- GridLines = true,
Ok, isso voce configura.

-Com a linha ListView.ListItens.Add ,, .Cells(i,1), cada caracter digitado no textbox , o item correspondente no listview começa a ser inserido e vai se repetindo.
Crie um key para cada item adicionado e faca com que eles nao se dupliquem criando uma funcao de insercao que trate o erro caso o key ja exista.
Tópico encerrado , respostas não são mais permitidas