Geração de relatóri...
 
Notifications
Clear all

Geração de relatório através da listview

7 Posts
4 Usuários
0 Reactions
3,054 Visualizações
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Prezados,

Encontrei inúmeros exemplos de exportação e impressão de relatórios através da listview, mas, todos, pelo o que vi, apresentam certa demora na geração de tais relatórios, uma vez que os mesmos exportam os dados da listview para uma sheets do projeto e, só depois, faz a impressão dos mesmos.

A pergunta é: existe uma maneira de imprimir esses dados, de tal modo que eu não seja necessários lançá-los em uma sheets? ou seja, imprimi-los diretamente da listview!!

 
Postado : 09/12/2014 2:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Até onde eu sei, eu desconheço uma forma de fazer isto, pelo menos pelo ListView do Excel, temos de montar primeiro em uma aba e depois imprimir.
Umasugestão, dependendo do projeto e o porque da utilização do listview, se estiver buscando dados em BD seria atraves do ADO exportar direto para a aba, mas de qualquer forma temos de montar em uma aba primeiro, a diferença é que evitamos de preencher o ListView, depois filtrar e depois exportar para aba. Você pode filtrar direto para a aba, lógicamente como eu disse, depende do projeto.

[]s

 
Postado : 09/12/2014 5:09 pm
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

É, eu carrego a listview através dos dados contidos na aba BD, faço o filtro pela listview e, depois, para imprimi-los, passo-os para uma outra aba e chamo a impressora.

O meu pc é um core i5, mas, dependendo do número de linhas a serem empresas, leva-se muito tempo para para concluir todo o processo de impressão.

Veja o código que utilizo, talvez tenha algo a ser feito para otimizá-lo.

Sub imprimir()
     
      
Dim iRow As Integer
Dim i, w, lastRow As Integer

Dim rStartCell As Range
Plan35.Range("c12:m1000").Value = ""
Set rStartCell = Plan35.Range("c1000").End(xlUp).Offset(1, 0)
For i = 1 To lslista.ListItems.Count
Label109.Visible = True
    If lslista.ListItems(i).Checked = True Then
    Label109.Visible = True
    
      
        
iRow = iRow + 1
rStartCell.Cells(iRow, 1).Value = lslista.ListItems(i).Text
rStartCell.Cells(iRow, 2).Value = lslista.ListItems(i).ListSubItems(1).Text
rStartCell.Cells(iRow, 3).Value = lslista.ListItems(i).ListSubItems(2).Text
rStartCell.Cells(iRow, 4).Value = lslista.ListItems(i).ListSubItems(3).Text
rStartCell.Cells(iRow, 5).Value = lslista.ListItems(i).ListSubItems(4).Text
rStartCell.Cells(iRow, 6).Value = CDbl(lslista.ListItems(i).ListSubItems(5).Text)
rStartCell.Cells(iRow, 7).Value = CDate(lslista.ListItems(i).ListSubItems(6).Text)
rStartCell.Cells(iRow, 8).Value = CDate(lslista.ListItems(i).ListSubItems(7).Text)
rStartCell.Cells(iRow, 9).Value = lslista.ListItems(i).ListSubItems(8).Text
rStartCell.Cells(iRow, 10).Value = lslista.ListItems(i).ListSubItems(9).Text
rStartCell.Cells(iRow, 11).Value = lslista.ListItems(i).ListSubItems(10).Text

    End If
Next

Sheets("imprimir").Select

 Range("c12:m" & [c12:m1000].SpecialCells(xlCellTypeLastCell).ROW).Select
 
  

Dim selectimpressora



        selectimpressora = Application.Dialogs(xlDialogPrinterSetup).Show


      
     
 
    
   If selectimpressora = True Then
    Range("c4:m" & [c4:m1000].SpecialCells(xlCellTypeLastCell).ROW).Select
      
   Application.Dialogs(xlDialogPrint).Show
        End If
 
Postado : 10/12/2014 5:59 am
(@m-ant)
Posts: 0
New Member
 

eu utilizo este código para exportar a pesquisa do listview(no exemplo : lslista), é bastante rápido:

Private Sub btnexportar_Click()

   Dim i As Long
    Dim r As Long
    Dim c As Long
    
    Folha3.Activate
    
    'Clear any existing data
    Range("A1").CurrentRegion.ClearContents
    
    'List the column headers in the first row, starting at A1
    With Me.lsLista
        For i = 1 To .ColumnHeaders.Count
            Cells(1, i).Value = .ColumnHeaders(i)
        Next i
    End With
    
    
    'List the selected items and subitems starting at Row 2
    r = 2
    With Me.lsLista
        For i = 1 To .ListItems.Count
        If .ListItems(i).Checked Then
                 Cells(r, "A").Value = .ListItems(i).Text
                For c = 1 To .ListItems(i).ListSubItems.Count
                    Cells(r, c + 1).Value = .ListItems(i).ListSubItems(c).Text
                Next c
                r = r + 1
            End If
        Next i
    End With


 Dim wb As Workbook

 Sheets("Pesquisa").Copy

 Set wb = ActiveWorkbook

 With wb
 .SaveAs ThisWorkbook.path & "PesquisaPesquisa_ " & Format(Date, "yyyy'mm'dd_") & Format(Time, "hh'mm'ss_") & TextBoxFiltro
 .Close False
 End With

MsgBox "Dados de pesquisa gravados com êxito"
 Call limpa
End Sub

Neste caso copia os dados pesquisados para posterior tratamento num Workbook novo na pasta pesquisa.

 
Postado : 11/01/2015 4:26 pm
(@aprendiz)
Posts: 0
New Member
 

Amigo da uma olhada ai nesse exemplo e veja se ele atende as suas necessidades e veja se ta rápido na hora de gerar o relatório

 
Postado : 11/01/2015 11:12 pm
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Agradeço pela sua resposta, mas não conseguir executá-lo.

Aparece o erro de Memória insuficiente.

 
Postado : 12/01/2015 6:54 am
(@aprendiz)
Posts: 0
New Member
 

Você sabe criar memória virtual? isso deve ser porque você ta com muito programa aberto ao mesmo tempo

 
Postado : 12/01/2015 12:24 pm