Ir ao conteúdo
  • Cadastre-se

Preciso inserir dados na Listview de células preenchidas de colunas selecionadas


Posts recomendados

Bom dia Pessoal.

Estou com um problema que não consigo resolver (verifiquei em meus livros, na net e nada que solucione), o que estou querendo fazer é o seguinte:

Inserir dados da planilha 01 na Listview (até aí já está feito), só que tem três colunas nesta planilha 01 que se refere a respostas de ações tomadas, mas só é preenchida (na linha) uma das três (desta forma uma fica preenchida e as outras duas ficam vazias). Na Listview tem todas as colunas da planilha 01 menos duas (eu deixei somente uma coluna de ação tomada), nesta coluna (na Listview) chamada ações será preenchida com a célula da coluna (das três colunas de ações tomadas) que não estiver vazia, e é neste ponto que não estou conseguindo.

Gostaria que vocês pudessem me ajudar a informar como devo proceder para que somente uma das células da plan1 (das três colunas ações) que está preenchida preencha a única coluna de Ação da Listview.

Estou anexando as imagens da plan1 e da Listview com os códigos desta Listview abaixo.

Private Sub UserForm_Initialize()

With ListView1
    .Gridlines = True 'Exibe/oculta as linhas da grade
    .View = lvwReport 'Estilo da Exibição
    .FullRowSelect = True 'Permite Selecionar uma lista

    'Adicona Colunas com seus parametros, neste caso Texto, tamanho e alinhamento
    .ColumnHeaders.Add Text:="REMESSA", Width:=80, Alignment:=lvwColumnLeft
    .ColumnHeaders.Add Text:="PEDIDO", Width:=40, Alignment:=lvwColumnCenter
    .ColumnHeaders.Add Text:="DESTINATÁRIO", Width:=140, Alignment:=lvwColumnCenter
    .ColumnHeaders.Add Text:="CIDADE", Width:=100, Alignment:=lvwColumnCenter
    .ColumnHeaders.Add Text:="UF", Width:=20, Alignment:=lvwColumnCenter
    .ColumnHeaders.Add Text:="OCORRENCIA", Width:=120, Alignment:=lvwColumnCenter
    .ColumnHeaders.Add Text:="DATA OCORRENCIA", Width:=100, Alignment:=lvwColumnCenter
    .ColumnHeaders.Add Text:="AÇÃO", Width:=120, Alignment:=lvwColumnCenter


End With

Call Atualizar

End Sub

Private Sub Atualizar()
Dim Item As ListItem
Dim LinhaFinal As Integer
Dim i As Integer

ListView1.ListItems.Clear

LinhaFinal = Plan1.Cells(Rows.Count, 2).End(xlUp).Row


For i = 2 To LinhaFinal
    Set Item = ListView1.ListItems.Add(Text:=Plan1.Cells(i, 2))
    Item.SubItems(1) = Plan1.Cells(i, 3)
    Item.SubItems(2) = Plan1.Cells(i, 4)
    Item.SubItems(3) = Plan1.Cells(i, 5)
    Item.SubItems(4) = Plan1.Cells(i, 6)
    Item.SubItems(5) = Plan1.Cells(i, 7)
    Item.SubItems(6) = Format(Plan1.Cells(i, 8), "DD MMM YYYY") 'Formatar data do mês com três letras e sem /
    Item.SubItems(7) = Plan1.Cells(i, 9)

Next

lb_num_registro.Caption = ListView1.ListItems.Count

End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)

'Clicando no cabeçalho de uma coluna da listview e será ordenado para Ascendente e Descendente
   With ListView1

    .SortKey = ColumnHeader.Index - 1

    If .SortOrder = lvwDescending Then
       .SortOrder = lvwAscending
    Else
       .SortOrder = lvwDescending
    End If

    .Sorted = True

   End With

End Sub

Private Sub bt_relatorio_Click()

Worksheets("Relatorio").Activate

'Intervalo das linhas e colunas entre A2 até H150
Worksheets("Relatorio").Range(Cells(2, 1), Cells(150, 8)).Select
Selection.ClearContents

End Sub

Obs: como sou novato em vba estou aprendendo, desta forma gostaria que me dessem um parecer de uma solução para este caso, se eu coloca-se a estrutura If … Then … Else, na linha " Item.SubItems(7) = Plan1.Cells(i, 9)" do preenchimento da Listview para selecionar somente os campos preenchidos na Plan1?? se for por este o método me deem um suporte, pois não sei como fazer isso para três linhas como mencionado acima (agradeceria muito).

 

Agradeço e aguardo uma resposta.

Laerte

Plan1 - Listview e suas acoes.jpg

Link para o comentário
Compartilhar em outros sites

Oi Basole.

 

Agradeço a sua resposta e o arquivo que enviou com a mudança, estou analisando e testando.

Até o momento está como eu precisava, muito obrigado.

Amanhã vou analisar melhor o código que foi inserido e alterado (para o meu aprendizado), e como sempre vou informar aqui para que outros que tiverem a mesma dúvida possam utilizar dentro de seu projeto.

 

Valeu e obrigado.

Laerte.

Link para o comentário
Compartilhar em outros sites

Boa tarde Pessoal e Basole.

 

Como havia informado na mensagem anterior, estou deixando os códigos com as alterações na Listview (das três colunas ações só uma está preenchida na planilha, e será preenchida em uma única coluna de Ação da Listview - conforme mensagens acima) para que possam alterar e inserir se adequando aos projetos de vocês; abaixo os códigos do preenchimento da Listview:

Private Sub Atualizar()
Dim Item As ListItem
Dim LinhaFinal As Integer
Dim i As Integer, j As Integer

ListView1.ListItems.Clear

LinhaFinal = Plan1.Cells(Rows.Count, 2).End(xlUp).Row


For i = 2 To LinhaFinal
    Set Item = ListView1.ListItems.Add(Text:=Plan1.Cells(i, 2))
    Item.SubItems(1) = Plan1.Cells(i, 3)
    Item.SubItems(2) = Plan1.Cells(i, 4)
    Item.SubItems(3) = Plan1.Cells(i, 5)
    Item.SubItems(4) = Plan1.Cells(i, 6)
    Item.SubItems(5) = Plan1.Cells(i, 7)
    Item.SubItems(6) = Format(Plan1.Cells(i, 8), "DD MMM YYYY") 'Formatar data do mês com três letras e sem /
    
    For j = 9 To 11
    If Sheets("Plan1").Cells(i, j) <> "" Then
      Item.SubItems(7) = Sheets("Plan1").Cells(i, j)
    Exit For
    End If
    Next j
Next i

lb_num_registro.Caption = ListView1.ListItems.Count

End Sub

Agradeço ao Basole a ajuda, muito obrigado.

 

Laerte.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...