[VBA] Popular um listview : Preenchendo dados dentro de um listview

Para quem gosta de desenvolver formulários no VBA, talvez o listview seja a maneira mais adequada de apresentar dados em forma de tabela, pois o listview permite uma aparência mais amigável, assemelhando-se a visualização da planilha, diferentemente de um listbox. Veja um exemplo de visualização de um listview num userform:

Excelmaniacos - Listview 0

O controle Listview não vem habilitado por padrão, por isso é preciso habilitá-lo, clicando com o botão direito do mouse na caixa de ferramentas e selecionando “Controles adicionais…” e então selecionar o controle “Microsoft Listview Control, Version 6.0”:

Excelmaniacos - Listview 1

Após habilitar a opção e dar OK, você notará que a opção do Listview aparecerá na sua caixa de ferramentas:

Excelmaniacos - Listview 2

Agora você pode inserir o controle no seu userform e começar a desenvolver a programação para populá-lo com dados desejáveis da sua planilha. Para aprendizado, vou utilizar um exemplo simples, populando com um intervalo na Plan1 do endereço A1:C9, como visto na primeira imagem. O userform será o nome padrão userform1 e o Listview será o nome padrão Listview1

É importante também que a referência Microsoft Windows Common Controls esteja ativa para que o Listview funcione adequadamente. Veja a imagem:

Excelmaniacos - Listview MSCOMCTL

Para começar, dê duplo clique sobre o userform para abrir a tela do módulo dele para iniciar a edição do código. Vou adotar um código no evento Initialize do Userform (ou dependendo da aplicação também poderia ser no evento Activate) para que ao carregar o userform o Listview já venha populado. Para facilitar o desenvolvimento, vou deixar separado o procedimento de carregar o listview (vou chamar de “PopularListView”), para que ele seja chamado num comando dentro do evento Initialize do Userform.

Veja o código do evento:

Private Sub UserForm_Initialize()

'Ajustes de algumas propriedades importantes do ListView
With Me.ListView1
.Gridlines = True 'linhas de grade visíveis (true)
.HideColumnHeaders = False 'False para cabeçalho visível e True para invisível
.View = lvwReport 'Ajustar visualização do listview 
End With
'se quiser detalhes da propriedade .view consulte: https://msdn.microsoft.com/en-us/library/aa733652(v=vs.60).aspx)

'Chamar o procedimento para popular o Listview1
Call PopularListView

End Sub

O procedimento para popular o listview chamarei de “PopularListView” e o código será o seguinte:

Private Sub PopularListView()

'Declaração de variáveis
Dim wksOrigem As Worksheet
Dim rData As Range
Dim rCell As Range
Dim LstItem As ListItem
Dim linCont As Long
Dim colCont As Long
Dim i As Long
Dim j As Long

'Definição da planilha de origem
Set wksOrigem = Worksheets("Plan1")

'Definição do range de origem
Set rData = wksOrigem.Range("A1").CurrentRegion

'Adicionar cabeçalho no listview com laço de repetição 'For'
For Each rCell In rData.Rows(1).Cells
Me.ListView1.ColumnHeaders.Add Text:=rCell.Value, Width:=90
Next rCell

'Alimentar variável linCont com número de linhas do intervalo fonte
linCont = rData.Rows.Count

'Alimentar variável colCont com número de linhas do intervalo fonte
colCont = rData.Columns.Count

'Popular o ListView
For i = 2 To linCont
Set LstItem = Me.ListView1.ListItems.Add(Text:=rData(i, 1).Value)
For j = 2 To colCont
LstItem.ListSubItems.Add Text:=rData(i, j).Value
Next j
Next i

End Sub

Para usar um elemento da Listview, você pode, por exemplo, usar o evento Click do Listview e a propriedade SelectedItem. Essa propriedade trará o valor da primeira coluna da linha clicada do listview. Se quiser usar um valor das outras colunas é preciso adicionar a propriedade SubItems com o índice desejado iniciando a partir de 1. Veja um exemplo de código para trazer uma msgbox para cada item da linha:

Private Sub ListView1_Click()

MsgBox "NOME: " & ListView1.SelectedItem

MsgBox "IDADE: " & ListView1.SelectedItem.SubItems(1)

MsgBox "SEXO: " & ListView1.SelectedItem.SubItems(2)

End Sub

Baixe o exemplo deste artigo no link: Download Exemplo de Listview

8 comentários em “[VBA] Popular um listview : Preenchendo dados dentro de um listview

  1. Caros, estou com um pequeno problema parecido com o tema do tópico.

    Tenho uma listbox e preciso verificar se alguns arquivo tiveram sucesso em seu download, a questão é: A cada download com sucesso a lista correspondente deverá ser verde e a cada download falho a linha em questão deverá ser vermelha.
    Alguem apto a “helpar” este iniciante?

    Curtir

  2. Boa tarde!!
    Amigo sou novato aqui e preciso de sua ajuda, visto que você é fera!!!

    Preciso criar um formulário de cadastro para controle da seguinte forma:

    1º Criar um Combobox com uma lista de informações
    – Ao selecionar algum ítem, ir para a Listview incluir informações nos
    campos, conforme abaixo:
    2º Criar um Listview com os campos:
    Nº DO PALETT
    LOCAL
    VOLUME
    NOTA FISCAL
    DATA DE ENVIO
    Criar botões ao lado dos campos:
    Inclui uma linha quando tiver mais informaçoes e deixar os campos
    somente para leitura
    Deixar os campos em modo para fazer alterações
    3º Criar condições:
    No campo PALET: Caso o Nº DO PALET já exista, exibir a msg: “Palet já
    cadastrado para o local…” e cancelar
    Se o campo “DATA DE ENVIO” estiver preenchido liberar nº de Palet em duplicidade
    No campo LOCAL: Caso o LOCAL já exista, exibir a msg: “Este local já está
    em uso para o Palet nº…”
    Se o campo “DATA DE ENVIO” estiver preenchido liberar LOCAL em duplicidade

    4º Criar botões no rodapé do listview:
    “Confirma as informaçoes?”
    “Deseja cancelar?”

    Obrigado e Deus abençoe!!!

    Curtir

  3. Boa tarde Senhores!!!
    Está acontecendo o seguinte:

    1º – Na planilha que enviei pra voce eu criei a seguinte macro:

    Sub Proteger_Formulas()
    Range(“D2843:D5000″).Select
    On Error Resume Next
    Selection.SpecialCells(xlCellTypeFormulas, 23).Select
    With Selection.Validation
    .Delete
    .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=”>1″
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = “”
    .ErrorTitle = “Existe Fórmula – não digite!”
    .InputMessage = “”
    .ErrorMessage = “Célula com Fórmula está protegida!!”””
    .ShowInput = True
    .ShowError = True
    End With
    End Sub

    2º – Adicionei essa macro no Desenvolvedor dentro da Planilha que enviei pra voce em anexo, na: Plan6(Banco de Dados).

    3º – Salvei a planilha com essa macro.
    4º – Fiz o teste, então verifiquei que a macro está protegendo todas as células que contém Fórmulas.
    5º – Então entrei no código da macro e fiz uma alteração: coloquei o sinal de apóstrofo ” ‘ ” antes de cada linha do código para evitar que a macro seria executada até que eu corrigisse o código para proteger apenas a faixa de ceulas desejada.
    6º – Salvei novamente a planilha com o código alterado.
    7º – Então verifiquei que a macro continuou executando mesmo com a lteração.
    8º – Ai entrei no desenvolvedor para excluir a macro, FIZ O PROCESSO NORMAL: CLIQUEI na Plan6(Banco de Dados), então não apareceu mais o código da macro.

    É isso aí amigo. Por favor me ajuda localizar essa macro, para resolver esse problema.

    Obrigado

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Gravatar
Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s