Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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

Anzeige

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
.. , - ...
Anzeige
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

Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

PDF zusammenfügen mit Adobe Acrobat und VBA


Schritt-für-Schritt-Anleitung

Um mehrere PDF-Dateien mit Adobe Acrobat zusammenzufügen, kannst Du die folgende VBA-Anleitung nutzen. Stelle sicher, dass Du die Vollversion von Adobe Acrobat installiert hast und die erforderlichen Verweise im VBA-Editor aktiviert sind.

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11 in Excel.
    • Gehe zu Extras > Verweise und aktiviere den Verweis auf Adobe Acrobat.
  2. Füge das folgende VBA-Skript ein:

    Sub MergePDFs()
       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
       Const str_pfad = "C:\Users\Anwender\Desktop\PDF\Nachname, Vorname\Wiederholung Nachname"
       Const str_Ergebnisdatei = "PDFneu.pdf"
    
       If Right(str_pfad, 1) = "\" Then p = str_pfad Else p = str_pfad & "\"
       strDatei = Dir(p & "*.pdf")
       Do While Len(strDatei) > 0
           str_Ausgangsdateien = str_Ausgangsdateien & "," & strDatei
           strDatei = Dir()
       Loop
       If str_Ausgangsdateien = "" Then
           MsgBox "Keine Dateien gefunden"
           Exit Sub
       End If
       a = Split(Mid(str_Ausgangsdateien, 2), ",")
       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)
           Set PartDocs(i) = CreateObject("AcroExch.PDDoc")
           PartDocs(i).Open p & Trim(a(i))
           If i Then
               ni = PartDocs(i).GetNumPages()
               PartDocs(0).InsertPages(n - 1, PartDocs(i), 0, ni, True)
               n = n + ni
               PartDocs(i).Close
           Else
               n = PartDocs(0).GetNumPages()
           End If
       Next
       If Not PartDocs(0).Save(PDSaveFull, p & str_Ergebnisdatei) Then
           MsgBox "Konnte die neue Datei nicht speichern"
       End If
       MsgBox "Die Datei wurde erfolgreich erstellt: " & p & str_Ergebnisdatei
       AcroApp.Exit
       Set AcroApp = Nothing
    End Sub
  3. Passe den Pfad und Dateinamen an:

    • Ändere den str_pfad und str_Ergebnisdatei, um deinen Anforderungen gerecht zu werden.
  4. Führe das Skript aus:

    • Drücke F5, um das Skript auszuführen.

Häufige Fehler und Lösungen

  • Fehler: Keine Dateien gefunden
    Lösung: Stelle sicher, dass sich PDFs im angegebenen Ordner befinden und dass der Pfad korrekt ist.

  • Fehler: Konnte die neue Datei nicht speichern
    Lösung: Überprüfe die Schreibberechtigungen des Zielordners.

  • Fehler: Acrobat-Anwendung kann nicht gestartet werden
    Lösung: Stelle sicher, dass Adobe Acrobat korrekt installiert ist und dass der Verweis im VBA-Editor aktiviert ist.


Alternative Methoden

  1. Adobe Acrobat Pro: Du kannst auch die integrierte Funktion von Adobe Acrobat Pro verwenden, um mehrere PDFs manuell zusammenzufügen.

    • Öffne Adobe Acrobat Pro und gehe zu Datei > Erstellen > PDF aus mehreren Dateien.
    • Wähle die Dateien aus und klicke auf Zusammenfügen.
  2. PDFTK: Eine kostenlose Alternative ist PDFTK, ein Kommandozeilen-Tool, das das Zusammenfügen von PDFs erleichtert.

    • Beispielbefehl: pdftk *.pdf cat output Alle.pdf

Praktische Beispiele

  • Mit Adobe Acrobat Pro: Um 2 PDF-Dateien zusammenzufügen, öffne Adobe Acrobat Pro und ziehe die Dateien in das Programm. Wähle Datei > Zusammenfügen.
  • Mit VBA und Acrobat: Verwende die oben stehende VBA-Anleitung, um mehrere PDFs in einem bestimmten Ordner zu einer Datei zusammenzufügen.

Tipps für Profis

  • Automatisierung: Nutze VBA, um den Prozess des PDF-Zusammenfügens für mehrere Berichte zu automatisieren. Dies spart Zeit und minimiert manuelle Fehler.
  • Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung in deinem VBA-Skript, um sicherzustellen, dass Probleme schnell identifiziert und behoben werden können.
  • Dokumentation: Halte deinen Code gut dokumentiert, insbesondere wenn Du komplexe Logik verwendest, um später Anpassungen vorzunehmen.

FAQ: Häufige Fragen

1. Wie kann ich die Größe der zusammengefügten PDF-Datei reduzieren?
Verwende die Funktion „Datei komprimieren“ in Adobe Acrobat, um die Dateigröße nach dem Zusammenfügen zu reduzieren.

2. Kann ich ohne Adobe Acrobat PDF-Dateien zusammenfügen?
Ja, Du kannst kostenlose Tools wie PDFTK oder Online-Dienste nutzen, um PDFs zusammenzufügen, allerdings sind diese oft weniger leistungsfähig als Adobe Acrobat.

3. Gibt es eine Möglichkeit, mehrere PDFs gleichzeitig mit Adobe Acrobat Reader zusammenzufügen?
Adobe Acrobat Reader unterstützt das Zusammenfügen von PDFs nicht. Du benötigst die Vollversion von Adobe Acrobat.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige