Ir para conteúdo
Fórum Script Brasil
  • 0

Exibir Dados numa ListView


IsraelB

Pergunta

Boa tarde! Estou com um erro em um código de exibição de dados numa ListView, será que alguém pode me ajudar?

Private Sub UserForm_Initialize()
    
    AdicionarColunasListView
    PreencherListViewRes
    
End Sub

Sub AdicionarColunasListView()
    Dim coluna As ColumnHeader
    
    ' Adiciona as colunas
    With ListViewRes
        ' Adiciona as colunas com os cabeçalhos
        Set coluna = .ColumnHeaders.Add(, , "EMPRESA")
         coluna.Width = 52
        Set coluna = .ColumnHeaders.Add(, , "PRODUTO")
         coluna.Width = 87
        Set coluna = .ColumnHeaders.Add(, , "QUANTIDADE")
         coluna.Width = 100
        Set coluna = .ColumnHeaders.Add(, , "APRESENTACAO")
         coluna.Width = 190
        Set coluna = .ColumnHeaders.Add(, , "PREÇO 1")
         coluna.Width = 62
        Set coluna = .ColumnHeaders.Add(, , "PREÇO 2")
         coluna.Width = 50
        Set coluna = .ColumnHeaders.Add(, , "EAN")
         coluna.Width = 50
        Set coluna = .ColumnHeaders.Add(, , "DATA")
         coluna.Width = 50
        Set coluna = .ColumnHeaders.Add(, , "PUBLICADA")
         coluna.Width = 60
        Set coluna = .ColumnHeaders.Add(, , "ATUALIZADA")
         coluna.Width = 60
        
        ' Define o estilo das colunas (opcional)
        ListViewRes.View = lvwReport
    End With
End Sub


Sub PreencherListViewRes()
    Dim searchValue As String
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim listViewRow As Long
    Dim resultListView As listView
    
    ' Defina o nome da planilha onde você deseja procurar
    Set ws = ThisWorkbook.Sheets("TabelaValores")
    
    ' Defina o valor do rótulo a ser pesquisado
    searchValue = VPesquisado.Caption
    
    ' Limpar a ListView antes de adicionar novos resultados
    Set resultListView = ListViewRes

    ' Encontrar a última linha na coluna A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' Loop através das células na coluna A e verificar os valores
    For listViewRow = 2 To lastRow ' Começa na linha 2 para pular o cabeçalho
        If LCase(Trim(ws.Cells(listViewRow, 1).value)) = LCase(Trim(searchValue)) Then
            ' Adicionar os valores das colunas B a K na ListView
            Dim col As Integer
            Dim newItem As listItem
            Set newItem = resultListView.ListItems.Add(, , ws.Cells(listViewRow, "B").value)
            For col = 3 To 11 ' Colunas C a K
                newItem.ListSubItems.Add , , ws.Cells(listViewRow, col).value
            Next col
        End If
    Next listViewRow
End Sub

A base da pesquisa é basicamente assim: Em um formulário o usuário insere o valor que será pesquisado, após uma série de validações ele transfere esse valor para o rótulo  "VPesquisado" do formulário atual afim de inicializar o formulário preenchendo a ListView. O maior problema do código é que na hora que inicia o formulário, somente as colunas aparecem, enquanto as linhas acabam não aparecendo.

A pesquisa consiste em: Procurar o valor na coluna A da planilha "TabelaValores" e retornar os valores correspondentes a linha, coluna B a K. (considerando repetidos)
Então se eu pesquisar o nome "Peito de Peru", e ele encontrar nas linhas 3, 8 e 100, deverá retornar os valores das colunas B a K das respectivas linhas 3,8 e 100.

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bom dia.

Foi realizar um teste no seu código e vi que está funcionando. Porém de uma maneira diferente...

Quando agente vai fazer uma pesquisa usamos um textbox mais você, olhando o nome do campo, está usando um label:

 searchValue = VPesquisado.Caption

Caso eu tenha entendi errado e o campo seja um textbox altere ele para ".value" assim vai pegar o texto do campo.

 

 

Agora seguindo a sua regra de negócio eu coloquei um textbox para colocar a informação em um label com o nome que preenche a listview:

Capturadetela2023-08-27063437.thumb.png.1006ea7331d18727be485a401442a9c1.png

 

Coloquei um evento para limpar o listview e depois mandei fazer o prenchimento novamente assim olhando o que precisa ser colocado:

Option Explicit

Private Sub campo_Change()
AlterarValorPesquisado campo.Value
LimparListViewRes
PreencherListViewRes
End Sub

Private Sub UserForm_Initialize()
    
    AdicionarColunasListView
    PreencherListViewRes
End Sub

Sub AdicionarColunasListView()
    Dim coluna As ColumnHeader
    
    ' Adiciona as colunas
    With ListViewRes
        ' Adiciona as colunas com os cabeçalhos
        Set coluna = .ColumnHeaders.Add(, , "EMPRESA")
         coluna.Width = 52
        Set coluna = .ColumnHeaders.Add(, , "PRODUTO")
         coluna.Width = 87
        Set coluna = .ColumnHeaders.Add(, , "QUANTIDADE")
         coluna.Width = 100
        Set coluna = .ColumnHeaders.Add(, , "APRESENTACAO")
         coluna.Width = 190
        Set coluna = .ColumnHeaders.Add(, , "PREÇO 1")
         coluna.Width = 62
        Set coluna = .ColumnHeaders.Add(, , "PREÇO 2")
         coluna.Width = 50
        Set coluna = .ColumnHeaders.Add(, , "EAN")
         coluna.Width = 50
        Set coluna = .ColumnHeaders.Add(, , "DATA")
         coluna.Width = 50
        Set coluna = .ColumnHeaders.Add(, , "PUBLICADA")
         coluna.Width = 60
        Set coluna = .ColumnHeaders.Add(, , "ATUALIZADA")
         coluna.Width = 60
        
        ' Define o estilo das colunas (opcional)
        ListViewRes.View = lvwReport
    End With
End Sub


Sub PreencherListViewRes()
    Dim searchValue As String
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim listViewRow As Long
    Dim resultListView As ListView
    
    ' Defina o nome da planilha onde você deseja procurar
    Set ws = ThisWorkbook.Sheets("TabelaValores")
    
    ' Defina o valor do rótulo a ser pesquisado
    searchValue = VPesquisado.Caption
    
    ' Limpar a ListView antes de adicionar novos resultados
    Set resultListView = ListViewRes

    ' Encontrar a última linha na coluna A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' Loop através das células na coluna A e verificar os valores
    For listViewRow = 2 To lastRow ' Começa na linha 2 para pular o cabeçalho
        If LCase(Trim(ws.Cells(listViewRow, 1).Value)) = LCase(Trim(searchValue)) Then
            ' Adicionar os valores das colunas B a K na ListView
            Dim col As Integer
            Dim newItem As ListItem
            Set newItem = resultListView.ListItems.Add(, , ws.Cells(listViewRow, "B").Value)
            For col = 3 To 11 ' Colunas C a K
                newItem.ListSubItems.Add , , ws.Cells(listViewRow, col).Value
            Next col
        End If
    Next listViewRow
End Sub


Public Sub LimparListViewRes()
ListViewRes.ListItems.Clear
End Sub


Public Sub AlterarValorPesquisado(novoValor As String)

VPesquisado.Caption = novoValor

End Sub

 

@IsraelB, olha se isso era o que estava procurando.

Link para o comentário
Compartilhar em outros sites

  • 0
17 horas atrás, Alyson Ronnan Martins disse:

Bom dia.

Foi realizar um teste no seu código e vi que está funcionando. Porém de uma maneira diferente...

Quando agente vai fazer uma pesquisa usamos um textbox mais você, olhando o nome do campo, está usando um label:

 searchValue = VPesquisado.Caption

Caso eu tenha entendi errado e o campo seja um textbox altere ele para ".value" assim vai pegar o texto do campo.

 

 

Agora seguindo a sua regra de negócio eu coloquei um textbox para colocar a informação em um label com o nome que preenche a listview:

Capturadetela2023-08-27063437.thumb.png.1006ea7331d18727be485a401442a9c1.png

 

Coloquei um evento para limpar o listview e depois mandei fazer o prenchimento novamente assim olhando o que precisa ser colocado:

Option Explicit

Private Sub campo_Change()
AlterarValorPesquisado campo.Value
LimparListViewRes
PreencherListViewRes
End Sub

Private Sub UserForm_Initialize()
    
    AdicionarColunasListView
    PreencherListViewRes
End Sub

Sub AdicionarColunasListView()
    Dim coluna As ColumnHeader
    
    ' Adiciona as colunas
    With ListViewRes
        ' Adiciona as colunas com os cabeçalhos
        Set coluna = .ColumnHeaders.Add(, , "EMPRESA")
         coluna.Width = 52
        Set coluna = .ColumnHeaders.Add(, , "PRODUTO")
         coluna.Width = 87
        Set coluna = .ColumnHeaders.Add(, , "QUANTIDADE")
         coluna.Width = 100
        Set coluna = .ColumnHeaders.Add(, , "APRESENTACAO")
         coluna.Width = 190
        Set coluna = .ColumnHeaders.Add(, , "PREÇO 1")
         coluna.Width = 62
        Set coluna = .ColumnHeaders.Add(, , "PREÇO 2")
         coluna.Width = 50
        Set coluna = .ColumnHeaders.Add(, , "EAN")
         coluna.Width = 50
        Set coluna = .ColumnHeaders.Add(, , "DATA")
         coluna.Width = 50
        Set coluna = .ColumnHeaders.Add(, , "PUBLICADA")
         coluna.Width = 60
        Set coluna = .ColumnHeaders.Add(, , "ATUALIZADA")
         coluna.Width = 60
        
        ' Define o estilo das colunas (opcional)
        ListViewRes.View = lvwReport
    End With
End Sub


Sub PreencherListViewRes()
    Dim searchValue As String
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim listViewRow As Long
    Dim resultListView As ListView
    
    ' Defina o nome da planilha onde você deseja procurar
    Set ws = ThisWorkbook.Sheets("TabelaValores")
    
    ' Defina o valor do rótulo a ser pesquisado
    searchValue = VPesquisado.Caption
    
    ' Limpar a ListView antes de adicionar novos resultados
    Set resultListView = ListViewRes

    ' Encontrar a última linha na coluna A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' Loop através das células na coluna A e verificar os valores
    For listViewRow = 2 To lastRow ' Começa na linha 2 para pular o cabeçalho
        If LCase(Trim(ws.Cells(listViewRow, 1).Value)) = LCase(Trim(searchValue)) Then
            ' Adicionar os valores das colunas B a K na ListView
            Dim col As Integer
            Dim newItem As ListItem
            Set newItem = resultListView.ListItems.Add(, , ws.Cells(listViewRow, "B").Value)
            For col = 3 To 11 ' Colunas C a K
                newItem.ListSubItems.Add , , ws.Cells(listViewRow, col).Value
            Next col
        End If
    Next listViewRow
End Sub


Public Sub LimparListViewRes()
ListViewRes.ListItems.Clear
End Sub


Public Sub AlterarValorPesquisado(novoValor As String)

VPesquisado.Caption = novoValor

End Sub

 

@IsraelB, olha se isso era o que estava procurando.

Boa Noite! 

Era exatamente disso que precisava, realizei umas alterações no formulário e apliquei o seu código, funcionou perfeitamente. Ajudou demais, sem nem como te agradecer. Valeuu!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...