Convertiți Excel în PDF folosind VBA - singurul ghid de care veți avea nevoie

* Acesta este un post de invitat de Ryan Wells, un coleg blogger și un dezvoltator VBA genial. *

Dacă lucrați cu Excel, fără îndoială vi s-a cerut să creați rezumate ale activității dvs.

Rapoarte de vânzări, facturi, prognoze, programe, pe care le numiți.

Știi ce au în comun toate aceste documente? Arată grozav în format PDF. Știi ce altceva? Conducerea iubește PDF-urile!

Convertiți Excel în PDF

În acest tutorial, vă voi arăta cum să utilizați Excel VBA pentru a converti toate tipurile de obiecte Excel în PDF-uri:

Voi prezenta fiecare dintre macrocomenzi cu câteva comentarii. În acest fel, veți putea să le găsiți rapid, să le copiați în editorul VBA și să le utilizați.

Când rulați oricare dintre aceste macrocomenzi, va apărea o fereastră de dialog Salvare ca care vă întreabă unde doriți să salvați PDF-ul. Numele implicit include data și marcajul de timp când ați executat macrocomanda în format aaaaaaaaaaaaaaaa.

Să trecem direct la el.

Iată macrocomenzile:

Selecție tipărire în PDF

Acesta este preferatul meu personal. Această macrocomandă va converti celulele selectate în mod activ într-un PDF.

Dacă aveți selectată o singură celulă, macrocomanda VBA este suficient de inteligentă pentru a vă da seama că probabil nu doriți să convertiți o singură celulă, așa că vă cere să selectați intervalul pe care doriți să îl convertiți:

Sub PrintSelectionToPDF () 'SUBROUTINE: PrintSelectionToPDF' DEVELOPER: Ryan Wells 'DESCRIERE: Tipăriți gama selectată în prezent într-un PDF Dim ThisRng As Range Dim strfile Ca șir Dim myfile Ca variantă Dacă selecție.Count = 1 Apoi setați ThisRng = Application.InputBox ( „Selectați un interval”, „Obțineți intervalul”, tastați: = 8) Altfel 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: = "PDF Files (* .pdf), * .pdf", _ Title: = „Selectați folderul și numele fișierului pentru a le salva ca PDF”) Dacă fișierul meu „False”, apoi „salvați ca PDF ThisRng.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Fără fișier selectat. PDF nu va fi salvat", vbOKNumai, "Fără fișier selectat" Termină dacă se termină Sub

După ce selectați intervalul și faceți clic pe OK, acesta va afișa o casetă de dialog în care puteți selecta unde doriți să salvați PDF-ul.

Acesta va alege automat data și ora din ceasul sistemului și le va adăuga la numele fișierului.

Imprimați un tabel în PDF

O mulțime de utilizatori avansați Excel își stochează datele în tabele organizate. De fapt, lui Sumit Bansal îi plac mesele Excel atât de mult încât le numește o comoară ascunsă în Excel.

Această macrocomandă tipărește un tabel pe care îl alegeți într-un PDF. Când rulați macro-ul, acesta vă va solicita numele tabelului pe care doriți să îl salvați.

Sub PrintTableToPDF () 'SUBROUTINE: PrintTableToPDF' DEVELOPER: Ryan Wells 'DESCRIERE: Tipăriți un tabel la alegere într-un fișier PDF Dim String Dim myfile Ca Variant Dim strTable As String, r Ca Range Application.ScreenUpdating = False' Intrați în tabel nume pe care doriți să îl salvați strTable = InputBox ("Care este numele tabelului pe care doriți să îl salvați?", "Introduceți numele tabelului") 'Tabel pe care doriți să îl salvați Dacă Trim (strTable) = "" Apoi ieșiți din Sub' Prompt pentru salvare locație strfile = strTable & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Fișiere PDF (* .pdf), * .pdf", _ Title: = "Selectați folderul și numele fișierului pentru a le salva ca PDF") Dacă fișierul meu este "False" Apoi 'salvați ca PDF Range (strTable) .ExportAsFixedFormat Type : = xlTypePDF, File name: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Niciun fișier selectat. PDF nu va fi selectat salvat ", vbOKOnly," Niciun fișier selectat "Termină dacă Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

După ce introduceți numele tabelului și faceți clic pe OK, acesta va afișa o casetă de dialog în care puteți selecta unde doriți să salvați PDF-ul.

Acesta va alege automat data și ora din ceasul sistemului și le va adăuga la numele fișierului.

Imprimați toate tabelele pentru a separa PDF-urile

Dacă foaia dvs. de calcul are mai multe tabele și trebuie să le salvați pe fiecare într-un PDF separat, puteți rula acest cod VBA.

Când rulați această macrocomandă, va apărea o casetă de dialog care vă solicită să selectați folderul în care doriți să salvați PDF-urile.

Odată ce vă alegeți folderul, macrocomanda va salva fiecare tabel într-un PDF cu numele tabelului care apare în mod convenabil în titlul PDF-ului.

Sub PrintAllTablesToPDFs () 'SUBROUTINE: PrintAllTablesToPDFs' DEVELOPER: Ryan Wells 'DESCRIERE: Imprimați fiecare tabel din foaia dvs. de calcul într-un PDF diferit Str str. As Variant Dim tbl As ListObject Dim sht As Worksheet With Application.FileDialog (msoFileDialogFolderPicker) .Title = "Unde doriți să salvați PDF-ul?" .ButtonName = "Salvați aici" .InitialFileName = ThisWorkbook.Path If .Show = -1 Then 'if OK is press sfolder = .SelectedItems (1) Else End End If End With For each 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 Type: = xlTypePDF, File name: = _ myfile, Quality : = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Next tbl Next sht End Sub

Imprimați toate foile într-un singur PDF

Nu știu despre dvs., dar în activitatea mea, trebuie să păstrăm copii PDF ale aproape tuturor foilor noastre de calcul. Adăugăm copiile PDF ale foilor noastre de calcul la calculele noastre de proiectare. Aceste PDF-uri obișnuiau să fie convertite în microfișe și arhivate pentru păstrarea pe termen lung. Știi, în cazul în care s-a întâmplat apocalipsa.

Dacă vă aflați într-o situație similară, este plăcut să puteți converti automat toate foile din foaia de calcul într-un singur PDF. Iată o macrocomandă VBA care va face exact acest lucru:

Sub PrintAllSheetsToPDF () 'SUBROUTINE: PrintAllSheetsToPDF' DEVELOPER: Ryan Wells 'DESCRIERE: Combinați toate foile de lucru într-un singur PDF Dim strSheets () Ca String Dim strfile Ca String Dim sh Ca Foaie de lucru Dim icount Ca Integer Dim myfile Ca Variant' Salvare la o matrice pentru fiecare sh din 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 chart found. Punch error MsgBox "Un PDF nu poate fi creat deoarece nu s-au găsit foi.",, "No Sheets Found" Exit Sub End If 'Prompt for save location strfile = "Sheets" & "_" _ & Format (Now (), " yyyymmdd_hhmmss ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" PDF Files (* .pdf), * .pdf ", _ Title: = "Selectați folderul și numele fișierului pentru a le salva ca PDF") Dacă fișierul meu este "False", apoi 'salvați ca PDF ThisWorkbook.Sheets (strSheets). Selectați ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Niciun fișier selectat. PDF nu va fi salvat", vbOKOnly, "No File Selected" End If End Sub

Imprimați foi de diagrame în PDF

Această macrocomandă convertește toate foile de diagrame într-un singur PDF - dar nu și obiectele diagramei! Prin foi de diagrame, mă refer la diagrame care au propria filă în lista dvs. de file de calcul:

Sub PrintChartSheetsToPDF () 'SUBROUTINE: PrintChartSheetsToPDF' DEVELOPER: Ryan Wells 'DESCRIERE: Combinați toate foile de diagrame într-un singur PDF Dim strSheets () Ca String Dim strfile Ca String Dim ch Ca obiect, sh Ca foaie de lucru Dim icount Ca Integer Dim myfile As Variant Salvați numele foilor de diagrame într-o matrice pentru fiecare ch din ActiveWorkbook. Punch error MsgBox "Un fișier PDF nu poate fi creat deoarece nu au fost găsite foi de diagrame.",, "Nu au fost găsite foi de diagrame" Exit Sub End If 'Prompt for save location strfile = "Charts" & "_" _ & Format (Now () , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Fișiere PDF (* .pdf), * .pdf ", _ Title: =" Selectați folderul și numele fișierului pentru a le salva ca PDF ") Dacă fișierul meu este" False "Apoi 'salvați ca PDF ThisWorkbook.Sheets (strSheets). Calitate: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Fără fișier selectat. PDF nu va fi salvat", vbOKOnly, "Fără fișier selectat" Termină dacă se termină Sub

Imprimați obiecte în diagramă în PDF

Această macrocomandă salvează toate diagramele dvs. normale - obiecte de diagramă - într-un singur PDF. Indiferent de foaia de lucru pe care se află diagrama dvs., aceasta va fi preluată și salvată într-un PDF.

În fișierul PDF final va exista o singură diagramă pe pagină.

Sub PrintChartsObjectsToPDF () 'SUBROUTINE: PrintChartsObjectsToPDF' DEVELOPER: Ryan Wells 'DESCRIERE: Combinați toate obiectele grafice într-un singur PDF Dim ws Ca foaie de lucru, wsTemp Ca foaie de lucru Dim chrt Ca ChartObject Dim tp Ca Long Dim strfile As String Dimf = False Set wsTemp = Sheets.Add tp = 10 With wsTemp For Each 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 Apoi ActiveSheet.Rows (Selection.TopLeftCell.Row) .PageBreak = xlPageBreakManual End If tp = tp + Selection.Height + 50 Next nexts: Next ws End With 'Prompt for save location 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 și File Name to Save as PDF ") If myfile False Then 'save as PDF wsTemp.ExportAsFixedFormat Type: = xlTypePDF, Filename: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterP MsgBox adevărat „Altfel” Nu a fost selectat niciun fișier. PDF-ul nu va fi salvat ", vbOKOnly," Niciun fișier selectat "Termină dacă Application.DisplayAlerts = False wsTemp. Ștergeți cu aplicația .ScreenUpdating = Adevărat .DisplayAlerts = Final adevărat cu Exit Sub End Sub

Dacă aveți întrebări, puneți-le în secțiunea de comentarii, unde eu și Ryan vă vom aștepta acolo.

Vă pot plăcea, de asemenea, următoarele tutoriale Excel:

  • Cum să încorporați un fișier PDF într-o foaie de lucru Excel.
  • Bucle Excel VBA: pentru următorul, faceți în timp, faceți până, pentru fiecare (cu exemple).
  • Cum să înregistrați o macro în Excel
  • Cum se combină mai multe cărți de lucru într-un singur registru de lucru Excel.
  • Cum se execută o macro în Excel.
  • Cum să creați și să utilizați un program de completare Excel.
  • Excel VBA Error Handling
  • Împărțiți fiecare foaie Excel în fișiere separate
  • Cum se importă fișier XML în Excel | Convertiți XML în Excel

Despre autor: Ryan Wells este inginer nuclear și dezvoltator profesionist VBA. El publică tutorialele Excel VBA ușor de înțeles pentru a-i ajuta pe ceilalți să scrie macrocomenzi mai bune. Pe lângă predarea VBA, Ryan este dezvoltatorul principal al mai multor programe de completare Excel. Puteți găsi tutorialele sale pe WellsR.com.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave