Relatório de cobrança Excel VBA – Gerar PDF VBA

Esta é uma solução para imprimir ou gerar em lote PDF de um relatório de cobrança em Excel feito com VBA.

É muito comum termos a necessidade de imprimir ou gerar PDF em lote no Excel.

Digamos que você tenha uma lista com mais de 400 registros e você precisa imprimir este relatório alterando um a um os clientes e salvar em PDF ou ainda imprimir no Excel.

Neste artigo iremos apresentar uma solução criada em Excel e VBA para imprimir em lote cobranças no Excel.

O objetivo é que ao clicar no botão de gerar PDF ou de imprimir a lista altere as informações automaticamente no relatório de cobrança e gere eles em uma pasta ou diretamente na impressora.

Estrutura da Planilha para Gerar PDF no VBA

A estrutura da pasta de trabalho é composta por três planilhas.

  • Recibo: Estrutura do recibo pronto utilizando funções PROCV para retornar os dados da cobrança conforme o cliente selecionado ao topo do relatório.
  • Clientes: Nesta planilha temos uma lista com todos os clientes que fazem parte das cobranças que serão enviadas.
  • Distribuição: Todos os produtos que foram distribuídos aos pontos de venda, estes itens são os os dados que teremos na nossa planilha de cobrança.
gerar pdf vba

Base de Clientes

A base de clientes é composta pelos campos abaixo:

gerar pdf vba 1

Veja que temos além dos campos do endereço o entregador e a Rota que serão usadas na planilha para que possam ser separados os documentos que irão para cobrança.

Esta é uma lista única de clientes, é à partir dela que iremos fazer o loop para gerar o PDF no Excel e imprimir em lote.

Base Distribuição

A base de dados da distribuição são os dados que constarão na cobrança.

Nele temos além do cliente, chamado aqui de ponto, o produto, as datas em que foram realizadas as entregas/distribuições e a quantidade de itens.

gerar pdf vba 2

Estas informações são retornadas à partir das funções PROCV que constam na planilha.

Imprimir e Gerar em PDF Excel com VBA

Abaixo temos o código fonte utilizado na planilha para imprimir ou gerar em PDF o relatório de recibos no Excel.

Nele fazemos um loop passando por todos os clientes, realizando a impressão ou geração conforme a ação selecionada.

Sub lsGerar(ByVal lflImprimir As Boolean)
    On Error GoTo TratarErro
    
    'Declaração das variáveis
    'iTotalLinhas é o total de clientes
    'iLinhas é o controle da linha atual no loop
    'lstrPasta Pasta aonde salvar os arquivos pdf's
    Dim iTotalLinhas    As Long
    Dim iLinhas         As Long
    Dim lstrPasta       As String
    
    'Total de clientes, de cima para baixo localiza a última célula preenchida da lista
    iTotalLinhas = Worksheets("Clientes").Cells(Rows.Count, 1).End(xlUp).Row
    
    'Inicia na linha logo abaixo do cabeçalho
    iLinhas = 2
    
    If lflImprimir = False Then
        lstrPasta = lfSelecionarPasta
        
        If lstrPasta = vbNullString Then
            Exit Sub
        End If
    End If
    
    'Passa por todos os clientes
    While iLinhas <= 100 'iTotalLinhas
        'Atualiza o valor do cliente
        Worksheets("Recibo").Cells(1, 5).Value = Worksheets("Clientes").Cells(iLinhas, 1).Value
        
        If lflImprimir = True Then
            'Imprime o recibo
            ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
            IgnorePrintAreas:=False
        Else
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=lstrPasta & "\" & Worksheets("Clientes").Cells(iLinhas, 1).Value & ".pdf", _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, OpenAfterPublish:=False
        End If
        
        'Passa para o próximo cliente
        iLinhas = iLinhas + 1
    Wend
    
Sair:
    Exit Sub
TratarErro:
    'Tratamento de erro se houverem problemas
    MsgBox "Houve um erro na impressão!", vbCritical
    GoTo Sair
End Sub

'Procedimento para salvar arquivos
Public Function lfSelecionarPasta() As String
    Dim fDlg    As FileDialog

    Set fDlg = Application.FileDialog(FileDialogType:=msoFileDialogFolderPicker)

    'Retorna a pasta selecionada
    If fDlg.Show = -1 Then
        lfSelecionarPasta = fDlg.SelectedItems(1)
    Else
        MsgBox "Não foi selecionada nenhuma pasta"
    End If
End Function

Public Sub lsGerarPDF()
    lsGerar False
End Sub

Public Sub lsImprimir()
    lsGerar True
End Sub

Download Planilha Impressão e Geração PDF Excel

Realize o download da planilha de impressão e geração de PDF no Excel neste botão abaixo. Basta se inscrever na nossa newsletter gratuita para o download automático.

Baixe a planilha


Marcos Rieper

Pai, marido, professor e consultor em Excel.

Obrigado por ler este artigo, este blog foi criado para difundir o conhecimento em Excel à todos.

Divulgamos novos artigos nas redes sociais, basta clicar nos ícones abaixo.

Excel não precisa ser complicado

Assine nossa newsletter e receba dicas práticas para dominar o excel