Tabbladen opslaan als PDF
Een Excel file is handig maar als je dit uiteindelijk wilt doorsturen is een PDF bestand iets netter. Nu heeft Excel een handige optie ingebouwd waarmee je een tabblad kan opslaan als PDF bestand of je kan de macro gebruiken voor het opslaan als PDF, opgelost zou je zeggen.
Maar wat nu als je een bestand hebt met heel veel tabbladen die je allemaal in wilt opslaan als PDF? Dan mag je genoeg tijd vrijmaken want dat is erg veel werk.
Heel toevallig vertel ik jullie in dit artikel hoe je dat met een macro kan doen. Dit scheelt erg veel tijd.
Als je nog niet weet hoe je een macro toevoegt, dan kan je hier kijken.
Vooraf is het handig om te weten hoe je het Ontwikkelaars tabblad krijgt en hoe je een macro toevoegt.
Video
Tabbladen opslaan als PDF
Om deze optie goed te maken, gaan we eerst een code toevoegen. Open de VBA editor, sneltoets ALT + F11, en maak daar een nieuwe Module aan. Plak daar de volgende code:
Sub PDF()
Pad = "C:\Users\Nick\Desktop\test\"
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Voorblad" Then
If Dir(Pad & sh.Name & ".pdf") <> "" Then
MsgBox "Het bestand: " & sh.Name & ".pdf bestaat reeds"
Else
sh.ExportAsFixedFormat 0, Pad & sh.Name, , , , , OpenAfterPublish:=False
End If
End If
Next sh
End Sub
Vervolgens gaan we hier een ActiveX besturingselement voor aanmaken. Ga op het lint naar het tabblad Ontwikkelaars, selecteer hier Invoegen en kies voor knop.
Koppel hier de zojuist aangemaakte module TabbladPDF aan.
Deze macro slaat elk tabblad op behalve als bladen waar F8 leeg is en tabblad met de naam Voorblad.
Alle bestanden die worden opgeslagen krijgen de naam die het werkblad heeft.
Wel moet je voor dat je deze macro gebruikt het pad nog wijzigen, dit geeft aan waar de bestanden opgeslagen worden.
Hopelijk bespaart je dit veel werk!
Hoi Excelweb,
Bedankt voor de handige tips+code. Vraagje, is het ook mogelijk om de individuele PDFs ook een andere bestandsnaam te geven (bijvoorbeeld de tekst uit een cel in een sheet) i.p.v. de naam van het tabblad zelf?
De naam van het tabblad mag namelijk een maximaal aantal karakters hebben; dit aantal is niet voldoende voor mijn doeleinde.
Hopelijk kunnen jullie helpen.
Groet,
Ronald
Hieronder de aangepaste code, zodat je de individuele PDF’s een andere bestandsnaam kunt geven op basis van de tekst uit een cel in een sheet.
Om dit te doen, moet je de cel bepalen waarin de gewenste bestandsnaam staat en deze vervolgens gebruiken bij het exporteren van de PDF. Hier is de aangepaste code:
Sub PDF()
Dim Pad As String
Dim bestandsnaam As String
Pad = “C:\Users\Nick\Desktop\test\”
For Each sh In ThisWorkbook.Sheets
If sh.Name <> “Voorblad” Then
‘ Bepaal de gewenste bestandsnaam uit een cel in het sheet
bestandsnaam = sh.Range(“A1”).Value ‘ Pas “A1” aan naar de cel waar de bestandsnaam staat
If bestandsnaam = “” Then
MsgBox “Er is geen bestandsnaam opgegeven in ” & sh.Name & “. De PDF wordt niet gemaakt.”
ElseIf Dir(Pad & bestandsnaam & “.pdf”) <> “” Then
MsgBox “Het bestand: ” & bestandsnaam & “.pdf bestaat reeds”
Else
sh.ExportAsFixedFormat 0, Pad & bestandsnaam, , , , , OpenAfterPublish:=False
End If
End If
Next sh
End Sub
Hier wordt de variabele bestandsnaam gebruikt om de gewenste bestandsnaam voor elke sheet op te halen vanuit een specifieke cel (in dit geval “A1”). Je kunt de verwijzing naar de cel aanpassen door de juiste celreferentie te gebruiken, bijvoorbeeld “B2” als de bestandsnaam in cel B2 staat. Als er geen bestandsnaam in de cel staat, wordt een foutmelding weergegeven en wordt geen PDF gemaakt voor dat specifieke tabblad.
Zorg ervoor dat de cel met de bestandsnaam voor elke sheet is ingevuld voordat je de macro uitvoert.
Beste….
Ik wil graag een excel tabblad opslaan als PDF met een vaste naam uit cel waarde S7. Echter is S7 een samengevoegde tekst formule. Daarbij wil ik wel de naam automatisch laten gebruiken maar de bestand locatie wel kunnen kiezen. Dit omdat bestand door meerdere gebruikt gaat worden die het bestand ergens anders willen opslaan. Kan iemand mij hiermee helpen? Ik gebruik windows
Met vriendelijke groet Bas
Hieronder de aangepaste code, zodat je het Excel-tabblad kunt opslaan als PDF met een vaste naam uit cel S7, terwijl je nog steeds de bestandslocatie kunt kiezen voordat je het opslaat.
Code:
Sub PDF()
Dim Pad As String
Dim bestandsnaam As String
Dim sh As Worksheet
‘ Kies de bestandslocatie
Pad = Application.GetSaveAsFilename(fileFilter:=”PDF Files (*.pdf), *.pdf”)
If Pad = “False” Then
‘ Gebruiker heeft annuleren gekozen
Exit Sub
End If
‘ Bepaal de gewenste bestandsnaam uit cel S7
bestandsnaam = ThisWorkbook.Sheets(“Bladnaam”).Range(“S7”).Value
If bestandsnaam = “” Then
MsgBox “Er is geen bestandsnaam opgegeven in cel S7. De PDF wordt niet gemaakt.”
Else
‘ Voeg “.pdf” toe aan de bestandsnaam als het nog niet is opgenomen
If Right(bestandsnaam, 4) <> “.pdf” Then
bestandsnaam = bestandsnaam & “.pdf”
End If
‘ Sla het actieve blad op als PDF in de gekozen locatie en met de gewenste bestandsnaam
Set sh = ThisWorkbook.ActiveSheet
sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Pad, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
MsgBox “Het bestand is opgeslagen als: ” & Pad
End If
End Sub
In deze aangepaste code wordt Application.GetSaveAsFilename gebruikt om de gebruiker te vragen om een bestandslocatie te kiezen. De gekozen locatie wordt opgeslagen in de variabele Pad.
De gewenste bestandsnaam wordt nu uit cel S7 gehaald op het blad met de naam “Bladnaam”. Zorg ervoor dat je “Bladnaam” vervangt door de daadwerkelijke naam van het blad waarop cel S7 zich bevindt.
De code controleert ook of er “.pdf” aan het einde van de bestandsnaam is toegevoegd. Als dit niet het geval is, wordt het automatisch toegevoegd om ervoor te zorgen dat het bestand de juiste extensie heeft.
Als er geen bestandsnaam is opgegeven in cel S7, wordt er een foutmelding weergegeven en wordt geen PDF gemaakt.
Als alles goed gaat, wordt het actieve blad opgeslagen als PDF in de gekozen locatie met de gewenste bestandsnaam.
Ik zou graag slechts een deel (A1:H44) van een werkblad als PDF opslaan met een naam uit een cel binnen dat bereik.
Ik kan er maar niet achterkomen hoe dat te programmeren in VBA
Je kunt dit inderdaad in VBA doen met een macro die een bepaald bereik als PDF opslaat en de bestandsnaam instelt op basis van de inhoud van een cel binnen dat bereik.
Zie onderstaande code.
Vervang `”NaamVanJeWerkblad”` door de daadwerkelijke naam van je werkblad waarop het bereik zich bevindt.
Pas eventueel het bereik `”A1:H44″` aan als dat nodig is.
Pas de cel aan waarin de bestandsnaam staat, bijvoorbeeld `rng.Cells(1, 1)`.
Stel de juiste paden in waar je het PDF-bestand wilt opslaan.
Als je onderstaande macro uitvoert, zal het opgegeven bereik worden opgeslagen als een PDF-bestand met de bestandsnaam gebaseerd op de inhoud van de opgegeven cel.
Sub OpslaanAlsPDF()
Dim ws As Worksheet
Dim rng As Range
Dim filePath As String
Dim fileName As String
‘ Definieer het werkblad en het bereik dat je wilt opslaan
Set ws = ThisWorkbook.Worksheets(“NaamVanJeWerkblad”)
Set rng = ws.Range(“A1:H44”)
‘ Bepaal het pad waar het PDF-bestand moet worden opgeslagen
filePath = ThisWorkbook.Path & “\” ‘ Hier wordt het bestand opgeslagen in dezelfde map als het Excel-bestand
‘ Bepaal de bestandsnaam op basis van de inhoud van een cel binnen het bereik
fileName = rng.Cells(1, 1).Value ‘ Bijvoorbeeld, als de cel A1 de gewenste bestandsnaam bevat
‘ Sla het bereik op als PDF-bestand
rng.ExportAsFixedFormat Type:=xlTypePDF, Filename:=filePath & fileName & “.pdf”, Quality:=xlQualityStandard
MsgBox “PDF-bestand is succesvol opgeslagen als ” & fileName & “.pdf”, vbInformation
End Sub
Succes!
Goedemiddag,
Ik ben niet zo heel erg thuis in het Visual Basic gedeelte van Excel. Maar dacht dat het met de bovenstaande instructie wel zou lukken. Helaas…
Ik zou graag al mijn tabs apart willen afdrukken in pdf.
Heb de bovenstaande formule hiervoor gebruikt.
Maar krijg de volgende foutmelding bij:
sh.ExportAsFixedFormat 0, Pad & sh.Name, , , , , OpenAfterPublish:=False
Wie kan mij helpen wat ik fout doe?
Alvast hartelijk dank.
Groet,
Chantal
Hallo Chantal,
Probeer deze versie van het script eens.
Bevat een aantal checks:
– Bestandsnaam bevat ongeldige tekens
– Map bestaat niet
– Geen rechten om te schrijven
– Sommige tabbladen (zoals verborgen of zeer grote tabbladen) kunnen problemen geven
Sub PDF()
Dim Pad As String
Dim sh As Worksheet
Dim FileName As String
Pad = “C:\Users\Nick\Desktop\test\”
‘ Controleer of de map bestaat, zo niet, maak deze aan
If Dir(Pad, vbDirectory) = “” Then MkDir Pad
For Each sh In ThisWorkbook.Sheets
If sh.Name <> “Voorblad” Then
‘ Ongeldige tekens in bestandsnaam vervangen
FileName = Replace(sh.Name, “/”, “_”)
FileName = Replace(FileName, “\”, “_”)
FileName = Replace(FileName, “?”, “_”)
FileName = Replace(FileName, “*”, “_”)
FileName = Replace(FileName, “:”, “_”)
FileName = Replace(FileName, “|”, “_”)
FileName = Replace(FileName, “”””, “_”)
FileName = Replace(FileName, “<", "_") FileName = Replace(FileName, ">“, “_”)
If Dir(Pad & FileName & “.pdf”) <> “” Then
MsgBox “Het bestand: ” & FileName & “.pdf bestaat reeds”
Else
sh.Visible = xlSheetVisible ‘ Zorg ervoor dat het blad zichtbaar is
sh.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=Pad & FileName & “.pdf”, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End If
End If
Next sh
End Sub
Na enkele uren puzzelen vanuit verschillende posts kom ik er niet uit. Wellicht dat iemand mij hier kan helpen.
– Ook ik wil graag meerdere tabbladen als PDF opslaan met 1 druk op de knop, volgens mij zou dit moeten kunnen met mijn wensen.
– De range moet (op ieder tabblad) beperkt worden van A1 – O68 en op 1 pagina in de PDF passen.
– Ideaal zou zijn als deze PDFs automatisch opgeslagen worden in de locatie van de Excel file, indien niet mogelijk gebruiken we wel een vaste locatie.
– Bestanden moeten opgeslagen worden met de naam van het tabblad en specifieke datum (vermeld in cel L5) bvb ‘Uren – 1-4-2025.pdf’.
je kunt onderstaande code eens proberen, die:
Deze code slaat alle tabbladen (behalve “Voorblad”) op als PDF in dezelfde map als het Excel-bestand
De bestandsnaam bevat het tabblad en de datum uit cel L5
De range wordt beperkt tot A1:O68 en past op één pagina
Sub ExportSheetsToPDF()
Dim Pad As String
Dim sh As Worksheet
Dim Bestandsnaam As String
Dim Datum As String
‘ Gebruik de locatie van de Excel file als opslaglocatie
Pad = ThisWorkbook.Path & “\”
For Each sh In ThisWorkbook.Sheets
If sh.Name <> “Voorblad” Then
‘ Controleer of er een datum in cel L5 staat
If IsDate(sh.Range(“L5”).Value) Then
Datum = Format(sh.Range(“L5”).Value, “d-m-yyyy”)
Else
Datum = Format(Date, “d-m-yyyy”) ‘ Gebruik de huidige datum als fallback
End If
Bestandsnaam = Pad & sh.Name & ” – ” & Datum & “.pdf”
If Dir(Bestandsnaam) <> “” Then
MsgBox “Het bestand: ” & Bestandsnaam & ” bestaat reeds”, vbExclamation
Else
‘ Instellen van de afdrukinstellingen
With sh.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
‘ Exporteren als PDF met gedefinieerde range
sh.Range(“A1:O68”).ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=Bestandsnaam, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End If
End If
Next sh
MsgBox “Alle geselecteerde bladen zijn opgeslagen als PDF!”, vbInformation
End Sub
Hi Joost,
Hartelijk dank, ik heb een scala aan foutmeldingen waarbij ik er een aantal weg heb kunnen krijgen maar loop nu tegen het volgende aan;
If IsDate(sh.Range(“L5”).Value) Then
Geeft melding;
sh.Range(“L5”).Value =
Probeer deze aangepaste regel eens:
If Not IsEmpty(sh.Range(“L5”).Value) And IsDate(sh.Range(“L5”).Value) Then
Je kunt ook debuggen door de waarde uit L5 in een berichtbox weer te geven:
MsgBox “Cel L5 bevat: ” & sh.Range(“L5”).Value
Hopelijk kom je hier weer wat verder mee.