Převeďte Excel na PDF pomocí VBA - jediný průvodce, který budete potřebovat

*Toto je příspěvek hosta Ryana Wellse, kolegy bloggera a skvělého vývojáře VBA.*

Pokud pracujete s aplikací Excel, nepochybně jste byli požádáni o vytvoření souhrnů své práce.

Zprávy o prodeji, faktury, prognózy, plány, pojmenujte to.

Víte, co mají všechny tyto dokumenty společného? Ve formě PDF vypadají skvěle. Víš co ještě? Management miluje soubory PDF!

Převést Excel na PDF

V tomto tutoriálu vám ukážu, jak pomocí aplikace Excel VBA převádět všechny druhy objektů aplikace Excel na soubory PDF:

Každé z maker představím s nějakým komentářem. Tak je budete moci rychle najít, zkopírovat do editoru VBA a používat je.

Když spustíte kterékoli z těchto maker, zobrazí se dialogové okno Uložit jako s dotazem, kam chcete soubor PDF uložit. Výchozí název obsahuje datum a časové razítko při spuštění makra ve formátu rrrrmmdd_hhmmss.

Pojďme rovnou na to.

Zde jsou makra:

Tisk výběru do PDF

Tenhle je můj osobní favorit. Toto makro převede buňky, které jste aktivně vybrali, do formátu PDF.

Pokud máte vybranou pouze jednu buňku, makro VBA je dostatečně chytré na to, aby si uvědomilo, že pravděpodobně nechcete převádět pouze jednu buňku, a proto vás požádá, abyste vybrali rozsah, který chcete převést:

Dílčí PrintSelectionToPDF () 'PODPROGRAM: PrintSelectionToPDF' DEVELOPER: Ryan Wells 'POPIS: Vytiskněte aktuálně vybraný rozsah do 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: = "Soubory PDF ( *.pdf), *.pdf", _ Název: = „Vyberte název složky a souboru pro uložení jako PDF“) Pokud je můj soubor „False“, pak uložte jako PDF ThisRng.ExportAsFixedFormat Typ: = xlTypePDF, Název souboru: = _ myfile, Kvalita: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox „Není vybrán žádný soubor. PDF nebude uloženo“, vbOKOnly, „Není vybrán žádný soubor“ End If End Sub

Jakmile vyberete rozsah a kliknete na OK, zobrazí se dialogové okno, kde můžete vybrat, kam chcete soubor PDF uložit.

Automaticky vybere datum a čas z hodin vašeho systému a přidá je k názvu souboru.

Tisk jedné tabulky do PDF

Mnoho výkonných uživatelů aplikace Excel ukládá svá data do organizovaných tabulek. Ve skutečnosti má sám Sumit Bansal tak rád excelové tabulky, že je v Excelu nazývá skrytým pokladem.

Toto makro vytiskne vámi vybranou tabulku do PDF. Když spustíte makro, zobrazí se výzva k zadání názvu tabulky, kterou chcete uložit.

Dílčí PrintTableToPDF () 'PODPROGRAM: PrintTableToPDF' DEVELOPER: Ryan Wells 'POPIS: Vytiskněte tabulku podle svého výběru do souboru PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False' Enter the table jméno, které chcete uložit strTable = InputBox („Jaký je název tabulky, kterou chcete uložit?“, „Zadejte název tabulky“) 'Tabulka, kterou chcete uložit If Trim (strTable) = "" Then Exit Sub' Prompt for save umístění strfile = strTable & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Soubory PDF ( *.pdf), *.pdf", _ Název: = "Vybrat název složky a souboru pro uložení jako PDF") Pokud je můj soubor "False", pak 'uložit jako rozsah PDF (strTable). Typ Exportovat AsFixedFormat : = xlTypePDF, Název souboru: = myfile, Kvalita: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Není vybrán žádný soubor. PDF nebude uloženo ", vbOKOnly," Není vybrán žádný soubor "Konec, pokud Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub Sub

Jakmile zadáte název tabulky a kliknete na OK, zobrazí se dialogové okno, kde můžete vybrat, kam chcete soubor PDF uložit.

Automaticky vybere datum a čas z hodin vašeho systému a přidá je k názvu souboru.

Chcete -li soubory PDF oddělit, vytiskněte všechny tabulky

Pokud má vaše tabulka několik tabulek a potřebujete každou z nich uložit do samostatného PDF, můžete spustit tento kód VBA.

Když spustíte toto makro, zobrazí se dialogové okno s výzvou k výběru složky, kam chcete ukládat soubory PDF.

Jakmile vyberete složku, makro uloží každou tabulku do souboru PDF s názvem tabulky, který se pohodlně objeví v názvu souboru PDF.

Dílčí PrintAllTablesToPDFs () 'PODPROGRAM: PrintAllTablesToPDFs' DEVELOPER: Ryan Wells 'POPIS: Vytiskněte každou tabulku v tabulce do jiného souboru PDF Dim strTables () As String Dim strfile As String Dim ch jako Object, sh As Worksheet Dim icount As Integer Dim myfile Jako varianta Dim tbl As ListObject Dim sht As Worksheet With Application.FileDialog (msoFileDialogFolderPicker) .Title = "Kam chcete uložit PDF?" .ButtonName = "Uložit zde" .InitialFileName = ThisWorkbook.Path If .Show = -1 Then 'if OK isPress sfolder = .SelectedItems (1) Else End End If End With For Every sht In ThisWorkbook.Worksheets For each tbl in sht .ListObjects myfile = ThisWorkbook.Name & ""& tbl.Name &""_ & Format (Now ()," yyyymmdd_hhmmss ") _ &" .pdf "myfile = sfolder &" \ "& myfile sht.Range (tbl.Name) .ExportAsFixedFormat Typ: = xlTypePDF, Název souboru: = _ myfile : = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Další tbl Další sht End Sub

Tisk všech listů do jednoho PDF

Nevím, jak vy, ale v rámci mé práce musíme uchovávat kopie téměř všech našich tabulek ve formátu PDF. K návrhovým výpočtům připojujeme kopie našich tabulek ve formátu PDF. Tyto soubory PDF byly dříve konvertovány na mikrofiše a uchovávány pro dlouhodobé uchování. Víš, kdyby náhodou došlo k apokalypse.

Pokud se ocitnete v podobné situaci, je příjemné mít možnost automaticky převést všechny listy v tabulce do jednoho PDF. Zde je makro VBA, které to udělá:

Dílčí PrintAllSheetsToPDF () 'PODPROGRAM: PrintAllSheetsToPDF' DEVELOPER: Ryan Wells 'POPIS: Kombinujte všechny své pracovní listy do jednoho PDF Dim strSheets () jako řetězec Dim strfile jako String Dim sh Jako list Dim Dim icount jako Integer Dim myfile She Variant' do pole pro každé sh v ActiveWorkbook.Worksheets If sh.Visible = xlSheetVisible Then ReDim Preserve strSheets (icount) strSheets (icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Then 'No charts found. Chyba děrování MsgBox "PDF nelze vytvořit, protože nebyly nalezeny žádné listy.", "Žádné listy nenalezeny" Ukončit Sub End If 'Výzva k uložení umístění strfile = "Listy" & "_" _ & Formát (Nyní (), " yyyymmdd_hhmmss ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" Soubory PDF ( *.pdf), *.pdf ", _ Title: = "Vyberte složku a název souboru pro uložení jako PDF") Pokud je můj soubor "False", pak 'uložte jako PDF ThisWorkbook.Sheets (strSheets). Vyberte ActiveSheet.ExportAsFixedFormat Typ: = xlTypePDF, Název souboru: = _ myfile, Kvalita: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Není vybrán žádný soubor. PDF nebude uloženo", vbOKOnly, "Není vybrán žádný soubor" Konec Pokud Konec Sub

Tisk grafů do PDF

Toto makro převádí všechny vaše grafy do jednoho PDF - ale ne vaše objekty grafu! Listy grafů mám na mysli grafy, které mají v seznamu karet tabulek vlastní kartu:

Dílčí PrintChartSheetsToPDF () 'PODPROGRAM: PrintChartSheetsToPDF' DEVELOPER: Ryan Wells 'POPIS: Sloučení všech listů grafu do jednoho PDF Dim strSheets () jako řetězec Dim strfile jako String Dim ch jako objekt, sh As Worksheet Dim icount As Integer Dim myfile As Variant Uložení názvů grafů do pole pro každý ch v ActiveWorkbook.Charts ReDim Zachovat strSheets (icount) strSheets (icount) = ch.Name icount = icount + 1 Další ch If icount = 0 Then 'Nebyly nalezeny žádné grafy. Chyba děrování MsgBox "PDF nelze vytvořit, protože nebyly nalezeny žádné tabulky grafů.", "" Nebyly nalezeny žádné grafy "Ukončit Sub End If 'Výzva k uložení umístění strfile =" Charts "&" _ "_ & Format (Now () , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Soubory PDF ( *.pdf), *.pdf ", _ Title: =" Vyberte složku a název souboru pro uložení jako PDF ") Pokud je můj soubor" False ", pak 'uložte jako PDF ThisWorkbook.Sheets (strSheets). Vyberte ActiveSheet.ExportAsFixedFormat Typ: = xlTypePDF, Název souboru: = _ myfile, Kvalita: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox „Není vybrán žádný soubor. PDF nebude uloženo“, vbOKOnly, „Není vybrán žádný soubor“ Konec Pokud Konec Sub

Tisk objektů grafu do PDF

Toto makro ukládá všechny vaše normální grafy - objekty grafů - do jednoho PDF. Bez ohledu na to, na kterém listu je váš graf, bude načten a uložen do PDF.

V konečném PDF bude pouze jeden graf na stránku.

Dílčí PrintChartsObjectsToPDF () 'PODPROGRAM: PrintChartsObjectsToPDF' DEVELOPER: Ryan Wells 'POPIS: Kombinujte všechny objekty grafu do jednoho PDF Dim ws jako pracovní list, wsTemp jako pracovní list Dim chrt jako ChartObject Dim tp jako Long Dim strfile jako String Dim myfile = False Set wsTemp = Sheets.Add tp = 10 With wsTemp For every ws in ActiveWorkbook.Worksheets If ws.Name = wsTemp.Name Then GoTo nextws: For each chrt In 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 tp = tp + Selection.Height + 50 Next nextws: Next ws Konec 'Výzva k uložení umístění strfile = "Charts" & "_" _ & Format (Now (), "yyyymmdd \ _hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF Files ( *.pdf), *.pdf", _ Title: = "Select Fol der a Název souboru pro uložení jako PDF ") Pokud je myfile False, pak 'save as PDF wsTemp.ExportAsFixedFormat Typ: = xlTypePDF, Název souboru: = myfile, Kvalita: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfter True 'Else' MsgBox "Není vybrán žádný soubor. PDF nebude uloženo “, vbOKOnly,„ Není vybrán žádný soubor “Konec Pokud Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Pokud máte nějaké dotazy, napište je do sekce komentářů, kde na vás s Ryanem budeme čekat.

Také by se vám mohly líbit následující výukové programy pro Excel:

  • Jak vložit soubor PDF do listu aplikace Excel.
  • Smyčky Excel VBA: Pro další, Do while, Do Do, Pro každou (s příklady).
  • Jak zaznamenat makro v aplikaci Excel
  • Jak zkombinovat více sešitů do jednoho sešitu aplikace Excel.
  • Jak spustit makro v aplikaci Excel.
  • Jak vytvořit a používat doplněk aplikace Excel.
  • Zpracování chyb aplikace Excel VBA
  • Rozdělte každý list aplikace Excel do samostatných souborů
  • Jak importovat soubor XML do aplikace Excel | Převést XML na Excel

O autorovi: Ryan Wells je jaderný inženýr a profesionální vývojář VBA. Vydává své snadno srozumitelné výukové programy pro Excel VBA, které pomáhají ostatním psát lepší makra. Kromě výuky VBA je Ryan vedoucím vývojářem několika doplňků aplikace Excel. Jeho návody najdete na WellsR.com.

wave wave wave wave wave