Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA - mehrere Sheets als .pdf speichern

VBA - mehrere Sheets als .pdf speichern
26.07.2019 17:35:56
Sascha
Schönen guten Tag zusammen,
ich hoffe, dass mir hier jemanden helfen kann - da ich mich seit 2 Tagen im Kreis drehe und nichts durch Netz, per Makroaufzeichner und eigenem Testen hinbekomme.
Da unsere Personalplanungssoftware keinen vernünftigen Dienstplan zum aushängen aufbereiten kann, versuche ich mit den exportierten Daten in Excel einen automatisierten Dienstplan zu erstellen.
Die Implementation, Aufteilung der Mitarbeiter, Arbeitszeitverrechnung, etc pp. funktioniert bereits einwandfrei. :)
Der letzte Schritt nach dem Import soll das Speichern als .pdf sein (1 .pdf mit 11 Seiten, je Seite eine Abteilung > Betrifft Sheet 2 - 12) - dies klappt bisher auch mit dem nachfolgenden Code:
Sub CreatePDF()
Dim strFileName As String
strFileName = Application.GetSaveAsFilename(InitialFileName:=Environ("Userprofile") & _
"\Desktop\" & ActiveWorkbook.Name, _
FileFilter:="PDF-Datei (*.pdf), *.pdf")
If strFileName = "Falsch" Then Exit Sub
Sheets(Array("Abteilung1", "Abteilung2", "Abteilung3", "Abteilung4", "Abteilung5", "Abteilung6", _
"Abteilung7", "Abteilung8", "Abteilung9", "Abteilung10", "Abteilung11")).Select
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=strFileName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=True, _
OpenAfterPublish:=True _
Sheets("Import").Select              'Import ist Sheet 1, wo die Daten eingespielt werden
MsgBox "Datei als PDF gespeichert unter " & strFileName, 64, "Hinweis"
End Sub
Das Problem - wozu ich leider auch rein Garnichts finde - ist, dass nur die erste und fünfte Seite eine vernünftige Skalierung beim speichern als .pdf hat.
Alle anderen Seiten haben viel freie Fläche und die Dienstpläne sind so klein, dass man die Seiten nicht zum aushändigen ausdrucken kann.
Die Abteilungen liegen zwischen 4 und 28 Mitarbeitern, was die "länge" jeder Seite entsprechend definiert - die Anzahl und Breite der Spalten sind immer identisch, nur die Anzahl Zeilen wird durch die Anzahl Mitarbeiter bestimmt.
Aber z.B. Abteilung 2 ist die größte Abteilung und der Inhalt ist ganz klein gedruckt. Seite 5 ist eine kleine Abteilung, aber der Text ist super groß und gut lesbar im .pdf.
Ziel ist es natürlich, dass am Besten alle Seiten (egal wie viele Zeilen) die .pdf Seite gänzlich ausfüllen (z.B. wie bei der Druckeinstellung: Querformat, Blatt auf ganzer Seite anzeigen, nur markieren Bereich drucken, ggf. keine Seitenränder).
Gibt es dazu irgendwelche Möglichkeiten?
Bereits vielen herzlichen Dank vorab. :)
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - mehrere Sheets als .pdf speichern
26.07.2019 17:51:32
onur
Versuch das:
Jedem Blatt den gleichen Druckbereich zuweisen.
IgnorePrintAreas auf False setzen.
AW: VBA - mehrere Sheets als .pdf speichern
26.07.2019 19:23:42
Sascha
Oh man, dass es so einfach sein kann... Schande über mich und vielen, vielen lieben Dank für die super schnelle Antwort. :)
Klappt perfekt! :)
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Mehrere Sheets als PDF speichern


Schritt-für-Schritt-Anleitung

Um mehrere Tabellenblätter in Excel als PDF zu speichern, kannst Du das folgende VBA-Makro verwenden. Dieses Makro ermöglicht es dir, mehrere Abteilungen (Blätter) in einer einzigen PDF-Datei zu exportieren und sorgt dafür, dass die Seiten optimal formatiert sind.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle im Menü Einfügen die Option Modul.
  3. Füge den folgenden Code in das Modul ein:
Sub CreatePDF()
    Dim strFileName As String
    strFileName = Application.GetSaveAsFilename(InitialFileName:=Environ("Userprofile") & _
    "\Desktop\" & ActiveWorkbook.Name, _
    FileFilter:="PDF-Datei (*.pdf), *.pdf")
    If strFileName = "Falsch" Then Exit Sub

    ' Druckbereiche für alle Blätter festlegen
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.PageSetup.PrintArea = ws.UsedRange.Address
    Next ws

    ThisWorkbook.Sheets(Array("Abteilung1", "Abteilung2", "Abteilung3", "Abteilung4", "Abteilung5", "Abteilung6", _
    "Abteilung7", "Abteilung8", "Abteilung9", "Abteilung10", "Abteilung11")).Select

    ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=strFileName, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=True

    MsgBox "Datei als PDF gespeichert unter " & strFileName, 64, "Hinweis"
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus, um die Blätter als PDF zu speichern.

Häufige Fehler und Lösungen

  • Problem: Nur einige Seiten werden korrekt skaliert.

    • Lösung: Stelle sicher, dass Du den Druckbereich für jedes Blatt festgelegt hast. Der Code im obigen Beispiel setzt den Druckbereich auf den verwendeten Bereich des jeweiligen Blattes.
  • Problem: PDF wird nicht korrekt erstellt.

    • Lösung: Überprüfe, ob alle Blätter, die Du exportieren möchtest, existieren und richtig benannt sind.

Alternative Methoden

  • Manuelles Speichern als PDF:

    1. Wähle die gewünschten Tabellenblätter aus.
    2. Gehe zu Datei > Speichern unter.
    3. Wähle PDF als Dateiformat und speichere die Datei.
  • Drucken in PDF: Du kannst auch die „Drucken“-Funktion nutzen und einen PDF-Drucker auswählen, um mehrere Blätter als PDF zu drucken.


Praktische Beispiele

Wenn Du ein Excel-Dokument mit mehreren Abteilungen hast und diese als PDF speichern möchtest, kannst Du den obigen Code anpassen, um spezifische Blätter auszuwählen.

Beispiel: Um die Blätter „Verkauf“, „Marketing“ und „Personal“ zu speichern, ändere die Auswahl im Code:

ThisWorkbook.Sheets(Array("Verkauf", "Marketing", "Personal")).Select

Tipps für Profis

  • Seitenränder anpassen: Stelle sicher, dass die Seitenränder für alle Blätter einheitlich sind, um ein konsistentes Layout im PDF zu erhalten. Du kannst die Seitenränder im PageSetup anpassen.

  • Querformat: Wenn Deine Tabellen breit sind, solltest Du das Querformat einstellen. Füge im Code hinzu:

ws.PageSetup.Orientation = xlLandscape

FAQ: Häufige Fragen

1. Wie kann ich nur bestimmte Blätter als PDF speichern? Du kannst die Sheet-Namen im Array des Sheets-Befehls anpassen, um nur die gewünschten Blätter auszuwählen.

2. Kann ich die PDF-Datei direkt in ein bestimmtes Verzeichnis speichern? Ja, ändere die InitialFileName-Zeile im Code, um einen spezifischen Pfad anzugeben.

3. Wie kann ich die PDF-Qualität verbessern? Die Qualität wird im Export-Befehl mit dem Parameter Quality festgelegt. Du kannst xlQualityMinimum oder xlQualityStandard verwenden.

4. Ist es möglich, mehrere Excel-Dateien in eine PDF umzuwandeln? Ja, Du müsstest ein Makro erstellen, das jede Excel-Datei öffnet und die Blätter in eine gemeinsame PDF-Datei exportiert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige