Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Wie via VBA-Script mehrere PDF-Dateien aus einer PDF-Datei erstellen ?

Begonnen von Tom75, Oktober 29, 2024, 12:43:27

⏪ vorheriges - nächstes ⏩

Tom75

Also DAS hat via CMD.exe geklappt.

"C:\Program Files\PDF24\pdf24-DocTool.exe" -join -profile "default/good" -outputFile "C:\Exporte\Hund gross.pdf" "C:\Exporte\Seite.pdf\Seite-0013.pdf" "C:\Exporte\Seite.pdf\Seite-0014.pdf"

Tom75

Ich bin Am verzweifeln ... irgendwwas klappt immer nicht ich gebs wohl aufweil ich nicht weiss wann wo welches Zeichen hin muss, wann ein echtes Leerzeichen, ein & oder ein & Chr(34) &, wann ein Gänsefüßchen :(

Tom75

Zitat von: PhilS am Oktober 30, 2024, 15:55:18
Zitat von: Tom75 am Oktober 30, 2024, 15:43:08... finde den Fehler nicht ...
Für den Teil den ich dir vorgegeben hatte, ist der Unterschied doch recht offensichtlich.

Aber ich habe doch gar keine Hochkommas mehr drin und stattdessen Anführungszeichen.

Tom75

Jetzt wo ich hoffe den Code richtig angepasst zu haben, wird gar keine Datei mehr erstellt.

Shell "C:\Program Files\PDF24\pdf24-DocTool.exe " & Chr(34) & "-join -profile & Chr(34) default/good" & "-outputFile C:\Exporte\" & "Hund gross.pdf" & "C:\Exporte\Seite.pdf\Seite-0013.pdf & C:\Exporte\Seite.pdf\Seite-0014.pdf"


PhilS

Zitat von: Tom75 am Oktober 30, 2024, 17:02:40Aber ich habe doch gar keine Hochkommas mehr drin und stattdessen Anführungszeichen.
Ich bezog mich da auf meinen Beitrag #27.

Zitat von: Tom75 am Oktober 30, 2024, 17:15:38Jetzt wo ich hoffe den Code richtig angepasst zu haben, wird gar keine Datei mehr erstellt.
Geh doch mal vor, wie ich in dem PS in #27 geschrieben hatte.
Dim CommandLine as String
CommandLine = "C:\Program Files\PDF24\pdf24-DocTool.exe " & Chr(34) & "-join -profile & Chr(34) default/good" & "-outputFile C:\Exporte\" & "Hund gross.pdf" & "C:\Exporte\Seite.pdf\Seite-0013.pdf & C:\Exporte\Seite.pdf\Seite-0014.pdf"
Debug.Print CommandLine
Shell CommandLine

Damit bekommst du den zusammengesetzten String im VBA Direktfenster ausgegeben (Direktfenster ggfs. mit [STRG]+[G] einblenden).
Dann vergleichst du das was dort ausgegeben ist mit der Befehlszeile, die in CMD.exe funktioniert hat.
So solltest du relativ einfach Fehler erkennen und zu einem funktionierenden Ergebnis kommen.

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

Hallo,
es könnte sinnvoll sein, den String einer Variablen zuzuweisen und die mal mit Debug.Print im Direktbereich zu prüfen. Besonders ob an der richtigen Stelle auch Leerzeichen vorhanden sind.
Das letzte & ist auch nicht richtig. Das steht im String und das kann/darf nicht sein.

Dim strTest As String
strtest = "C:\Program Files\PDF24\pdf24-............
Debug.Print strTest

Zu langsam ....  :)


Gruß Klaus

Tom75


Im Command-Fenster wird nun folgendes ausgegeben.
Das da wohl ein Leerzeichen fehlt sehe ich nun auch, aber womit bekomme ich des rein ?
Mit " " oder & Chr(32) & geht es nicht

C:\Program Files\PDF24\pdf24-DocTool.exe "-join -profile & Chr(34) default/good-outputFile C:\Exporte\Hund gross NEU.pdfC:\Exporte\Seite.pdf\Seite-0013.pdf & C:\Exporte\Seite.pdf\Seite-0014.pdf

Tom75


Tom75

Phil, könntest Du mir bitte die Zeile nicht mal so zusenden wie sie richtig wäre ?
Denn so kann ich dann nachvollziehen zumindest genau nachvollziehen an welcher Stelle genau was falsch war.
Danke dafür im Voraus.

PhilS

Zitat von: Tom75 am Oktober 30, 2024, 18:26:16Phil, könntest Du mir bitte die Zeile nicht mal so zusenden wie sie richtig wäre ?
Denn so kann ich dann nachvollziehen zumindest genau nachvollziehen an welcher Stelle genau was falsch war.
Genau das wollte ich eigentlich bewusst nicht, damit du selbst den Fehler findest und hoffentlich dabei die Zusammenhänge verstehst. - Ich muss allerdings eingestehen, dass es mir schwerfällt hier zielführende und nachvollziehbare Hinweise zu geben.

Dein aktuelles Problem ist im wesentlichen, dass du den Überblick verloren hast, wo in dem VBA-Code ein String-Literal ist und wo ausführbarer Code. - Zum besseren Verständnis empfehle ich den ersten Absatz in meinem VBA String Tutorial zu lesen.

Die Crux bei deiner aktuellen Aufgabe ist, dass die Anführungszeichen in VBA einen String begrenzen. Wenn du nun Anführungszeichen innerhalb des Strings selbst haben willst, kannst du entweder Anführungszeichen doppelt in den VBA-Code schreiben, oder du verwendest Chr(34). - Beides finde ich sehr schlecht lesbar; u.a. auch weil der VBA-Editor im Syntax-Highlighting nicht zwischen Literalen und Anweisungen unterscheidet.

Nachfolgend ein Beispiel, das beide Varianten zeigt.
Variante 1: Anführungszeichen sind innerhalb des Strings im VBA-Code verdoppelt.
Variante 2: Anführungszeichen werden durch Chr(34) erzeugt und mit dem String verkettet.
Das Ergebnis ist bei beiden Varianten am Ende dasselbe.
Public Sub BuildCommandLine()

    Dim outputFile As String
    outputFile = "C:\Exporte\Hund gross.pdf"
   
    Dim inputFile1 As String
    inputFile1 = "C:\Exporte\Seite.pdf\Seite-0013.pdf"
   
    Dim inputFile2 As String
    inputFile2 = "C:\Exporte\Seite.pdf\Seite-0014.pdf"
   
    Dim CommandLine As String
    CommandLine = """C:\Program Files\PDF24\pdf24-DocTool.exe"" -join -profile ""default/good"" -outputFile """ & outputFile & """ """ & inputFile1 & """ """ & inputFile2 & """"
    Debug.Print "Variante1: " & CommandLine

    CommandLine = Chr(34) & "C:\Program Files\PDF24\pdf24-DocTool.exe" & Chr(34) & " -join -profile " & Chr(34) & "default/good" & Chr(34) & " -outputFile " & Chr(34) & outputFile & Chr(34) & " " & Chr(34) & inputFile1 & Chr(34) & " " & Chr(34) & inputFile2 & Chr(34)
    Debug.Print "Variante2: " & CommandLine
   
    ' Shell CommandLine

End Sub




Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Tom75

Lieber Phil,

Du hast mir den Feiertag gerettet, denn mit dieser Darstellung hab ich's nun verstanden und umgesetzt bekommen ... DANKE dafür !  :)

Was ich jedoch nicht verstanden habe ist, warum beim Splitten der Ursprungsdate ein Ordner namens Seite.pdf erstellt wird. Kommt das durch die Verwendung der pdf24-DocTool.exe ?

Shell "C:\Program Files\PDF24\pdf24-DocTool.exe " & "C:\Exporte\Tiergarten.pdf" & " -splitByPage " & " -outputFile " & "C:\Exporte\Seite"

PhilS

Zitat von: Tom75 am Oktober 30, 2024, 20:22:18Was ich jedoch nicht verstanden habe ist, warum beim Splitten der Ursprungsdate ein Ordner namens Seite.pdf erstellt wird. Kommt das durch die Verwendung der pdf24-DocTool.exe ?
Das Verzeichnis wird von pdf24-DocTool.exe erstellt.
Du verwendest in der -splitByPage-Befehlszeile das Argument -outputFile obwohl hier eigentlich zwingend ein Verzeichnis und keine einzelne Datei angegeben werden muss. Evtl. ist das Grund warum ein .pdf an den Ordnernamen angehängt wird. Versuch doch stattdessen mal: -outputDir
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor