Konverter Excel til PDF ved hjelp av VBA - Den eneste guiden du trenger

Innholdsfortegnelse

*Dette er et gjestepost av Ryan Wells, en blogger og en strålende VBA -utvikler.*

Hvis du jobber med Excel, har du utvilsomt blitt bedt om å lage oppsummeringer av arbeidet ditt.

Salgsrapporter, fakturaer, prognoser, tidsplaner, you name it.

Vet du hva alle disse dokumentene har til felles? De ser flotte ut i PDF -form. Vet du hva annet? Ledelsen elsker PDF -filer!

Konverter Excel til PDF

I denne opplæringen viser jeg deg hvordan du bruker Excel VBA til å konvertere alle typer Excel -objekter til PDF -filer:

Jeg skal presentere hver av makroene med noen kommentarer. På den måten vil du raskt kunne finne dem, kopiere dem til VBA -redaktøren og bruke dem.

Når du kjører noen av disse makroene, vises en Lagre som -dialogboks der du blir spurt hvor du vil lagre PDF -filen. Standardnavnet inkluderer dato og tidsstempel da du kjørte makroen i formatet yyyymmdd_hhmmss.

La oss få det til.

Her er makroene:

Skriv ut utvalg til PDF

Denne er min personlige favoritt. Denne makroen konverterer cellene du aktivt har valgt til en PDF.

Hvis du bare har valgt én celle, er VBA -makroen smart nok til å innse at du sannsynligvis ikke vil konvertere bare én celle, så den ber deg velge området du vil konvertere:

Sub PrintSelectionToPDF () 'SUBROUTINE: PrintSelectionToPDF' UTVIKLER: Ryan Wells 'BESKRIVELSE: Skriv ut det valgte området til en PDF Dim ThisRng As Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Sett deretter ThisRng = Application.InputBox ( "Velg et område", "Få rekkevidde", Type: = 8) Ellers Angi ThisRng = Valg Avslutt Hvis 'Spør om lagring av plassering strfile = "Utvalg" & "_" _ & Format (Nå (), "åååååmm_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF -filer ( *.pdf), *.pdf", _ Tittel: = "Velg mappe og filnavn for å lagre som PDF") Hvis minfil "Falsk" Så "lagre som PDF ThisRng.ExportAsFixedFormat Type: = xlTypePDF, Filnavn: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = Falskt, OpenAfterPublish: = True Else MsgBox "Ingen fil er valgt. PDF blir ikke lagret", vbOKOnly, "Ingen fil valgt" Slutt hvis sluttdel

Når du har valgt området og klikker OK, vil det vise en dialogboks der du kan velge hvor du vil lagre PDF -filen.

Det vil automatisk velge dato og klokkeslett fra systemets klokke og legge det til filnavnet.

Skriv ut ett bord til PDF

Mange Excel -strømbrukere lagrer dataene sine i organiserte tabeller. Faktisk liker Sumit Bansal selv Excel -tabeller så mye at han kaller dem en skjult skatt i Excel.

Denne makroen skriver ut en tabell du velger til en PDF. Når du kjører makroen, vil den be deg om navnet på tabellen du vil lagre.

Sub PrintTableToPDF () 'SUBROUTINE: PrintTableToPDF' UTVIKLER: Ryan Wells 'BESKRIVELSE: Skriv ut en tabell du velger til en PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r Som Range Application.ScreenUpdating = False' Skriv inn tabellen navn du vil lagre strTable = InputBox ("Hva er navnet på tabellen du vil lagre?", "Skriv inn tabellnavn") 'Tabell du vil lagre If Trim (strTable) = "" Avslutt deretter Sub' Spør om lagring location strfile = strTable & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF -filer ( *.pdf), *.pdf", _ Tittel: = "Velg mappe og filnavn for å lagre som PDF") Hvis myfile "False" Lagre som PDF -område (strTable) .ExportAsFixedFormat Type : = xlTypePDF, filnavn: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Ingen fil er valgt. PDF blir ikke lagret ", vbOKOnly," No File Selected "End If Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub Sub

Når du har angitt navnet på tabellen og klikket OK, vil den vise en dialogboks der du kan velge hvor du vil lagre PDF -filen.

Det vil automatisk velge dato og klokkeslett fra systemets klokke og legge det til filnavnet.

Skriv ut alle tabeller for å skille PDF -filer

Hvis regnearket ditt har flere tabeller, og du må lagre dem i en separat PDF -fil, kan du kjøre denne VBA -koden.

Når du kjører denne makroen, vises en dialogboks der du blir bedt om å velge mappen der du vil lagre PDF -filene.

Når du har valgt mappen din, lagrer makroen hver tabell i en PDF -fil med tabellnavnet på en praktisk måte i tittelen på PDF -filen.

Sub PrintAllTablesToPDFs () 'SUBROUTINE: PrintAllTablesToPDFs DEVELOPER: Ryan Wells' BESKRIVELSE: Skriv ut hver tabell i regnearket til en annen 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 = "Hvor vil du lagre PDF -filen din?" .ButtonName = "Lagre her" .InitialFileName = ThisWorkbook.Path If .Show = -1 Deretter 'hvis OK trykkes sfolder = .SelectedItems (1) Else End End If End With For Every sht In ThisWorkbook.Worksheets For Every tbl In sht .ListObjects myfile = ThisWorkbook.Name & ""& tbl.Name &""_ & Format (Now ()," yyyymmdd_hhmmss ") _ &" .pdf "myfile = sfolder &" \ "& myfile sht.Range (tbl.Name) .ExportAsFixedFormat Type: = xlTypePDF, Filnavn: = _ myfile, Quality : = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Next tbl Next sht End Sub

Skriv ut alle arkene til en PDF

Jeg vet ikke om deg, men i mitt arbeid må vi beholde PDF -kopier av nesten alle regnearkene våre. Vi legger ved PDF -kopiene av regnearkene våre i designberegningene våre. Disse PDF-filene ble tidligere konvertert til mikrofiche og hvelvet for langvarig oppbevaring. Du vet, i tilfelle apokalypsen skjedde.

Hvis du befinner deg i en lignende situasjon, er det hyggelig å automatisk konvertere alle arkene i regnearket til en PDF. Her er en VBA -makro som vil gjøre nettopp det:

Sub PrintAllSheetsToPDF () 'SUBROUTINE: PrintAllSheetsToPDF' UTVIKLER: Ryan Wells 'BESKRIVELSE: Kombiner alle regnearkene dine til en PDF Dim strSheets () As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile As Variant Lagre diagramarknavn til en matrise for hver sh i ActiveWorkbook.Worksheets Hvis sh.Visible = xlSheetVisible Deretter ReDim Preserve strSheets (icount) strSheets (icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Da 'Ingen diagrammer funnet. Hullfeil MsgBox "En PDF kan ikke opprettes fordi det ikke ble funnet noen ark.", "Ingen ark funnet" Avslutt underenden Hvis 'Spør om lagring av sted strfile = "Ark" & "_" _ & Format (Nå (), " yyyymmdd_hhmmss ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" PDF -filer ( *.pdf), *.pdf ", _ Tittel: = "Velg mappe og filnavn for å lagre som PDF") Hvis myfile "False" Så "lagre som PDF ThisWorkbook.Sheets (strSheets) .Velg ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, filnavn: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Ingen fil er valgt. PDF blir ikke lagret", vbOKOnly, "No File Selected" End If End Sub Sub

Skriv ut diagramark til PDF

Denne makroen konverterer alle diagramarkene dine til én PDF - men ikke diagramobjektene dine! Med diagramark mener jeg diagrammene som har sin egen fane i listen over regnearkfaner:

Sub PrintChartSheetsToPDF () 'SUBROUTINE: PrintChartSheetsToPDF' UTVIKLER: Ryan Wells 'BESKRIVELSE: Kombiner alle diagramarkene til en PDF Dim strSheets () As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant' Lagre diagramarkets navn i en matrise for hver kapittel i ActiveWorkbook.Charts ReDim Preserve strSheets (icount) strSheets (icount) = ch.Name icount = icount + 1 Neste ch If icount = 0 Deretter 'Ingen diagrammer funnet. Hullfeil MsgBox "En PDF kan ikke opprettes fordi det ikke ble funnet noen diagramark.", "Ingen diagramark funnet" Avslutt underenden Hvis 'Spør om lagringssted strfile = "Diagrammer" & "_" _ & format (nå () , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF -filer ( *.pdf), *.pdf ", _ Tittel: =" Velg mappe og filnavn for å lagre som PDF ") Hvis myfile" False "Lagre som PDF ThisWorkbook.Sheets (strSheets) .Velg ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, filnavn: = _ myfile, Kvalitet: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Ingen fil er valgt. PDF blir ikke lagret", vbOKOnly, "No File Selected" End If End Sub

Skriv ut diagramobjekter til PDF

Denne makroen lagrer alle dine vanlige diagrammer - diagramobjekter - i en enkelt PDF. Uansett hvilket regneark diagrammet ditt er på, vil det bli fanget og lagret i en PDF -fil.

Det vil bare være ett diagram per side i den endelige PDF -filen.

Sub PrintChartsObjectsToPDF () 'SUBROUTINE: PrintChartsObjectsToPDF' DEVELOPER: Ryan Wells 'BESKRIVELSE: Kombiner alle diagramobjekter til ett PDF Dim ws Som regneark, wsTemp Som regneark Dim chrt As ChartObject Dim tp As Long Dim strfile As String Dim myfile Vari = False Set wsTemp = Sheets.Add tp = 10 With wsTemp For Each ws In ActiveWorkbook.Worksheets If ws.Name = wsTemp.Name Then GoTo nextws: For Every 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 Slutt med 'Spør om lagring av plassering strfile = "Diagrammer" & "_" _ & Format (Nå (), "åååååmm \ _hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF -filer ( *.pdf), *.pdf", _ Tittel: = "Velg Fol der og filnavn for å lagre som PDF ") Hvis myfile False Lagre som PDF wsTemp.ExportAsFixedFormat Type: = xlTypePDF, Filnavn: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfter True 'Else' MsgBox "Ingen fil er valgt. PDF blir ikke lagret ", vbOKOnly," No File Selected "End If Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub Sub

Hvis du har spørsmål, slipp dem i kommentarfeltet, der Ryan og jeg venter der for deg.

Du kan også like følgende Excel -opplæringsprogrammer:

  • Slik legger du inn en PDF -fil i et Excel -regneark.
  • Excel VBA -sløyfer: For neste, gjør mens, gjør til, for hver (med eksempler).
  • Hvordan spille inn en makro i Excel
  • Slik kombinerer du flere arbeidsbøker til en Excel -arbeidsbok.
  • Hvordan kjøre en makro i Excel.
  • Hvordan lage og bruke et Excel-tillegg.
  • Excel VBA -feilbehandling
  • Del hvert Excel -ark i separate filer
  • Hvordan importere XML -filer til Excel | Konverter XML til Excel

Om forfatteren: Ryan Wells er en atomingeniør og profesjonell VBA -utvikler. Han publiserer sine lettfattelige Excel VBA -opplæringsprogrammer for å hjelpe andre med å skrive bedre makroer. I tillegg til å undervise i VBA, er Ryan hovedutvikler av flere Excel-tillegg. Du finner opplæringen hans på WellsR.com.

wave wave wave wave wave