Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
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

PDFs zusammenführen

PDFs zusammenführen
27.07.2022 10:50:10
Nadine
Hallo zusammen,
ich hoffe ihr könnt mir helfen.
Ich füge mit folgendem Code mehrere PDFs aus einem Ordner zusammen:

Sub PDF_Merge()
Dim strPfad As String
Dim strPfadZ As String
Dim strGS As String
Dim strPDF As String
Dim strDatname As String
Dim strCommand As String
Dim t As Variant
'Pfad für Ghostscript - ggf. anpassen
strGS = "C:\Program Files (x86)\gs\gs9.14\bin\gswin32c.exe"
'Verzeichnis auswählen, in dem die PDFs stehen, die zusammengefügt werden sollen
strPfad = "C:\PDFTest\Zeichnungen\"
'PDF-Dateien aus Verzeichnis einlesen
strDatname = Dir(strPfad & "*.pdf")
'Schleife zum einlesen aller entsprechenden Dateien
Do While Len(strDatname)
'Dateiname eintragen:
'Prüfen, ob Leerzeichen im Dateinamen existiert
If InStr(strDatname, " ") Then
'falls ja, muss der Dateiname in Anführungszeichen gesetzt werden
strPDF = strPDF & " """ & strPfad & strDatname & """"
Else
'falls nein, reicht die einfache Übername des eingelesenen Namens
strPDF = strPDF & " " & strPfad & strDatname
End If
strDatname = Dir
strPfadZ = "C:\PDFTest\"
Loop
'für Ghostscript den Befehl erstellen
strCommand = strGS & " -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=" & strPfadZ & "Merge.pdf -dBATCH" & strPDF
'Ghostscript-Befehl ausführen
t = Shell(strCommand, 0)
End Sub
Das funktioniert. Im Anschluss möchte ich den Ordner mit den einzelnen PDFs löschen, das mache ich mit:

Sub löschen()
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder ("C:\PDFTest\Zeichnungen")
Set objFSO = Nothing
MsgBox "Fertig"
End Sub
Das funktioniert auch.
Wenn ich nun den zweiten Code am Ende des ersten aufrufe (Call löschen), bekomme ich den Laufzeitfehler 70: Zugriff verweigert.
Im Einzelschrittmodus funktioniert es.
Hat jemand eine Idee warum dieser Fehler kommt?

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDFs zusammenführen
27.07.2022 11:04:28
Nepumuk
Hallo Nadine,
teste mal so:

Option Explicit
Private Declare PtrSafe Function OpenProcess Lib "kernel32.dll" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As LongPtr
Private Declare PtrSafe Function CloseHandle Lib "kernel32.dll" ( _
ByVal hObject As LongPtr) As Long
Private Declare PtrSafe Function WaitForSingleObject Lib "kernel32.dll" ( _
ByVal hHandle As LongPtr, _
ByVal dwMilliseconds As Long) As Long
Private Const PROCESS_QUERY_INFORMATION As Long = &H400
Private Const SYNCHRONIZE As Long = &H100000
Private Const INFINITE As Long = &HFFFFFFFF
Sub PDF_Merge()
Dim strPfad As String
Dim strPfadZ As String
Dim strGS As String
Dim strPDF As String
Dim strDatname As String
Dim strCommand As String
Dim lngTaskID As Long
Dim lngptrProcID As LongPtr
'Pfad für Ghostscript - ggf. anpassen
strGS = "C:\Program Files (x86)\gs\gs9.14\bin\gswin32c.exe"
'Verzeichnis auswählen, in dem die PDFs stehen, die zusammengefügt werden sollen
strPfad = "C:\PDFTest\Zeichnungen\"
'PDF-Dateien aus Verzeichnis einlesen
strDatname = Dir(strPfad & "*.pdf")
'Schleife zum einlesen aller entsprechenden Dateien
Do While Len(strDatname)
'Dateiname eintragen:
'Prüfen, ob Leerzeichen im Dateinamen existiert
If InStr(strDatname, " ") Then
'falls ja, muss der Dateiname in Anführungszeichen gesetzt werden
strPDF = strPDF & " """ & strPfad & strDatname & """"
Else
'falls nein, reicht die einfache Übername des eingelesenen Namens
strPDF = strPDF & " " & strPfad & strDatname
End If
strDatname = Dir
strPfadZ = "C:\PDFTest\"
Loop
'für Ghostscript den Befehl erstellen
strCommand = strGS & " -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=" & strPfadZ & "Merge.pdf -dBATCH" & strPDF
'Ghostscript-Befehl ausführen
lngTaskID = Shell(strCommand, 0)
lngptrProcID = OpenProcess(SYNCHRONIZE + PROCESS_QUERY_INFORMATION, 0&, lngTaskID)
Call WaitForSingleObject(lngptrProcID, INFINITE)
Call CloseHandle(lngptrProcID)
Call löschen
End Sub
Sub löschen()
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder ("C:\PDFTest\Zeichnungen")
Set objFSO = Nothing
MsgBox "Fertig"
End Sub
Gruß
Nepumuk
Anzeige
AW: PDFs zusammenführen
27.07.2022 12:15:00
Nadine
Hallo Nepumuk,
so gehts, danke!
Was auch immer da jetzt passiert... :-D
AW: PDFs zusammenführen
29.07.2022 10:39:37
Nadine
Hallo,
vielleicht kannst du nochmal helfen.
Wenn das Verzeichnis, in dem die zusammengeführte Datei gespeichert werden soll, ein Leerzeichen enthält, z.B.

strPfadZ = "C:\PDF Test\"
funktioniert der Code leider nicht.
Es kommt keine Fehlermeldung, der Code läuft durch, aber es wird keine PDF erzeugt.
Gruß,
Nadine
AW: PDFs zusammenführen
29.07.2022 10:46:23
Nepumuk
Hallo Nadine,
versuch es mal so:

strPfadZ = "'C:\PDF Test\'"
Gruß
Nepumuk
Anzeige
AW: PDFs zusammenführen
29.07.2022 11:01:32
Nadine
Leider keine Veränderung. :-/
AW: PDFs zusammenführen
29.07.2022 11:06:11
Nepumuk
Hallo Nadine,
dann versuch es mal so:

strPfadZ = """C:\PDF Test\"""
Gruß
Nepumuk
AW: PDFs zusammenführen
29.07.2022 11:10:34
Nadine
Auch nicht. Bei diesen beiden Varianten funktioniert es auch bei Verzeichnissen ohne Leerzeichen nicht mehr.
AW: PDFs zusammenführen
29.07.2022 11:14:13
Nepumuk
Hallo Nadine,
dann habe ich keine weitere Idee.
Gruß
Nepumuk
AW: PDFs zusammenführen
27.07.2022 11:11:36
Zwenn
Hallo Nadine,
Fehler, die im Einzelschritt Modus nicht auftreten, deuten häufig auf ein Zeitproblem hin. Ein solches nehme ich auch hier an. Am Ende des ersten Makros führt GS die Erstellung des PDF durch. Wenn während dessen bereits versucht wird auf die Ressourcen zuzugreifen (löschen), funktioniert das nicht, weil diese noch geöffnet sind. Du musst also eine Pause einlegen und dann erst das zweite Makro aufrufen.
Allerdings würde ich das nicht machen!
Geht etwas schief, bei der Erstellung durch GS, sind die Ausgangsdaten weg. Also immer erst prüfen, ob alles so funktioniert hat wie erwartet, und erst danach die dann überflüssigen Daten löschen.
Viele Grüße,
Zwenn
Anzeige
AW: PDFs zusammenführen
27.07.2022 12:19:26
Nadine
Hallo Zwenn,
danke für die Info.
der Gesamtablauf umfasst noch etwas mehr. Ich kopiere erst die Originaldateien, die ich benötige aus einem Ordner, füge sie dann zusammen und lösche den Ordner wieder. Also werden die Ausgangsdaten nicht gänzlich gelöscht falls etwas schief geht. ;-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige