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

Ist es möglich per VBA PDF-Dateien zusammenzufügen

Ist es möglich per VBA PDF-Dateien zusammenzufügen
13.05.2019 20:44:02
Sabrina
Hallo,
ich frage mich ob es möglich ist via VBA bestimmte PDF Dateien innerhalb eines Ordners zu einer PDF Datei zusammen zufügen?
Ich habe einen Ordner Bestellungen, in dem sind nach Datum die einzelnen Dateien drinnen (im Vormat Monat-Tag) … z.Bsp.
05-11 – Datei 1
05-11 – Datei 2
05-11 – Datei 3
05-12 – Datei 1
datum = Range("G3")
Tag = Format(datum, "mm-dd")
Liebe Grüße
Sabbel

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
13.05.2019 21:38:27
Sabrina
Hallo, ich habe das versucht. Aber bei mir kommt immer ein Laufzeitfehler.
Funktioniert das nicht mit dem "Microsoft print to PDF" ?
https://www.herber.de/bbs/user/129750.xlsm
Liebe Grüße Sabbel
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
13.05.2019 21:43:25
onur
Dort steht doch explicit "PDF-Creator"- oder?
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
13.05.2019 21:49:16
Sabrina
Huhu .. wo steht explicit "PDF-Creator"
Ich habe es wie in dem Link von cysu11 gemacht und den ghostscript 64 installiert.
Aber es kommt immer Laufzeitfehler 74
Hat jemand eine Idee?
Anzeige
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
13.05.2019 21:53:54
onur
Stimmt, wird nur erwähnt. :(
Aber wieso machst du es denn nicht damit?
ist am einfachsten und für lau.
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
13.05.2019 21:59:55
Tobias
Weil ich nicht weiß wie es geht :(
Kannst du mir dabei helfen?
LG
Sabbel
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
13.05.2019 22:08:05
onur
Einfach downloaden, und als Drucker auswählen.
Alles was du darüber ausdruckst wird zwischengespeichert und auf Wunsch zusammengefügt.
Probiere mal.
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
13.05.2019 22:13:09
Sabriba
Hi Onur,
ist es denn möglich das mit dem PDF Drucker die Dateien per Makro zu einer Datei zusammen geführt werden?
LG
Sabbel
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
13.05.2019 22:20:43
onur
Glaube ich nicht.
Du könntest sie per Makro "ausdrucken" und am Ende manuell zusammenfügen lassen.
Soweit ich weiss, kann man nachher auch per Komandozeile zusammenfügen lassen.
Siehe hier:
https://docs.pdfforge.org/pdfcreator/latest/de/pdfcreator/using-pdfcreator/command-line-parameters/
Anzeige
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
14.05.2019 08:03:57
Martin
Hallo Sabrina,
suche im Archiv mal nach PDFTK, damit setze ich meine PDF-Dateien beliebig per Kommandozeile zusammen. Auch PDFTK ist kostenlos und ideal für deinen Anwendungszweck geeignet. Wenn ich es richtig in Erinnerung habe, muss PDTK noch nicht einmal installiert werden.
Viele Grüße
Martin
Ja - das geht mit dem...
14.05.2019 08:10:00
Case
Hallo, :-)
... "PDFtk Server". ;-)
Deutsche Hilfe und Beispiele...
Programm...
Damit kannst du dann PDF-Dateien per "Shell" bearbeiten (Suchmaschine deiner Wahl bringt Beispiele). ;-)
Leerzeichen in Datei- bzw. Pfadnamen sind Stolperfallen und müssen "maskiert" (Suchmaschine deiner Wahl erklärt warum) werden.
Servus
Case

Anzeige
AW: Ist es möglich per VBA PDF-Dateien zusammenzufügen
14.05.2019 08:16:17
Nepumuk
Hallo Sabbel,
mit pdftk. Kannst du dir hier herunterladen:
https://www.heise.de/download/product/pdftk-pdf-toolkit-44226
hier ein Beispiel wie du das mit VBA machen kannst:
Public Sub Test()
    Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
        "G:\Dokument1.pdf G:\Dokument2.pdf G:\Dokument3.pdf " & _
        "G:\Dokument4.pdf cat output G:\Dokument5.pdf", WindowStyle:=vbHide)
End Sub

Gruß
Nepumuk
Anzeige
Zusammenfügen geht iA .. .Dateien in Ordner finden
14.05.2019 19:22:26
Sabrina
Hallo Leute, Hallo Nepumuk,
vielen Dank für eure Hilfe .. der Codeschnipsel von Nepumuk funktioniert wunderbar.
Nur die Dateien dürfen keine Leerstellen haben.
Kann mir jemand weiter helfen ... ?
Ich möchte die Dateien zusammenfügen die im Ordner „D:\Bestellungen“ liegen und mit dem Datum der Variable Tag beginnen.
Die Dateien lauten zum Beispiel :
05-11–Datei 1
05-11–Datei 2
05-11–Datei 3
05-12-Datei 1
Tag lautet „05-11“ … Also sollen die ersten drei zu einer Datei zusammengefügt werden.
Die Anzahl der Dateien für einen Tag sind aber nicht immer gleich.
Hoffe ich verlange nicht zu viel von euch
Ganz liebe Grüße
Sabbel
Anzeige
AW: Zusammenfügen geht iA .. .Dateien in Ordner finden
15.05.2019 06:48:16
Nepumuk
Hallo Sabbel,
ist das Datum tagesaktuell oder kommt das aus der Tabelle Eingabe G3?
Gruß
Nepumuk
AW: Zusammenfügen geht iA .. .Dateien in Ordner finden
15.05.2019 10:45:46
Sabrina
Hallo Nepumuk,
das Datum kommt das aus der Tabelle Eingabe G3
Liebe Grüße
Sabbel
AW: Zusammenfügen geht iA .. .Dateien in Ordner finden
15.05.2019 14:09:09
Nepumuk
Hallo Sabbel,
ich habe es dir mal in das Mailprogramm eingebaut. Du musst auf alle Fälle den Pfad zur pdftk.exe anpassen.
Option Explicit

Public Sub Mail_senden()
    
    Const FOLDER_PATH As String = "D:\Bestellungen\"
    Const JOINT_FILENAME As String = "AllePDF.pdf" 'Name des Anhangs. Anpassen !!!
    
    Dim objOutlook As Object, objMail As Object
    Dim strFolder As String, strFileName As String
    Dim strAttachments As String
    Dim avntAttachments() As Variant
    Dim ialngIndex As Long
    Dim dtmDate As Date
    
    dtmDate = Worksheets("Eingabe").Range("G3").Value
    strFolder = FOLDER_PATH & Format$(dtmDate, "yyyy") & _
        "\" & Format(dtmDate, "mmmm") & "\"
    
    strFileName = Dir$(strFolder & Format$(dtmDate, "dd-mm") & "*.pdf")
    Do Until strFileName = vbNullString
        Redim Preserve avntAttachments(ialngIndex)
        avntAttachments(ialngIndex) = Chr$(34) & strFolder & strFileName & Chr$(34)
        ialngIndex = ialngIndex + 1
        strFileName = Dir$
    Loop
    
    If ialngIndex = 0 Then
        Call MsgBox("Keine Dateien gefunden.", vbExclamation, "Hinweis")
    Else
        strAttachments = Join(avntAttachments, " ")
        Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
            strAttachments & " cat output " & FOLDER_PATH & JOINT_FILENAME, WindowStyle:=vbHide) 'Pfad anpassen !!!
        Set objOutlook = CreateObject(Class:="Outlook.Application")
        Set objMail = objOutlook.CreateItem(0)
        With objMail
            .To = "name@provider.de"
            .Subject = "Betreff"
            .Body = "Hallo" & vbLf & vbLf & "im Anhang die Dateien." & _
                vbLf & vbLf & "Gruß" & vbLf & "Sabbel"
            Call .Attachments.Add(FOLDER_PATH & JOINT_FILENAME)
            Call .Display 'Anzeigen
            ' Call .Send 'direkt senden
        End With
        Set objMail = Nothing
        Set objOutlook = Nothing
        Call Kill(PathName:=FOLDER_PATH & JOINT_FILENAME)
    End If
End Sub

Ich habe es so geschrieben dass Leerzeichen im Pfad keine Rolle spielen. Die Gesamtdatei wird im Anschluss wieder gelöscht (Kill).
Gruß
Nepumuk
Anzeige
Ooops
15.05.2019 19:34:38
Nepumuk
Hallo Sabbel,
da fehlte noch ein Sternchen:
Option Explicit

Public Sub Mail_senden()
    
    Const FOLDER_PATH As String = "D:\Bestellungen\"
    Const JOINT_FILENAME As String = "AllePDF.pdf" 'Name des Anhangs. Anpassen !!!
    
    Dim objOutlook As Object, objMail As Object
    Dim strFolder As String, strFileName As String
    Dim strAttachments As String
    Dim avntAttachments() As Variant
    Dim ialngIndex As Long
    Dim dtmDate As Date
    
    dtmDate = Worksheets("Eingabe").Range("G3").Value
    strFolder = FOLDER_PATH & Format$(dtmDate, "yyyy") & _
        "\" & Format$(dtmDate, "mmmm") & "\"
    
    strFileName = Dir$(strFolder & "*" & Format$(dtmDate, "dd-mm") & "*.pdf")
    Do Until strFileName = vbNullString
        Redim Preserve avntAttachments(ialngIndex)
        avntAttachments(ialngIndex) = Chr$(34) & strFolder & strFileName & Chr$(34)
        ialngIndex = ialngIndex + 1
        strFileName = Dir$
    Loop
    
    If ialngIndex = 0 Then
        Call MsgBox("Keine Dateien gefunden.", vbExclamation, "Hinweis")
    Else
        strAttachments = Join(avntAttachments, " ")
        Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
            strAttachments & " cat output " & FOLDER_PATH & JOINT_FILENAME, WindowStyle:=vbHide) 'Pfad anpassen !!!
        Set objOutlook = CreateObject(Class:="Outlook.Application")
        Set objMail = objOutlook.CreateItem(0)
        With objMail
            .To = "name@provider.de"
            .Subject = "Betreff"
            .Body = "Hallo" & vbLf & vbLf & "im Anhang die Dateien." & _
                vbLf & vbLf & "Gruß" & vbLf & "Sabbel"
            Call .Attachments.Add(FOLDER_PATH & JOINT_FILENAME)
            Call .Display 'Anzeigen
            ' Call .Send 'direkt senden
        End With
        Set objMail = Nothing
        Set objOutlook = Nothing
        Call Kill(PathName:=FOLDER_PATH & JOINT_FILENAME)
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Ooops
15.05.2019 23:35:30
Sabrina
Hallo Nepumuk.
Vielen Dank .. es funktioniert wunderbar. Weiß garnicht wie ich dir dafür danken kann.
Habe aber noch eine Frage.
Ich möchte das Datum im Dateinamen der Ausgabedatei einbinden. Habe es so versucht ..

Const JOINT_FILENAME As String = "Bestellung vom" & Format$(dtmDate, "dd.mm") & ".pdf"
Es funktioniert aber leider nicht. Es kommt eine Fehlermeldung
"Fehler beim Kompilieren. Konstanter Ausdruck erforderlich"
Liebe Grüße Sabbel
AW: Ooops
16.05.2019 06:04:52
Nepumuk
Hallo Sabbel,
so funktionierts:
Option Explicit

Public Sub Mail_senden()
    
    Const FOLDER_PATH As String = "H:\Bestellungen\"
    
    Dim objOutlook As Object, objMail As Object
    Dim strFolder As String, strFileName As String
    Dim strAttachments As String, strOrder As String
    Dim avntAttachments() As Variant
    Dim ialngIndex As Long
    Dim dtmDate As Date
    
    dtmDate = Worksheets("Eingabe").Range("G3").Value
    strOrder = "Bestellung vom" & Format$(dtmDate, "dd.mm") & ".pdf"
    strFolder = FOLDER_PATH & Format$(dtmDate, "yyyy") & _
        "\" & Format$(dtmDate, "mmmm") & "\"
    
    strFileName = Dir$(strFolder & "*" & Format$(dtmDate, "dd-mm") & "*.pdf")
    Do Until strFileName = vbNullString
        Redim Preserve avntAttachments(ialngIndex)
        avntAttachments(ialngIndex) = Chr$(34) & strFolder & strFileName & Chr$(34)
        ialngIndex = ialngIndex + 1
        strFileName = Dir$
    Loop
    
    If ialngIndex = 0 Then
        Call MsgBox("Keine Dateien gefunden.", vbExclamation, "Hinweis")
    Else
        strAttachments = Join(avntAttachments, " ")
        Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
            strAttachments & " cat output " & FOLDER_PATH & strOrder, WindowStyle:=vbHide) 'Pfad anpassen !!!
        Set objOutlook = CreateObject(Class:="Outlook.Application")
        Set objMail = objOutlook.CreateItem(0)
        With objMail
            .To = "name@provider.de"
            .Subject = "Betreff"
            .Body = "Hallo" & vbLf & vbLf & "im Anhang die Dateien." & _
                vbLf & vbLf & "Gruß" & vbLf & "Sabbel"
            Call .Attachments.Add(FOLDER_PATH & strOrder)
            Call .Display 'Anzeigen
            ' Call .Send 'direkt senden
        End With
        Set objMail = Nothing
        Set objOutlook = Nothing
        Call Kill(PathName:=FOLDER_PATH & strOrder)
    End If
End Sub

Gruß
Nepumuk
Anzeige
Ich bekomme es nicht hin .. es kommt ein Fehler
16.05.2019 19:03:16
Sabrina
Hallo Nepumuck,
ich bekomme es einfach nicht hin :(
Es kommt bei mir immer eine Fehlermeldung Laufzeitfehler '-2147024894
Der Courser springt dann auf die Zeile
Call .Attachments.Add(FOLDER_PATH & strOrder)
https://www.herber.de/bbs/user/129823.xlsm
Liebe Grüße Sabbel
AW: Ich bekomme es nicht hin .. es kommt ein Fehler
16.05.2019 20:05:42
Nepumuk
Hallo Sabbel,
der Punkt im Dateinamen ist das Problem. Entschuldige dass ich das nicht getestet habe.
Versuch es so:
Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
    strAttachments & " cat output " & Chr$(34) & FOLDER_PATH & _
    strOrder & Chr$(34), WindowStyle:=vbHide) 'Pfad anpassen !!!

Gruß
Nepumuk
Anzeige
Danke...so funktioniert es. Dateien aufzählen?
16.05.2019 21:06:40
Sabrina
Hallo Nepumuk .. du bist der Beste.
Habe noch eine Frage/Bitte ... dann wäre es perfekt.
Kann man in dem Emai Text die Namen der Dateien auflisten?
z.Bsp.

Die Datei enthält:
05-11 – Datei 1
05-11 – Datei 2
05-11 – Datei 3
Liebe Grüße
Sabbel
AW: Danke...so funktioniert es. Dateien aufzählen?
16.05.2019 21:46:16
Nepumuk
Hallo Sabbel,
befinden wir uns auf der Zielgeraden? :-)
Option Explicit

Public Sub Mail_senden()
    
    Const FOLDER_PATH As String = "H:\Bestellung\"
    
    Dim objOutlook As Object, objMail As Object
    Dim strFolder As String, strFileName As String, astrFiles() As String
    Dim strAttachments As String, strOrder As String
    Dim avntAttachments() As Variant
    Dim ialngIndex As Long
    Dim dtmDate As Date
    
    dtmDate = Worksheets("Eingabe").Range("G3").Value
    strOrder = "Bestellung vom " & Format$(dtmDate, "dd.mm") & ".pdf"
    strFolder = FOLDER_PATH & Format$(dtmDate, "yyyy") & _
        "\" & Format$(dtmDate, "mmmm") & "\"
    strFileName = Dir$(strFolder & "*" & Format$(dtmDate, "mm-dd") & "*.pdf")
    Do Until strFileName = vbNullString
        Redim Preserve avntAttachments(ialngIndex)
        Redim Preserve astrFiles(ialngIndex)
        avntAttachments(ialngIndex) = Chr$(34) & strFolder & strFileName & Chr$(34)
        astrFiles(ialngIndex) = strFileName
        ialngIndex = ialngIndex + 1
        strFileName = Dir$
    Loop
    
    If ialngIndex = 0 Then
        Call MsgBox("Keine Dateien gefunden.", vbExclamation, "Hinweis")
    Else
        strAttachments = Join(avntAttachments, " ")
        Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
            strAttachments & " cat output " & Chr$(34) & FOLDER_PATH & _
            strOrder & Chr$(34), WindowStyle:=vbHide) 'Pfad anpassen !!!
        Call Application.Wait(Time:=Now + TimeSerial(0, 0, 3))
        Set objOutlook = CreateObject(Class:="Outlook.Application")
        Set objMail = objOutlook.CreateItem(0)
        With objMail
            .To = "name@provider.de"
            .Subject = "Betreff"
            .Body = "Hallo" & vbLf & vbLf & "im Anhang die Datei." & vbLf & vbLf & _
                "Die Datei enthält:" & vbLf & Join(astrFiles, vbLf) & _
                vbLf & vbLf & "Gruß" & vbLf & "Sabbel"
            Call .Attachments.Add(FOLDER_PATH & strOrder)
            Call .Display 'Anzeigen
            ' Call .Send 'direkt senden
        End With
        Set objMail = Nothing
        Set objOutlook = Nothing
        Call Kill(PathName:=FOLDER_PATH & strOrder)
    End If
End Sub

Gruß
Nepumuk
Perfekt ... wunderbar .. 1A mit Sternchen
16.05.2019 22:33:47
Sabrina
Huhu Nepumuk ... das ist wunderbar.
Vielen lieben Dank
Das Ergebnis ist 1 A mit Sternchen :)
Für 2 Sternchen ... kann man die Auflistung in der MAil auch ohne ".pdf" erziehlen?
Aber nur wenn es keine Mühe macht.
Nochmal viel lieben Dank
Sabbel
AW: Perfekt ... wunderbar .. 1A mit Sternchen
17.05.2019 06:17:07
Nepumuk
Hallo Sabbel,
kein Problem. Ersetze diese Zeile:
astrFiles(ialngIndex) = strFileName

durch diese:
astrFiles(ialngIndex) = Left$(strFileName, InStrRev(strFileName, ".") - 1)

Gruß
Nepumuk
Ich bekomme es nicht hin .. es kommt ein Fehler
16.05.2019 19:55:26
Sabrina
Hallo Nepumuck,
ich bekomme es einfach nicht hin :(
Es kommt bei mir immer eine Fehlermeldung Laufzeitfehler '-2147024894
Der Courser springt dann auf die Zeile
Call .Attachments.Add(FOLDER_PATH & strOrder)
https://www.herber.de/bbs/user/129823.xlsm
Liebe Grüße Sabbel

85 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige