Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - An bestehende pdf anhängen
#1
Hallo zusammen,

folgende Problemstellung:

Ich muss nacheinander verschiedene Excel-Dateien aufrufen und den Inhalt sodann in ein (1) pdf drucken.

Bisher nutze ich dafür einen pdf-Drucker, der mir die Funktion "als 2. Seite an bestehendes pdf anfügen" bietet, 
wenn die pdf-Datei mit dem gewünschten Namen bereits existiert.

Ich frage mich, ob das auch automatisiert mit VBA möglich ist.

Was müsste ich diesem Code dafür hinzufügen, damit die bestehende Datei nicht überschrieben wird?

Code:
Sub pdf_erzeugen()
     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\Testuser\Desktop\Testdateien\pdf\" & Range("C1") & ".PDF", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
End Sub

Etwas Ähnliches wurde hier schonmal diskutiert (http://www.clever-excel-forum.de/thread-3990.html), jedoch ging es dort um
verschiedene Arbeitsblätter in der gleichen Datei und nicht um verschiedene Dateien.

Danke und Grüße
Sascha
Antworten Top
#2
Moin!
Bilde doch einfach ein temporäres Sheet, welches Du in einer Schleife füllst und bediene Dich der Dir bekannten Methode.

Näheres erst bei Näherem. ;)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
Hallo Ralf,

erstmal danke für deine Antwort.

Zunächst "untechnisch" ausgedrückt - meinst du so?

- Öffne alle benötigten Excel-Dateien
- Erzeuge ein neues, leeres Tabellenblatt - nennen wir es mal "Sammelblatt"
- Kopiere den Druckbereich aus Datei1 in das Sammelblatt und füge einen Seitenumbruch ein
- Kopiere den Druckbereich aus Datei2 in das Sammelblatt in die nächste leere Zeile und füge einen Seitenumbruch ein
- Kopiere den Druckbereich aus Datei3 in das Sammelblatt in die nächste leere Zeile und füge einen Seitenumbruch ein
....
- Kopiere den Druckbereich aus Datei99 in das Sammelblatt in die nächste leere Zeile und füge einen Seitenumbruch ein
- Starte dann erst das im Eröffnungspost gezeigte VBA-Script

Oder missverstehe ich dich?

Grüße
Sascha
Antworten Top
#4
Ja, so ungefähr. ;)
Da ich mal annehme, dass Du jeweils nur ein Tabellenblatt aus den jeweiligen Dateien benötigst,
würde ich nicht mit Seitenumbrüchen, sondern mit Blättern arbeiten.
Die Workbook.ExportAsFixedFormat-Methode fügt Seitenwechsel nach jedem Tabellenblatt ein.
(Du nimmst ja die hier nicht zielführende Worksheet.ExportAsFixedFormat-Methode)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
Fein, das ist ein Ansatz. Ich probiere mich mal daran.. mal sehen was für einen VBA-Anfänger mein neu erworbenes Buch "VBA für Dummies" hergibt  :21:

Aber zumindest bestätigt deine Lösung meine Recherche: Es gibt keinen einfachen VBA-Befehl, mit dem ich an eine bestehende pdf-Datei was anhängen kann.

Grüße
Sascha
Antworten Top
#6
Finde ich gut, dass Du zunächst mal selbst wurschteln willst!
Bei Problemen weißt Du ja, wo Du nachfragen kannst!  :19:
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#7
Ach so:
Du könntest ja mal nachschauen, ob Dein PDF-"Drucker" eine vernünftige API bietet.
Dann könnte man den schon über VBA (als Container) steuern.
Aber "für Dummies" ist das dann beileibe nicht mehr.  Angel
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#8
Zum "selber Wurschteln" halte ich es gern damit:
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius, *551 v. Chr. †479 v. Chr)

klugscheiß-ende Wink
Antworten Top
#9
Bin versucht "Deinen" Spruch als Signatur zu nehmen!
Wobei ich davon ausgehe, schon bald der Versuchung zu erlegen …
Find ich gut!  Thumps_up
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#10
So, ein paar Schweißperlen später ist das rausgekommen und funktioniert tatsächlich  :15:
Es ist wahrscheinlich weit weg von einem optimalen und effizienten Code, aber naja.. es funktioniert.

Manöverkritik von den VBA-Cracks zur Effizienzsteigerung erwünscht Smile

Code:
Sub Daten_sammeln_und_PDF_erzeugen()

   'Sammeldatei anlegen
   Workbooks.Add
   ActiveWorkbook.SaveAs "C:\Users\Sascha\Desktop\Testdateien\Sammelblatt.xlsx"
   
   'Die erste Datei aktivieren, die ins Sammel-pdf kommt
   Application.Workbooks("Quelldatei1.xlsx").Worksheets("Quelle1").Activate
   
   'Den Druckbereich kopieren
   Range(ActiveSheet.PageSetup.PrintArea).Copy
   
   'Zielbereich aktivieren und einfügen
   Workbooks("Sammelblatt.xlsx").Activate
   ActiveSheet.Paste Destination:=Range("A1")
   
   'Zweites Sheet im Sammelblatt anlegen
   Workbooks("Sammelblatt.xlsx").Sheets.Add
   ActiveSheet.Name = "Ziel2"
   
   'Die zweite Datei aktivieren, die ins Sammel-pdf kommt
   Application.Workbooks("Quelldatei2.xlsx").Worksheets("Quelle2").Activate
   
   ' Den Druckbereich kopieren
   Range(ActiveSheet.PageSetup.PrintArea).Copy
   
   'Zielbereich aktivieren und einfügen
   Workbooks("Sammelblatt.xlsx").Worksheets("Ziel2").Activate
   ActiveSheet.Paste Destination:=Range("A1")
   
   'PDF erzeugen
   ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
   "C:\Users\Sascha\Desktop\Testdateien\pdf\" & "Sammelblatt" & ".PDF", Quality:=xlQualityStandard, _
   IncludeDocProperties:=True, IgnorePrintAreas:=False, _
   OpenAfterPublish:=False
   
   'Sammelblatt schließen und löschen
   Workbooks("Sammelblatt.xlsx").Close
   Kill "C:\Users\Sascha\Desktop\Testdateien\Sammelblatt.xlsx"
   
   
End Sub
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste