Ajuda filtro listvi...
 
Notifications
Clear all

Ajuda filtro listview

5 Posts
2 Usuários
0 Reactions
1,469 Visualizações
(@assilva)
Posts: 5
Active Member
Topic starter
 

Olá a todos!
Adaptei um exemplo do Mauro Coutinho em um listview com duplo filtro feito pelo textbox1 e 2.
O primeiro filtra o código do produto e o segundo, já com o código filtrado, filtra o lote, quando há mais de um lote.
Acontece que o primeiro funciona sem problemas, mas o segundo não funciona.
Alguém pode por favor, me mostrar onde estou errando?
Segue planilha.
Desde já obrigado.

 
Postado : 17/10/2013 5:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Assilva, na Rotina :

Sub filtrocriterio1()

Altere o numero que se refere a Coluna do ListView
sLOTE = CDbl(ListView1.ListItems(iLin).ListSubItems(3))

Para :
sLOTE = CDbl(ListView1.ListItems(iLin).ListSubItems(2))

Tenha em mente sempre que a maioria dos controles no VBA as Colunas começam em "0"(zero), então, apesar de no ListView a Coluna LOTE ser a Terceira, para a programação ela é a Segunda.

[]s

 
Postado : 17/10/2013 6:38 pm
(@assilva)
Posts: 5
Active Member
Topic starter
 

Mauro, obrigado pela dica quanto a numeração das colunas.
Quanto a pesquisa, fiz a alteração, mas quando digito o nº do lote no textbox2 o listview fica vazio.
Tem mais alguma coisa errada no código?

 
Postado : 17/10/2013 7:55 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Assilva, o ideal seria em vez de utilizar o Evento Change no TextBox2, utilizar o Evento AfterUpdate ou Exit

O porque ? Como na Rotina filtrocriterio1 utilizamos a propriedade : ListView1.ListItems.Remove iLin, então a cada caracter digitado diferentemente filtrocriterio que filtra os itens diretamente da planilha, ele remove os itens ja carregados no listview, então em seu codigo de Lote 369258 qunado digitar numero por numero ele ira remover o iten o qual coincidiu com o numero 3 e desta forma não teremos mais esta referencia carregada no listview, e o resultado será VAZIO, para uma melhor compreensão, mantendo o evento CHANGE em vez de digitar numero por numero cole o valor inteiro e terá o resultado esperado, porque a rotina estará procurando pelo numero completo e não numero por numero.
Neste evento, temos um ganho de performance, pois é efetuado somente uma vez o Loop, imagine um numero com 6 caracteres, no evento change a rotina irá ser executada 6 vezes.

Private Sub TextBox2_AfterUpdate()
Call filtrocriterio1
End Sub

Faça os testes e veja se resolve.

[]s

 
Postado : 18/10/2013 5:25 am
(@assilva)
Posts: 5
Active Member
Topic starter
 

Mauro, perfeito funcionou como eu queria.
Mais uma vêz, muito obrigado.
Valeu!!!!

 
Postado : 19/10/2013 1:06 pm