Excel / VBA als pdf speichern?
Guten Tag,
Ich möchte gerne zwei Tabellenblätter aus Excel (Tabellenblatt 1und 3) auf dem Desktop als .pdf speichern.
Der Name der Pdf sollte wie der Zelleninhalt aus Tabelle 1 Zelle G10 lauten.
Leider bekomme ich dies nicht hin.
Kann mir da jemand bitte helfen?
Mit freundlichen Grüßen
2 Antworten
Da ich nicht weiß, was Du im Detail vor hast folgender Vorschlag weil Du VBA dazu nicht brauchst (je nach Office Version, die ebenfalls unbekannt ist)
Markiere die beschriebenen Zellen als Druckbereich und speichere die Datei einfach als PDF Dokument ab.
versuch mal:
Sub save_pdf()
Const DateiPfad = "c:\"
Dim DateiName As String
DateiName = DateiPfad & Range("A10") '& ".pdf" ' Dateiname aus Zellinhalt
ChDir DateiPfad
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
DateiName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub
wenn die Datei nach dem Speichern geöffnet werden soll, setze "openAfterPublish:" auf "True"
Der obige Sourcecode druckt lediglich das aktuell ausgewählte Tabellenblatt aus...
Außerdem wird zur Dateibenennung, im Code, die Zelle A10, des aktuelle ausgewählten Tabellenblatts genommen und nicht, wie gewünscht, die Zelle A10 fix vom Tabellenblatt 1
Evtl. kannst du deinen Code ja nochmal fix überarbeiten und dem Fragesteller dann den
MFG xGlumi
1.) Du musst natürlich die Ursprungsdatei erstmal als *.xlsm Datei speichern nachdem Du den Code eingetragen hast!
2.) unter "Const DateiPfad = "c:\" legst Du den Speicherpfad als Konstante fest, achte aber bitte darauf, dass der Pfad mit einem Backslash endet!
3.) teste diesen Code, der wählt Dir die Tabellenblätter 1 und 3 aus. Sollten sie anders benannt sein, ändere bitte die Namen im Code ab
Sub save_pdf()
Const DateiPfad = "C:\"
Dim DateiNameA As String
DateiNameA = DateiPfad & Range("A10") & ".pdf" ' Dateiname aus Zellinhalt
Sheets(Array("Tabelle1", "Tabelle3")).Select
ChDir DateiPfad
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
DateiName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub
Die Speicherung klappt, schon einmal vielen Dank dafür. Leider ist der Dateiname der PDF genau so wie die Ursprungsdatei. Der Zelleninhalt aus der Tabelle 1 Zelle G10 (hatte es geändert weil du A10 genutzt hast) wird nicht aus Dateiname verwendet.
Zudem mal eine dumme Frage. Werden Werte aus Formeln (sverweise oder wennFunktionen) nicht angezeigt? Komischerweise wird die PDF vom Inhalt nur teilweise wiedergegeben.
Es wird lediglich Kopf- und Fußzeile sowie Wasserzeichen in der PDF wiedergegeben. Alles andere nicht.
Das Problem ist, dass mit dem oberen Code nicht alle Zellen jedes einzelnen Tabellenblattes markiert werden, sondern:
Wenn du auf dem aktuellen Tabellenblatt z.B. "Range A1 bis C10" markiert hattest, und dann das Makro von Esskah ausführst, dann bekommst du von allen Tabellenblättern die Range A1 bis C10 ausgedruckt. (So verhält es sich mit jeder Range, die du vorher selbst manuell ausgewählt hast)
Das Problem, dass der Dateiname nicht korrekt übernommen wird liegt daran, dass im Code "DateiNameA" steht, editier das einfach zu "DateiName"
MFG xGlumi
korrekt, habe vor lauter Test nebenbei nicht genau darauf geachtet
Sub save_pdf()
Const DateiPfad = "C:\" ' Dateipfad als Konstante setzen
Dim DateiName As String ' Dateiname als Variable setzen
DateiName = DateiPfad & Sheets("Tabelle1").Range("G10") & ".pdf" ' Dateiname aus Zellinhalt
Sheets(Array("Tabelle1", "Tabelle3")).Select ' wählt zwei Tabellenblätter aus
ChDir _
DateiPfad
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
DateiName & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
Sheets("Tabelle1").Select
Range("A1").Select
End Sub
Gedruckt wird nur der ausgewählte Bereich und der Zusatz vor "End Sub" stellt sicher, dass die verbundenen Tabellenblätter wieder getrennt und die Zelle A1 auf Tabellenblatt1 ausgewählt wird
Supi, vielen dank. Die Änderung des Dateinamen funktioniert auch einwandfrei.
Kann man es denn schon direkt in VBA schreiben, dass bei Tabelle 1 und Tabelle 3 von A1:G48 gedruckt werden soll? Finde es etwas blöde erst den Druckbereich manuell auswählen zu müssen.
Gruß
klar, einfach ein "Range ("A1:G48") davor setzen. Das könnte man auch noch als Variable definieren
Sub save_pdf()
Const DateiPfad = "C:\" ' Dateipfad als Konstante setzen
Dim DateiName As String ' Dateiname als Variable setzen
DateiName = DateiPfad & Sheets("Tabelle1").Range("G10") & ".pdf" ' Dateiname aus Zellinhalt
Sheets(Array("Tabelle1", "Tabelle3")).Select ' wählt zwei Tabellenblätter aus
ChDir _
DateiPfad
Range("A1:G48").Select
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
DateiName & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
Sheets("Tabelle1").Select
Range("A1").Select
End Sub
Hallo Robin,
mit dem folgenden Marko lässt sich das bewerkstelligen.
- Den Code als Modul einfügen
- Schaltfläche einfügen und über das Kontextmenü das Makro zuweisen
Sub Save_as_PDF()
pdfName = Range("Tabelle1!G10")
Sheets(Array("Tabelle1", "Tabelle3")).Copy
With ActiveWorkbook
.ExportAsFixedFormat Type:=xlTypePDF, FileName:=pdfName, Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=True
.Close savechanges:=False
End With
End Sub
Es muss über VBA laufen, da es über einen Button laufen soll.
Sprich die drückst einen erstellten Button, bekommst eine msgBox und durch bestätigen dieser wird eine pdf erstellt.