Página 1 de 1

PreencherListViewSimplificado

Enviado: Ter Fev 21, 2012 10:20 am
por joseA
Olá,

Adaptando uma função do Tomás foi possivel encontrar um preenchimento do cabeçalho e ajuste das colunas, conforme dados da plan, em um controle ListView, bastante simplificado. Faça o teste:

Código: Selecionar todos

Private Sub PreencherCabeçalho()
'Desenvolvida por: Tomás Vásquez
'Adaptada por: José Arnaldo

    Dim ws As Worksheet
    Dim coluna As Integer
    Dim linha As Integer
    Set ws = Plan1
    coluna = 1
    linha = 1
    
    With ws
        While .Cells(linha, coluna).Value <> Empty
               With ListView1
                 .View = lvwReport
                 .Gridlines = True
                 .ColumnHeaders.Add Text:=ws.Cells(linha, coluna), Width:=ws.Cells(linha, coluna).Width
               End With
            coluna = coluna + 1
        Wend
    End With
End Sub
Faltou um preenchimento simplificado para as linhas. Alguma sugestão??

Re: PreencherListViewSimplificado

Enviado: Ter Fev 21, 2012 7:00 pm
por Mauro Coutinho
José aproveitando uma outra rotina a qual postarei em outro tópico, para preenchermos as linhas tambem a mesma ficaria assim :

Código: Selecionar todos

    Private Sub PreencherCabeçalho()
    'Desenvolvida por: Tomás Vásquez
    'Adaptada por: José Arnaldo
        Dim ws As Worksheet
        Dim coluna As Integer
        Dim linha As Integer
        Set ws = Plan1
        coluna = 1
        linha = 1
        
    Dim itm As ListItem, n As Long, lngCol As Long
    Dim vardata As Variant
    
    vardata = Range("A1").CurrentRegion.Value
        
        With ws
            While .Cells(linha, coluna).Value <> Empty
                   With ListView1
                     .View = lvwReport
                     .Gridlines = True
                     .ColumnHeaders.Add Text:=ws.Cells(linha, coluna), Width:=ws.Cells(linha, coluna).Width
                   
                   'Preenche as Linhas
                    For n = 2 To UBound(vardata)
                        Set itm = .ListItems.Add(n - 1, , vardata(n, 1))
                        For lngCol = 2 To UBound(vardata, 2)
                            itm.ListSubItems.Add , , vardata(n, lngCol)
                        Next lngCol
                    Next n
                   
                   End With
                coluna = coluna + 1
            Wend
        End With

    End Sub
Era isto que se referiu ?
Faltou um preenchimento simplificado para as linhas. Alguma sugestão??
[]s

Re: PreencherListViewSimplificado

Enviado: Ter Fev 21, 2012 7:09 pm
por Mauro Coutinho
Uma outra forma de preenchermos o Cabeçalho do ListView e as Linhas, seria com as s rotinas abaixo, infelizmente não tenho o autor, se alguem souber, favor colocar os creditos :

Código: Selecionar todos

Private Sub UserForm_Initialize()
    Dim itm As ListItem, n As Long, lngCol As Long
    Dim vardata As Variant
    
        vardata = Range("A1").CurrentRegion.Value
       
    With Me.ListView1
        .ColumnHeaders.Clear
            
            For n = 1 To UBound(vardata, 2)
                .ColumnHeaders.Add n, , vardata(1, n), 50
            Next n
            
            .HideColumnHeaders = False
            .View = lvwReport
            .Gridlines = True
    
            For n = 2 To UBound(vardata)
                
                Set itm = .ListItems.Add(n - 1, , vardata(n, 1))
            
                For lngCol = 2 To UBound(vardata, 2)
                    itm.ListSubItems.Add , , vardata(n, lngCol)
                Next lngCol
            
            Next n
            
    End With
    
End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)

    'Ordenar pela Coluna Clicada
     With ListView1
        If .SortKey = ColumnHeader.Index - 1 Then
           If .SortOrder = lvwAscending Then
              .SortOrder = lvwDescending
           Else
              .SortOrder = lvwAscending
           End If
        Else
           .SortKey = ColumnHeader.Index - 1
        End If
         .Sorted = True
    End With
  
End Sub
{]s

Re: PreencherListViewSimplificado

Enviado: Qua Fev 22, 2012 10:06 am
por joseA
Grande Mauro, Bom dia!!

No 2º procedimento funcionou beleza, deu até para adaptar o ajuste de colunas. Agora, no 1º adaptado os dados repetem.

Veja em um pequeno exemplo para demosntração.

Obs.: O arquivo com erro foi substituido, esse aí rola redondo.

Re: PreencherListViewSimplificado

Enviado: Qua Fev 22, 2012 11:19 am
por Mauro Coutinho
José, não tinha reparado qdo fiz o teste, mas acredito é só questão de adaptação, depois verifico melhor, por hora podemos ajustar a não repetição, mudando as instruções que preenchem a linha de lugar :

Código: Selecionar todos

    Private Sub PreencherCabeçalhoLinhas()
    'Desenvolvida por: Tomás Vásquez
    'Adaptada por: José Arnaldo
    'Implementado por: Mauro Coutinho
    
        Dim ws As Worksheet
        Dim coluna As Integer
        Dim linha As Integer
        Set ws = ThisWorkbook.Worksheets(NomePlanilha)
        coluna = 1
        linha = LinhaCabecalho
        
    Me.ListView1.ListItems.Clear
    Me.ListView1.ColumnHeaders.Clear
    
    Dim itm As ListItem, n As Long, lngCol As Long
    Dim vardata As Variant
    
    vardata = Range("A1").CurrentRegion.Value
        
        With ws
            While .Cells(linha, coluna).Value <> Empty
                   With ListView1
                     .View = lvwReport
                     .Gridlines = True
                     .ColumnHeaders.Add Text:=ws.Cells(linha, coluna), Width:=ws.Cells(linha, coluna).Width
                   
                   End With
                coluna = coluna + 1
            Wend
            
            'Preenche as Linhas
            With ListView1
                    For n = 2 To UBound(vardata)
                        Set itm = .ListItems.Add(n - 1, , vardata(n, 1))
                        For lngCol = 2 To UBound(vardata, 2)
                            itm.ListSubItems.Add , , vardata(n, lngCol)
                        Next lngCol
                    Next n
                End With
            
        End With

    End Sub
[]s

Re: PreencherListViewSimplificado

Enviado: Qua Fev 22, 2012 1:16 pm
por joseA
Obrigado Mauro,

Agora rodou legal, atualizei o anexo corrigido.

Fica aí uma opção para um preenchimento, sem a chatice de ficar definindo títulos e largura de colunas e sequência de dados para linha e colunas uma a uma. Lógico que em algumas conveniencias o modo "tradicional" prevalecerá. ;)

Abraços.