Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PDF zusammenfügen

PDF zusammenfügen
26.05.2020 09:51:22
Julian
Hallo Forum,
ich versuche gerade, mithilfe von VBA und Adobe Acrobat alle PDF-Dateien innerhalb eines Ordners zu einer Datei zusammen zu fügen. Da ich noch ziemlicher Anfänger bin, war ich sehr froh, dass mir dieser alte Forumseintrag einen Anknüpfungspunkt gegeben hat:
https://www.herber.de/forum/archiv/1664to1668/1667467_Makro_um_PDFDateien_in_einem_Ordner_zu_mergen.html
Allerdings bekomme ich immer den Fehler, dass der Dateipfad des Betreffenden Ordners, der immer als Nachname, Vorname benannt ist, um eine Wiederholung des Nachnamens verlängert wird, wodurch das Makro natürlich nicht auf den richtigen Ordner zugreifan kann ("C:\...\Nachname, Vorname\ Überzählige Wiederholung Nachname"). Mit trial and error komme ich gerade einfach nicht weiter. Weiß jemand, vielleicht, wo hier der Fehler im Skript liegt bzw. wie es angepasst werden kann?
Es gab noch einen Änderungsvorschlag in dem letzten Post des alten Thread, von dem ich jedoch nicht weiß, wie ich ihn in das Skript einfügen kann. Da er auch den Dateipfad betrifft könnte das Problem vielleicht so auch grundsätzlich umgangen werden.
Gibt es sonst vielleicht einen anderen Ansatz, den ich nicht sehr? Schon einmal vielen Dank für eure Hilfe.
Sub MergePDFs()
'Verweis zu Acrobat muss zuerst aktiviert werden!
'VBA-Editor ->Extras - Verweise - Acrobat
'Variablen deklarieren
Dim a As Variant, i As Long, n As Long, ni As Long, p As String
Dim AcroApp As New Acrobat.AcroApp, PartDocs() As Acrobat.CAcroPDDoc
Dim str_Ausgangsdateien As String, strDatei As String
'Pfade -> bei Bedarf anpassen
Const str_pfad = "C:\Users\Anwender\Desktop\PDF\Nachname, Vorname\Wiederholung Nachname"     _
_
'Pfad des Ordners mit den zusammengeführt werden sollen
Const str_Ergebnisdatei = "PDFneu.pdf"                      'Dateiname der neuen Datei, die  _
_
ausgegeben wird
'Überprüfen ob str_Pfad mit einem - \ - abschließt
If Right(str_pfad, 1) = "\" Then p = str_pfad Else p = str_pfad & "\"
'Ausgangsdateien zusammenstellen
strDatei = Dir(p & "*pdf")
Do While Len(strDatei) > 0
str_Ausgangsdateien = str_Ausgangsdateien & "," & strDatei
strDatei = Dir() ' nächste Datei
Loop
If str_Ausgangsdateien = "" Then
MsgBox "Keine Dateien gefunden"
Exit Sub
End If
a = Split(Mid(str_Ausgangsdateien, 2), ",") 'erstes Komma abschneiden
Redim PartDocs(0 To Ubound(a))
On Error GoTo ende
If Len(Dir(p & str_Ergebnisdatei)) Then Kill p & str_Ergebnisdatei
For i = 0 To UBound(a)
'Überprüfen ob die Datei vorhanden ist
If Dir(p & Trim(a(i))) = "" Then
MsgBox "Datei wurde nicht gefunden!" & vbLf & p & a(i), vbExclamation, "Abgebrochen"
Exit For
End If
'PDF-Datei öffnen
Set PartDocs(i) = CreateObject("AcroExch.PDDoc")
PartDocs(i).Open p & Trim(a(i))
If i Then
'PDF zu PartDocs(0) hinzufügen
ni = PartDocs(i).GetNumPages()
If Not PartDocs(0).InsertPages(n - 1, PartDocs(i), 0, ni, True) Then
MsgBox "Die Seiten aus der folgenden Dateie konnten nicht eingefügt werden:" & vbLf & p & a(i),  _
_
_
vbExclamation, "Abgebrochen"
End If
'Seitenzahl im neuen Dokument berechnen
n = n + ni
'Speicher leeren
PartDocs(i).Close
Set PartDocs(i) = Nothing
Else
'Seitenzahl in temporärer Datei - PartDocs(0) - ermitteln
n = PartDocs(0).GetNumPages()
End If
Next
If i > UBound(a) Then
'Die neue Datei im angegebenen Pfad speichern
If Not PartDocs(0).Save(PDSaveFull, p & str_Ergebnisdatei) Then
MsgBox "Konnte die neue zusammengesetzte Datei nicht speichern" & vbLf & p & str_Ergebnisdatei,  _
_
_
vbExclamation, "Abgebrochen"
End If
End If
ende:
'Fehler/Erfolg per Messagebox melden
If Err Then
MsgBox Err.Description, vbCritical, "Error #" & Err.Number
ElseIf i > UBound(a) Then
MsgBox "Die zusammengesetzte Datei wurde erstellt:" & vbLf & p & str_Ergebnisdatei,  _
vbInformation, "Fertig"
End If
'Release the memory
If Not PartDocs(0) Is Nothing Then PartDocs(0).Close
Set PartDocs(0) = Nothing
'Acrobat Applikation schließen
AcroApp.Exit
Set AcroApp = Nothing
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: und warum überhaupt so? ...
26.05.2020 11:45:22
neopa
Hallo Julian,
... in einer Vollversion des Acrobat sollte dies auch ohne zusätzliches VBA möglich sein. Ich meine mich jedenfalls zu erinnern, dass ich derartiges, wie Du es jetzt anstrebst, vor einigen Jahren damit so tun konnte, als ich das mal gebraucht hatte.
Gruß Werner
.. , - ...
AW: und warum überhaupt so? ...
26.05.2020 12:14:28
Julian
Hallo Werner,
danke für deine Antwort. Für eine einzelne Operation ist das sicherlich das Einfachste. Ziel soll am Ende allerdings sein, den Prozess automatisiert über VBA für mehrere Berichte über eine Schleife "durchlaufen" lassen. In der Vorlage wurde Adobe Acrobat als Hilfsprogramm verwendet, da es in VBA nun leider nicht möglich ist, mehrere PDFs zusammenzufügen. Hast Du vielleicht eine Idee, wie es sich mit VBA über Adobe oder auch ein anderes Programm wiederholt für mehrere Zusammenfügungen bewerkstelligen lässt?
Beste Grüße
Anzeige
AW: nein, hab ich nicht, thread weiter offen owT
26.05.2020 13:04:53
neopa
Gruß Werner
.. , - ...
AW: Dafür nutze ich schon lange...
27.05.2020 09:08:18
Julian
Hallo Case,
danke für deinen Ansatz. Das PDFtk kann so aufgerufen werden, aber die Dateien werden mit dem Einzeiler nicht automatisch eingelesen und zusammengefügt. Oder mache ich das etwas falsch?
Gibt es eine Möglichkeit, dass grundsätzlich alle Dateien, die sich in einem Ordner befinden, ausgewählt werden, ohne dass man jede Datei einzeln im Skript einfügen muss?
Ist vielleicht eine Anfängerfrage, aber ich weiß es leider nicht besser.
Vielen Dank.
Anzeige
Also in meinem Beispiel...
27.05.2020 11:22:50
Case
Hallo Julian, :-)
... werden alle PDF-Dateien "*.pdf" die im Ordner "C:\Temp\AllePDF\" sind zu einer PDF-Datei "Alle.pdf" in "C:\Temp\" zusammengefügt. Ist natürlich getestet. ;-)
Servus
Case

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige