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.
Pergunta
IsraelB
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
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.