Konvertera Excel till PDF med VBA - den enda guiden du behöver

Innehållsförteckning

*Detta är ett gästinlägg av Ryan Wells, en bloggare och en lysande VBA -utvecklare.*

Om du arbetar med Excel har du utan tvekan blivit ombedd att skapa sammanfattningar av ditt arbete.

Försäljningsrapporter, fakturor, prognoser, scheman, you name it.

Vet du vad alla dessa dokument har gemensamt? De ser bra ut i PDF -form. Vet du vad mer? Ledningen älskar PDF -filer!

Konvertera Excel till PDF

I den här självstudien visar jag dig hur du använder Excel VBA för att konvertera alla typer av Excel -objekt till PDF -filer:

Jag kommer att presentera var och en av makron med några kommentarer. På så sätt kan du snabbt hitta dem, kopiera dem till din VBA -redaktör och använda dem.

När du kör något av dessa makron visas en dialogruta Spara som där du frågar var du vill spara din PDF. Standardnamnet innehåller datum och tidsstämpel när du körde makrot i formatet yyyymmdd_hhmmss.

Låt oss komma till rätta med det.

Här är makron:

Skriv ut markering till PDF

Den här är min personliga favorit. Detta makro kommer att konvertera de celler du aktivt har valt till en PDF -fil.

Om du bara har en cell markerad är VBA -makrot tillräckligt smart för att inse att du förmodligen inte vill konvertera bara en cell så det ber dig välja det intervall du vill konvertera:

Sub PrintSelectionToPDF () 'SUBROUTINE: PrintSelectionToPDF' UTVECKLARE: Ryan Wells 'BESKRIVNING: Skriv ut ditt valda område till en PDF Dim ThisRng som Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Ställ sedan in dennaRng = Application.InputBox ( "Välj ett intervall", "Hämta intervall", Typ: = 8) Annars Ange ThisRng = Urval Avsluta 'Fråga om att spara plats strfile = "Urval" & "_" _ & Format (Nu (), "ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååאַמומטmooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF -filer ( *.pdf), *.pdf", _ Title: = "Välj mapp och filnamn för att spara som PDF") Om min fil "Falskt" Spara sedan som PDF ThisRng.ExportAsFixedFormat Type: = xlTypePDF, Filnamn: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = Falskt, OpenAfterPublish: = True Else MsgBox "Ingen fil har valts. PDF sparas inte", vbOKOnly, "Ingen fil vald" Avsluta om slutsub

När du väl valt intervallet och klickar på OK visas en dialogruta där du kan välja var du vill spara PDF -filen.

Det väljer automatiskt datum och tid från systemets klocka och lägger till det i filnamnet.

Skriv ut en tabell till PDF

Många Excel -användare använder sina data i organiserade tabeller. I själva verket gillar Sumit Bansal själv Excel -tabeller så mycket att han kallar dem en dold skatt i Excel.

Detta makro skriver ut en valfri tabell till en PDF -fil. När du kör makrot frågar du namnet på tabellen du vill spara.

Sub PrintTableToPDF () 'SUBROUTINE: PrintTableToPDF' UTVECKLARE: Ryan Wells 'BESKRIVNING: Skriv ut en valfri tabell till en PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r Som Range Application.ScreenUpdating = False' Gå in i tabellen namn du vill spara strTable = InputBox ("Vad heter tabellen du vill spara?", "Ange tabellnamn") 'Tabell du vill spara If Trim (strTable) = "" Stäng sedan Sub' Fråga om spara location strfile = strTable & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF -filer ( *.pdf), *.pdf", _ Titel: = "Välj mapp och filnamn att spara som PDF") Om myfile "False" Spara sedan som PDF -område (strTable) .ExportAsFixedFormat Type : = xlTypePDF, filnamn: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Ingen fil vald. PDF kommer inte att sparad ", vbOKOnly," Ingen fil vald "Avsluta om Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub Sub

När du har angett namnet på tabellen och klickat på OK visas en dialogruta där du kan välja var du vill spara PDF -filen.

Det väljer automatiskt datum och tid från systemets klocka och lägger till det i filnamnet.

Skriv ut alla tabeller för att separera PDF -filer

Om ditt kalkylblad har flera tabeller och du måste spara var och en i en separat PDF kan du köra den här VBA -koden.

När du kör det här makrot visas en dialogruta som ber dig välja den mapp där du vill spara dina PDF -filer.

När du väl valt din mapp kommer makrot att spara varje tabell i en PDF -fil med tabellnamnet bekvämt i titeln på PDF -filen.

Sub PrintAllTablesToPDFs () 'SUBROUTINE: PrintAllTablesToPDFs DEVELOPER: Ryan Wells' BESKRIVNING: Skriv ut varje tabell i kalkylarket till en annan PDF 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 = "Var vill du spara din PDF?" .ButtonName = "Spara här" .InitialFileName = ThisWorkbook.Path If .Show = -1 Sedan 'om OK trycks in sfolder = .SelectedItems (1) Annat End End If End med för varje sht i ThisWorkbook.Worksheets för varje tbl In sht .ListObjects myfile = ThisWorkbook.Name & ""& tbl.Name &""_ & Format (Now ()," yyyymmdd_hhmmss ") _ &" .pdf "myfile = sfolder &" \ "& myfile sht.Range (tbl.Name) .ExportAsFixedFormat Type: = xlTypePDF, Filnamn: = _ myfile, Quality : = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Next tbl Next sht End Sub

Skriv ut alla ark till en PDF

Jag vet inte om dig, men i mitt arbete måste vi behålla PDF -kopior av nästan alla våra kalkylblad. Vi lägger till PDF -kopiorna av våra kalkylblad till våra designberäkningar. Dessa PDF-filer konverterades till mikrofiche och välvdes för långvarig lagring. Du vet, om apokalypsen hände.

Om du befinner dig i en liknande situation är det trevligt att automatiskt kunna konvertera alla blad i kalkylarket till en PDF -fil. Här är ett VBA -makro som gör just det:

Sub PrintAllSheetsToPDF () 'SUBROUTINE: PrintAllSheetsToPDF' UTVECKLARE: Ryan Wells 'BESKRIVNING: Kombinera alla dina kalkylblad till en PDF Dim strSheets () As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile As Variant' Save Chart Sheet names till en matris för varje sh i ActiveWorkbook.Worksheets Om sh.Visible = xlSheetVisible ReDim Preserve strSheets (icount) strSheets (icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Då 'Inga diagram hittades. Stansfel MsgBox "En PDF kan inte skapas eftersom inga ark hittades.", "Inga ark hittades" Avsluta Sub End Om 'Fråga om att spara plats strfile = "Sheets" & "_" _ & Format (Now (), " yyyymmdd_hhmmss ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" PDF -filer ( *.pdf), *.pdf ", _ Titel: = "Välj mapp och filnamn att spara som PDF") Om myfile "False" Spara sedan som PDF ThisWorkbook.Sheets (strSheets) .Välj ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Filnamn: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Ingen fil vald. PDF sparas inte", vbOKOnly, "No File Selected" End If End Sub Sub

Skriv ut sjökort till PDF

Detta makro konverterar alla dina diagramark till en PDF - men inte dina diagramobjekt! Med diagramark, menar jag de diagram som har en egen flik i din lista med kalkylarkflikar:

Sub PrintChartSheetsToPDF () 'SUBROUTINE: PrintChartSheetsToPDF' UTVECKLARE: Ryan Wells 'BESKRIVNING: Kombinera alla sjökort till en PDF Dim strSheets () Som String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant' Spara diagramarkets namn i en matris för varje ch i ActiveWorkbook.Charts ReDim Bevara strSheets (icount) strSheets (icount) = ch.Name icount = icount + 1 Nästa ch If icount = 0 Då "Inga diagram hittades. Hålslagningsfel MsgBox "En PDF kan inte skapas eftersom inga sjökort hittades.", "Inga sjökort hittades" Avsluta slutändan Om 'Fråga om att spara plats strfile = "Diagram" & "_" _ & Format (nu () , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF -filer ( *.pdf), *.pdf ", _ Title: =" Välj mapp och filnamn att spara som PDF ") Om myfile" False "Spara sedan som PDF ThisWorkbook.Sheets (strSheets) .Välj ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Filnamn: = _ myfile, Kvalitet: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = Falskt, OpenAfterPublish: = True Else MsgBox "Ingen fil vald. PDF sparas inte", vbOKOnly, "No File Selected" End If End Sub

Skriv ut diagramobjekt till PDF

Detta makro sparar alla dina vanliga diagram - diagramobjekt - i en enda PDF. Oavsett vilket kalkylblad ditt diagram finns på, kommer det att tas och sparas i en PDF -fil.

Det kommer bara att finnas ett diagram per sida i den slutliga PDF -filen.

Sub PrintChartsObjectsToPDF () 'SUBROUTINE: PrintChartsObjectsToPDF' UTVECKLARE: Ryan Wells 'BESKRIVNING: Kombinera alla diagramobjekt till en PDF Dim ws Som Arbetsblad, wsTemp Som Arbetsblad Dim chrt Som ChartObject Dim tp As Long Dim strfile As String Dim myfile Vari = Falsk uppsättning wsTemp = Sheets.Add tp = 10 With wsTemp för varje ws i ActiveWorkbook.Worksheets Om ws.Name = wsTemp.Name Sedan Gå till nästa sida: För varje chrt In ws.ChartObjects chrt.Copy wsTemp.Range ("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 If Selection.TopLeftCell.Row> 1 Sedan ActiveSheet.Rows (Selection.TopLeftCell.Row) .PageBreak = xlPageBreakManual End Om tp = tp + Selection.Height + 50 Next nextws: Next ws Avsluta med 'Fråga om att spara plats strfile = "Diagram" & "_" _ & Format (Nu (), "åååååmm \ _hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF -filer ( *.pdf), *.pdf", _ Title: = "Välj Fol der och filnamn att spara som PDF ") Om myfile False Spara sedan som PDF wsTemp.ExportAsFixedFormat Type: = xlTypePDF, Filnamn: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfter True 'Else' MsgBox "Ingen fil har valts. PDF sparas inte ", vbOKOnly," No File Selected "Avsluta om Application.DisplayAlerts = Falsk wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub Sub

Om du har några frågor, släpp dem i kommentarfältet, där Ryan och jag väntar där på dig.

Du kanske också gillar följande Excel -självstudier:

  • Bädda in en PDF -fil i ett Excel -arbetsblad.
  • Excel VBA -slingor: För nästa, gör medan, gör tills, för varje (med exempel).
  • Hur man spelar in ett makro i Excel
  • Hur man kombinerar flera arbetsböcker till en Excel -arbetsbok.
  • Hur man kör ett makro i Excel.
  • Hur man skapar och använder ett Excel-tillägg.
  • Excel VBA -felhantering
  • Dela varje Excel -ark i separata filer
  • Hur man importerar XML -fil till Excel | Konvertera XML till Excel

Om författaren: Ryan Wells är en kärntekniker och professionell VBA -utvecklare. Han publicerar sina lättförståliga Excel VBA -självstudier för att hjälpa andra att skriva bättre makron. Förutom att undervisa i VBA är Ryan ledande utvecklare av flera Excel-tillägg. Du hittar hans handledning på WellsR.com.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave