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!

12 replies on “Tabbladen opslaan als PDF”

  • 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.

      Joost Administrator
  • 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

    bas wilbers
    • 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.

      Joost Administrator
  • 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

    Arwin Kortleever
    • 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!

      Joost Administrator
  • 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

      Joost Administrator
  • 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

      Joost Administrator
      • 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.

          Joost Administrator

Leave a Comment

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *