Notifications
Clear all

Pesquisa em ListView

4 Posts
3 Usuários
0 Reactions
1,134 Visualizações
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Ola queridos amigos,

Como faço um filtro numa planilha usando um TextBox, exibindo toda a linha usando um ListView

usando como base o código abaixo:

Private Sub CommandButton1_Click()
Call PreencherListView
End Sub

Private Sub CommandButton2_Click()
ListView1.ListItems.Clear
End Sub


Sub PreencherListView()
Dim lastRow As Long
Dim li As ListItem
Dim X As Long
Dim k   As Integer
k = 2
    ' Adiciona as colunas
   With ListView1
        .ColumnHeaders.Clear
        .Gridlines = True
        .View = lvwReport
        .ColumnHeaders.Add Text:="Nome", Width:=80
        .ColumnHeaders.Add Text:="ID Funcional", Width:=80
        .ColumnHeaders.Add Text:="Lotação", Width:=80
        .ColumnHeaders.Add Text:="Cargo", Width:=80
        .ColumnHeaders.Add Text:="Status do seridor", Width:=80
        .ColumnHeaders.Add Text:="Ativo (Data admissão)", Width:=80
        .ColumnHeaders.Add Text:="Licença (Data início)", Width:=80
        .ColumnHeaders.Add Text:="Aposentado (Data)", Width:=80
        .ColumnHeaders.Add Text:="Indeferido", Width:=80
        .ColumnHeaders.Add Text:="Processo", Width:=80
        .ColumnHeaders.Add Text:="Contado em dobro", Width:=80
        .ColumnHeaders.Add Text:="Total dias gozados", Width:=80
        .ColumnHeaders.Add Text:="Total dias à gozar", Width:=80
    End With
    '...................................................................
'limpar
ListView1.ListItems.Clear
    
    lastRow = Plan1.Cells(Plan1.Cells.Rows.Count, "a").End(xlUp).Row
    
    ' Adiciona itens
   For X = 2 To lastRow
        Set li = ListView1.ListItems.Add(Text:=Plan1.Cells(X, "a").Value)
        li.ListSubItems.Add Text:=Plan1.Cells(X, "b").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "c").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "d").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "e").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "f").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "g").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "h").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "i").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "j").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "k").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "l").Value
        li.ListSubItems.Add Text:=Plan1.Cells(X, "m").Value
        k = k + 1
    Next
End Sub
 
Postado : 22/01/2014 11:07 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

bilokas,

Boa Tarde!

Veja se é assim.

 
Postado : 22/01/2014 1:21 pm
(@depoisteconto)
Posts: 183
Reputable Member
 

A dica parcial é a seguinte:

'Já existe um contador que sabe quantos nomes existem na Coluna A da Plan1
lastRow = Plan1.Cells(Plan1.Cells.Rows.Count, "a").End(xlUp).Row

'Aqui você faz a verificação dos nomes
For X = 2 To lastRow

'Aqui você pergunta se o nome digitado no TextBox1 é igual ao da Plan1
If Me.TextBox1.Text = Plan1.Cells(X, "A") Then

'Se for, faça igual ao botão que carrega todos os nomes

Está treinando VBA? Sem sim, vai conseguir fazer, senão vamos ter que fazer o exemplo diretamente no arquivo.

Eu acho que você consegue, tenta ae.

At

 
Postado : 22/01/2014 1:35 pm
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Amigos, obrigado pela pré-disposição em ajudar.
Além de treinar, isso também é um projeto real para minha partição.
Fritei o cérebro desmembrando o código, da mesma forma como o amigo explicou, dai consegui entender os erros.
Mas finalmente consegui, da seguinte forma:

Private Sub UserForm_Initialize()
        With ListView1

            .Gridlines = True
            .View = lvwReport
            .FullRowSelect = True
            .ColumnHeaders.Add Text:="Nome", Width:=80
            .ColumnHeaders.Add Text:="ID Funcional", Width:=80
            .ColumnHeaders.Add Text:="Lotação", Width:=80
            .ColumnHeaders.Add Text:="Cargo", Width:=80
            .ColumnHeaders.Add Text:="Status do servidor", Width:=80
            .ColumnHeaders.Add Text:="Ativo (Data admissão)", Width:=80
            .ColumnHeaders.Add Text:="Licença (Data início)", Width:=80
            .ColumnHeaders.Add Text:="Aposentado (Data)", Width:=80
            .ColumnHeaders.Add Text:="Indeferido", Width:=80
            .ColumnHeaders.Add Text:="Processo", Width:=80
            .ColumnHeaders.Add Text:="Contado em dobro", Width:=80
            .ColumnHeaders.Add Text:="Total dias gozados", Width:=80
            .ColumnHeaders.Add Text:="Total dias à gozar", Width:=80
        End With

End Sub

Private Sub TextBox1_Change()
        lastRow = Plan1.Cells(Rows.Count, "a").End(xlUp).Row
        ListView1.ListItems.Clear
        ' Adiciona itens
        For X = 2 To lastRow
            If UCase(Plan1.Cells(X, 1)) Like "*" & UCase(TextBox1) & "*" Then
                Set li = ListView1.ListItems.Add(Text:=Plan1.Cells(X, "a").Value)
                li.ListSubItems.Add Text:=Plan1.Cells(X, "b").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "c").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "d").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "e").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "f").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "g").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "h").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "i").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "j").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "k").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "l").Value
                li.ListSubItems.Add Text:=Plan1.Cells(X, "m").Value
            End If
        Next
End Sub

Esse objeto ListView realmente é muito legal de trabalhar.
Obrigado à todos mais uma vez.

 
Postado : 22/01/2014 1:44 pm