Notifications
Clear all

ListView Retornar Quantidade de Palavras

13 Posts
3 Usuários
0 Reactions
2,001 Visualizações
(@jcgmc)
Posts: 71
Trusted Member
Topic starter
 

Boa noite amigos,

Solicito ajuda pra criar um código VBA para o seguinte,

Exemplo:
Tenho a ListView1 com muitas linhas, e nelas tenho as palavras, "Fazer teste" ou qualquer outras palavras, que se repetem
em várias linhas.
Preciso q o código me retorne em uma TextBox, a qtde de vezes que estas palavras se repetem dentro da ListView1
Seria possível fazer isso??

Muito grato
Att, Carlos

 
Postado : 01/07/2015 9:14 pm
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Adapte o código a realidade do seu userform:

Private Sub TextBox1_AfterUpdate()

Dim Lst As ListItem
Dim iCont As Integer

For Each Lst In ListView1.ListItems

If UCase(Lst.Text) Like "*" & UCase(TextBox1.Text) & "*" Then
iCont = iCont + 1
End If

Next Lst

TextBox2.Value = iCont

End Sub

Textbox1 é onde digita a palavra a ser pesquisada e Textbox2 é a caixa onde recebe a quantidade.

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 02/07/2015 6:05 am
(@jcgmc)
Posts: 71
Trusted Member
Topic starter
 

Issamu, Eaee tudo bom!!
Obrigado a sua resposta, mas está retornando 0 na qtde. :(
Minhas TextBox são 3 e 4
Aguardo...

Att, Carlos

 
Postado : 02/07/2015 10:41 am
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Olá!
Copiei e colei o código num novo modelo com textbox3 como caixa de texto onde digito e textbox4 onde aparece resposta, e funcionou normalmente. Até mudei o evento para o Change, pois assim o filtro é em tempo real:

Private Sub TextBox3_Change()
Dim Lst As ListItem
Dim iCont As Integer

For Each Lst In ListView1.ListItems

If UCase(Lst.Text) Like "*" & UCase(TextBox3.Text) & "*" Then
iCont = iCont + 1
End If

Next Lst

TextBox4.Value = iCont
End Sub

Infelizmente não consigo gerar arquivo xlsm para enviar no momento.

Abraços.

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 02/07/2015 11:06 am
(@jcgmc)
Posts: 71
Trusted Member
Topic starter
 

Opss! Meu Excel é 2003...
Rsss

 
Postado : 02/07/2015 11:17 am
(@jcgmc)
Posts: 71
Trusted Member
Topic starter
 

Me esqueci de dizer que, os dados estão na 3ª coluna da Listview1
Vlw!!

 
Postado : 02/07/2015 11:28 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Aproveitando e adaptando a rotina do issamu, a instrução abaixo procura somente na Coluna 3 do Listview, lembrando que a contagem de colunas neste controle inicia-se em "0" zero, então o Num 2 em ListSubItems(2) representa a 3ª coluna.

Quanto a questão do Evento, eu sou da opinião de não utilizar o Change, até funciona, mas se for pesquisar pela palavra "Planilhando" a cada letra digitada acionará o evento, e com isto a rotina correrá 10 vezes.
Pesuisa somente na Coluna 3 do Listview.

    Private Sub TextBox3_AfterUpdate()
    Dim i As Double
    Dim iCont As Integer
        
        'Conta a Qde de Itens
        For i = 1 To ListView1.ListItems.Count
            
            With ListView1.ListItems
                'As colunas começam em Zero e o Num 2 em ListSubItems(2) representa a 3ª Coluna
                If UCase(ListView1.ListItems(i).ListSubItems(2).Text) Like "*" & UCase(TextBox3.Text) & "*" Then
                    iCont = iCont + 1
                End If

            End With

        Next i

        TextBox4.Value = iCont

    End Sub

Uma outra opção, se quiser associar a um Botão, ou tambem poderá por no evento do Textbox, as instruções abaixo pesquisarão pelo termos digitado em todas as linhas e colunas do ListView :

Private Sub Button1_Click()
    Dim i As Double, j As Double
    Dim iCont As Integer
   
        For i = 1 To ListView1.ListItems.Count
            'Verifica primeira Coluna
            With ListView1.ListItems '
                If UCase(ListView1.ListItems(i).Text) Like "*" & UCase(TextBox3.Text) & "*" Then
                    iCont = iCont + 1
                End If
                
                'Verifica as demais colunas
                For j = 1 To ListView1.ColumnHeaders.Count - 1 'Conta a qde de colunas
                    If UCase(ListView1.ListItems(i).ListSubItems(j).Text) Like "*" & UCase(TextBox3.Text) & "*" Then
                        iCont = iCont + 1
                    End If
                Next j
            
            End With
        Next i
    
    TextBox4.Value = iCont

End Sub

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/07/2015 1:00 pm
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Tenta assim:

Private Sub TextBox3_Change()

Dim iCont As Integer
Dim i As Integer

For i = 1 To ListView1.ListItems.Count
    If UCase(ListView1.ListItems(i).SubItems(2)) Like "*" & UCase(TextBox3.Text) & "*" Then
     iCont = iCont + 1
     End If
Next i

TextBox4.Value = iCont

End Sub

A parte ListView1.ListItems(i).SubItems(2) é que define a coluna, e está entre parenteses (2) porque a contagem começa do 0.

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 02/07/2015 1:05 pm
(@jcgmc)
Posts: 71
Trusted Member
Topic starter
 

Muito obrigado Mauro e Rafael,

Os códigos funcionaram perfeitamente. Versão do Rafael me agradou mais. Ficou ótimo!! :)
Mas, se eu quiser deixar uma palavra já pré-fixada na TextBox3
É possível??

 
Postado : 02/07/2015 2:42 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei como é o layout de seu formulario que tem o textbox, mas se quer deixar um texto fixo no textbox você pode usar a rotina nos Eventos "Enter" ou "Exit" do Textbox, ou ainda eliminar os eventos e associar a rotina a um Botão.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/07/2015 9:46 pm
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Olá jcgmc!
Se quiser associar uma palavra pre-fixada no seu textbox, você pode simplesmente adicionar a palavra desejada na propriedade text do seu textbox. Mas se for manter o código de pesquisa no evento change, você vai precisar chamar o evento change do textbox3 no evento Initialize do userform, para isso é só adicionar a linha:

TextBox3_Change

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 03/07/2015 6:31 am
(@jcgmc)
Posts: 71
Trusted Member
Topic starter
 

Rafael e Mauro,
Muito grato, mas a idéia é +/- assim:

Tenho na ListView3, o código e nome dos clientes, que ao selecionar um qualquer, automáticamente é exibido na ListView1 uma
espécie de relatório, onde com a ajuda de VCs, já consigo pesquisar por palavras específicas.
Oque desejo é, de manter a mesma palavra pesquisada, para qualquer cliente que eu clicar na ListView3. Tendo assim, de forma
automática, o resultado da pesquisa de cada cliente, apenas selecionando na ListView3 tndeu!!

Muito grato!!

 
Postado : 03/07/2015 10:13 am
(@jcgmc)
Posts: 71
Trusted Member
Topic starter
 

Boa noite!
Alguém mais pode me dar uma ajuda aee??
Vlw!!

 
Postado : 07/07/2015 5:36 pm