Converta Excel para PDF usando VBA - o único guia de que você precisará

* Este é um post convidado de Ryan Wells, um colega blogueiro e um desenvolvedor de VBA brilhante. *

Se você trabalha com Excel, sem dúvida foi solicitado a criar resumos de seu trabalho.

Relatórios de vendas, faturas, previsões, programações, o que você quiser.

Você sabe o que todos esses documentos têm em comum? Eles ficam ótimos em formato PDF. Você sabe o que mais? A administração adora PDFs!

Converter Excel para PDF

Neste tutorial, vou mostrar como usar o Excel VBA para converter todos os tipos de objetos do Excel em PDFs:

Vou apresentar cada uma das macros com alguns comentários. Dessa forma, você poderá encontrá-los rapidamente, copiá-los para seu editor de VBA e usá-los.

Ao executar qualquer uma dessas macros, uma caixa de diálogo Salvar como aparecerá perguntando onde você deseja salvar o PDF. O nome padrão inclui a data e o carimbo de data / hora quando você executou a macro no formato aaaammdd_hhmmss.

Vamos direto ao assunto.

Aqui estão as macros:

Imprimir seleção em PDF

Este é meu favorito pessoal. Esta macro irá converter as células que você selecionou ativamente em um PDF.

Se você tiver apenas uma célula selecionada, a macro VBA é inteligente o suficiente para perceber que você provavelmente não deseja converter apenas uma célula, por isso pede que você selecione o intervalo que deseja converter:

Sub PrintSelectionToPDF () 'SUBROUTINE: PrintSelectionToPDF' DESENVOLVEDOR: Ryan Wells 'DESCRIÇÃO: Imprime o intervalo selecionado atualmente em um PDF Dim ThisRng As Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Then Set ThisRng = Application.InputBox ( "Select a range", "Get Range", Type: = 8) Else Set ThisRng = Selection End If 'Prompt for save location strfile = "Selection" & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Arquivos PDF (* .pdf), * .pdf", _ Title: = "Selecione a pasta e o nome do arquivo para salvar como PDF") If myfile "False" Então 'salve como PDF ThisRng.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Nenhum arquivo selecionado. PDF não será salvo", vbOKOnly, "Nenhum arquivo selecionado" End If End Sub

Depois de selecionar o intervalo e clicar em OK, será exibida uma caixa de diálogo onde você pode selecionar onde deseja salvar o PDF.

Ele escolherá automaticamente a data e a hora do relógio do seu sistema e adicionará ao nome do arquivo.

Imprimir uma tabela para PDF

Muitos usuários avançados do Excel armazenam seus dados em tabelas organizadas. Na verdade, o próprio Sumit Bansal gosta tanto das tabelas do Excel que as chama de tesouro escondido no Excel.

Esta macro imprime uma tabela de sua escolha em um PDF. Ao executar a macro, ela solicitará o nome da tabela que deseja salvar.

Sub PrintTableToPDF () 'SUBROUTINE: PrintTableToPDF' DESENVOLVEDOR: Ryan Wells 'DESCRIÇÃO: Imprimir uma tabela de sua escolha em um PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False' Entrar na tabela nome que você deseja salvar strTable = InputBox ("Qual é o nome da tabela que você deseja salvar?", "Digite o nome da tabela") 'Tabela que deseja salvar If Trim (strTable) = "" Then Exit Sub' Solicitar salvar location strfile = strTable & "_" _ & Format (Now (), "aaaammdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Arquivos PDF (* .pdf), * .pdf", _ Title: = "Selecione a pasta e o nome do arquivo para salvar como PDF") If myfile "False" Então 'salve como PDF Range (strTable) .ExportAsFixedFormat Type : = xlTypePDF, Filename: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Nenhum arquivo selecionado. PDF não será salvo ", vbOKOnly," Nenhum arquivo selecionado "End If Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Depois de inserir o nome da tabela e clicar em OK, será exibida uma caixa de diálogo onde você pode selecionar onde deseja salvar o PDF.

Ele escolherá automaticamente a data e a hora do relógio do seu sistema e adicionará ao nome do arquivo.

Imprimir todas as tabelas para separar PDFs

Se sua planilha tiver várias tabelas e você precisar salvar cada uma em um PDF separado, você pode executar este código VBA.

Ao executar esta macro, uma caixa de diálogo aparecerá solicitando que você selecione a pasta onde deseja salvar seus PDFs.

Depois de escolher sua pasta, a macro salvará cada tabela em um PDF com o nome da tabela convenientemente aparecendo no título do PDF.

Sub PrintAllTablesToPDFs () 'SUBROUTINE: PrintAllTablesToPDFs' DESENVOLVEDOR: Ryan Wells 'DESCRIÇÃO: Imprimir cada tabela em sua planilha em um PDF diferente Dim strTables () As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant Dim tbl As ListObject Dim sht As Worksheet With Application.FileDialog (msoFileDialogFolderPicker) .Title = "Onde você deseja salvar seu PDF?" .ButtonName = "Salvar aqui" .InitialFileName = ThisWorkbook.Path If .Show = -1 Then 'se OK for pressionado sfolder = .SelectedItems (1) Else End End If End With For Cada sht In ThisWorkbook.Worksheets For each tbl in sht .ListObjects myfile = ThisWorkbook.Name & ""& tbl.Nome &""_ & Format (Now ()," yyyymmdd_hhmmss ") _ &" .pdf "myfile = sfolder &" \ "& myfile sht.Range (tbl.Name) .ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality : = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Next tbl Next sht End Sub

Imprimir todas as planilhas em um PDF

Não sei sobre você, mas na minha linha de trabalho, temos que reter cópias em PDF de quase todas as nossas planilhas. Anexamos as cópias em PDF de nossas planilhas aos nossos cálculos de design. Esses PDFs costumavam ser convertidos em microfichas e armazenados para retenção de longo prazo. Você sabe, no caso do apocalipse acontecer.

Se você se encontrar em uma situação semelhante, é bom ser capaz de converter automaticamente todas as páginas da sua planilha em um PDF. Aqui está uma macro VBA que fará exatamente isso:

Sub PrintAllSheetsToPDF () 'SUBROUTINE: PrintAllSheetsToPDF' DESENVOLVEDOR: Ryan Wells 'DESCRIÇÃO: Combine todas as suas planilhas em um PDF Dim strSheets () As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile As Variant' Salvar nomes de planilhas para uma matriz para cada sh Em ActiveWorkbook.Worksheets If sh.Visible = xlSheetVisible Then ReDim Preserve strSheets (icount) strSheets (icount) = sh.Nome icount = icount + 1 End If Next sh If icount = 0 Then 'Nenhum gráfico encontrado. Erro de perfuração MsgBox "Um PDF não pode ser criado porque nenhuma folha foi encontrada.",, "Nenhuma folha encontrada" Exit Sub End If 'Solicitar local de salvamento strfile = "Sheets" & "_" _ & Format (Now (), " aaaammdd_hhmmss ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" Arquivos PDF (* .pdf), * .pdf ", _ Title: = "Selecione a pasta e o nome do arquivo para salvar como PDF") If myfile "False" Então 'salve como PDF ThisWorkbook.Sheets (strSheets) .Select ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Nenhum arquivo selecionado. PDF não será salvo", vbOKOnly, "Nenhum arquivo selecionado" End If End Sub

Imprimir folhas de gráfico em PDF

Esta macro converte todas as suas Planilhas Gráficas em um PDF - mas não seus objetos gráficos! Por folhas de gráfico, quero dizer os gráficos que têm sua própria guia em sua lista de guias de planilha:

Sub PrintChartSheetsToPDF () 'SUBROUTINE: PrintChartSheetsToPDF' DESENVOLVEDOR: Ryan Wells 'DESCRIÇÃO: Combine todas as planilhas de gráfico em um PDF Dim strSheets () As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant' Salvar os nomes das folhas de gráfico em um array para cada ch No ActiveWorkbook.Charts ReDim Preserve strSheets (icount) strSheets (icount) = ch.Name icount = icount + 1 Next ch If icount = 0 Then 'Nenhum gráfico encontrado. Erro de perfuração MsgBox "Um PDF não pode ser criado porque nenhuma planilha de gráfico foi encontrada.",, "Nenhuma planilha de gráfico encontrada" Exit Sub End If 'Prompt for save location strfile = "Charts" & "_" _ & Format (Now () , "aaaammdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Arquivos PDF (* .pdf), * .pdf ", _ Title: =" Selecione a pasta e o nome do arquivo para salvar como PDF ") If myfile" False "Então 'salve como PDF ThisWorkbook.Sheets (strSheets) .Select ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Qualidade: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Nenhum arquivo selecionado. PDF não será salvo", vbOKOnly, "Nenhum arquivo selecionado" End If End Sub

Imprimir objetos de gráfico em PDF

Esta macro salva todos os seus gráficos normais - objetos gráficos - em um único PDF. Independentemente da planilha em que seu gráfico esteja, ele será obtido e salvo em um PDF.

Haverá apenas um gráfico por página no PDF final.

Sub PrintChartsObjectsToPDF () 'SUBROUTINE: PrintChartsObjectsToPDF' DEVELOPER: Ryan Wells 'DESCRIÇÃO: Combine todos os objetos de gráfico em um PDF Dim ws As Planilha, wsTemp As Planilha Dim chrt As ChartObject Dim tp As Long Dim strfile As String Dim ws As Variante aplicativo. = Falso Definir wsTemp = Sheets.Add tp = 10 Com wsTemp Para Cada ws Em ActiveWorkbook.Worksheets If ws.Name = wsTemp.Name Then GoTo nextws: Para Cada chrt Em ws.ChartObjects chrt.Copy wsTemp.Range ("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 If Selection.TopLeftCell.Row> 1 Then ActiveSheet.Rows (Selection.TopLeftCell.Row) .PageBreak = xlPageBreakManual End If tpws = tp + Selection.Height + 50 Próximo próximo: Próximo ws End With 'Prompt for save location strfile = "Charts" & "_" _ & Format (Now (), "yyyymmdd \ _hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Arquivos PDF (* .pdf), * .pdf", _ Title: = "Selecionar Fol der e o nome do arquivo para salvar como PDF ") If myfile False Then 'save the PDF wsTemp.ExportAsFixedFormat Type: = xlTypePDF, Filename: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True 'Else' MsgBox "Nenhum arquivo selecionado. PDF não será salvo ", vbOKOnly," Nenhum arquivo selecionado "End If Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Se você tiver alguma dúvida, deixe-a cair na seção de comentários, onde Ryan e eu estaremos esperando por você.

Você também pode gostar dos seguintes tutoriais do Excel:

  • Como incorporar um arquivo PDF em uma planilha do Excel.
  • Loops do Excel VBA: Para Próximo, Do While, Do Until, For Each (com exemplos).
  • Como gravar uma macro no Excel
  • Como combinar várias pastas de trabalho em uma pasta de trabalho do Excel.
  • Como executar uma macro no Excel.
  • Como criar e usar um suplemento do Excel.
  • Tratamento de erros do Excel VBA
  • Divida cada planilha do Excel em arquivos separados
  • Como importar arquivo XML para o Excel. Converter XML para Excel

Sobre o autor: Ryan Wells é engenheiro nuclear e desenvolvedor VBA profissional. Ele publica seus tutoriais do Excel VBA fáceis de entender para ajudar outras pessoas a escrever macros melhores. Além de ensinar VBA, Ryan é o desenvolvedor líder de vários suplementos do Excel. Você pode encontrar seus tutoriais em WellsR.com.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave