Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Blatt als pdf per Mail. Blatt mit anderen pdfs vereinen

Forumthread: VBA: Blatt als pdf per Mail. Blatt mit anderen pdfs vereinen

VBA: Blatt als pdf per Mail. Blatt mit anderen pdfs vereinen
23.04.2024 08:20:37
Jörg Bergmann
Hallo! Ich habe mir mit Chatgpt ein Makro erstellen lassen, welches ein Blatt speichert und dann in eine Mail packt. Nun wollte ich, dass der erstellen pdf noch Anhänge als Seiten beigefügt werden und bekomme immer eine Fehlermeldung: "Fehler beim Ausführen des Ghostscript Befehls, Ungültiger Prozeduraufruf oder ungültiges Argument"

Den Pfad habe ich korrekt angegeben: W:\Anhang WB\

Sub SUK_Rechnung_Speichern_Und_Versenden()

On Error GoTo ErrorHandler ' Fehlerbehandlung aktivieren

Dim ws As Worksheet
Dim savePath As String
Dim fileName As String
Dim outlookApp As Object
Dim outlookMail As Object
Dim emailRecipient As String
Dim emailSubject As String
Dim emailBody As String
Dim subjectCell As Range ' Variable für Betreffzeile
Dim attachmentPath As String ' Pfad zu den Anhängen
Dim command As String ' Befehlszeile für Ghostscript

' Arbeitsblatt mit den Daten
Set ws = ThisWorkbook.Sheets("SUK Rechnung")

' Pfad zum Speichern des PDFs
savePath = "W:\"

' Dateiname aus Zelle K11 auslesen
fileName = ws.Range("K11").Value

' PDF speichern
ws.ExportAsFixedFormat Type:=xlTypePDF, fileName:=savePath & "\" & fileName & ".pdf", Quality:=xlQualityStandard

' Betreffzeile auslesen
Set subjectCell = ws.Range("K12") ' Annahme: Betreff ist in Zelle K12
emailSubject = subjectCell.Value ' Wert der Betreffzeile zuweisen

' Outlook-Instanz erstellen
Set outlookApp = CreateObject("Outlook.Application")
Set outlookMail = outlookApp.CreateItem(0)

' Empfänger der E-Mail
emailRecipient = "michael.dedes@sanha.com"

' Text der E-Mail
emailBody = "Hallo Michael," & vbCrLf & _
vbCrLf & _
"anbei die Rechnungen." & vbCrLf & _
vbCrLf & _
"Viele Grüße," & vbCrLf & _
"Heike" & vbCrLf & _
"Accountant" & vbCrLf & _
"T +49 2054 925132" & vbCrLf & _
vbCrLf & _
"mailto:heike.ausderfuenten@sanha.com"

' Pfad zu den Anhängen
attachmentPath = "D:\Pfad\Zu\Deinem\Anhang\Ordner\"

' Befehlszeile für Ghostscript
command = "cmd /c gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=""" & savePath & "\" & fileName & "_with_attachments.pdf"" """ & savePath & "\" & fileName & ".pdf"" "

' Alle PDF-Dateien im Anhangordner durchlaufen und zur Befehlszeile hinzufügen
Dim attachmentFileName As String
attachmentFileName = Dir(attachmentPath & "*.pdf") ' Alle PDF-Dateien im Ordner abrufen
Do While attachmentFileName > "" ' Solange es Dateien gibt
command = command & """" & attachmentPath & attachmentFileName & """ "
attachmentFileName = Dir ' Nächste Datei abrufen
Loop

' Ghostscript-Befehl ausführen, um PDFs zu kombinieren
Shell command, vbHide

' E-Mail zusammenstellen
With outlookMail
.To = emailRecipient
.Subject = emailSubject
.Body = emailBody

' Anhang hinzufügen (die kombinierte PDF-Datei)
.Attachments.Add savePath & "\" & fileName & "_with_attachments.pdf"

.Display ' E-Mail anzeigen
End With

Exit Sub ' Bei erfolgreicher Ausführung den Fehlerhandler überspringen

ErrorHandler: ' Fehlerbehandlungsroutine
MsgBox "Fehler beim Ausführen des Ghostscript-Befehls: " & Err.Description, vbCritical
Exit Sub
End Sub
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Blatt als pdf per Mail. Blatt mit anderen pdfs vereinen
23.04.2024 09:15:25
volti
Hallo Jörg,

ein ungetestete Beispiel....

Ich habe kein gswin64. Ist es bei Dir vorhanden?

Sub Teilcode()

' Befehlszeile für Ghostscript
sCommand = "cmd /c gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=" _
& Chr$(34) & savePath & "\" & filename & "_with_attachments.pdf" & Chr$(34) _
& " " & Chr$(34) & savePath & "\" & filename & ".pdf" & Chr$(34)

' Alle PDF-Dateien im Anhangordner durchlaufen und zur Befehlszeile hinzufügen
attachmentFileName = Dir(attachmentPath & "*.pdf") ' Alle PDF-Dateien im Ordner abrufen
Do While attachmentFileName > "" ' Solange es Dateien gibt
sCommand = sCommand & " " & Chr$(34) & attachmentPath & attachmentFileName & Chr$(34)
attachmentFileName = Dir ' Nächste Datei abrufen
Loop

' Ghostscript-Befehl ausführen, um PDFs zu kombinieren
Shell sCommand, vbHide
End Sub



PS: Ich würde Command nicht als Variable verwenden, das ist ein reserviertes Wort. Nimm sCommand anstatt.
Gruß
Karl-Heinz
Anzeige
AW: VBA: Blatt als pdf per Mail. Blatt mit anderen pdfs vereinen
23.04.2024 09:24:27
Jörg Bergmann
Hallo Karl-Heinz,

danke, aber läuft auf den selben Fehler. gswin64 habe ich auch nicht. Dann ist das das Problem?!

Sub SUK_Rechnung_Speichern_Und_Versenden()

On Error GoTo ErrorHandler ' Fehlerbehandlung aktivieren

Dim ws As Worksheet
Dim savePath As String
Dim fileName As String
Dim outlookApp As Object
Dim outlookMail As Object
Dim emailRecipient As String
Dim emailSubject As String
Dim emailBody As String
Dim subjectCell As Range ' Variable für Betreffzeile
Dim attachmentPath As String ' Pfad zu den Anhängen
Dim command As String ' Befehlszeile für Ghostscript

' Arbeitsblatt mit den Daten
Set ws = ThisWorkbook.Sheets("SUK Rechnung")

' Pfad zum Speichern des PDFs
savePath = "W:\"

' Dateiname aus Zelle K11 auslesen
fileName = ws.Range("K11").Value

' PDF speichern
ws.ExportAsFixedFormat Type:=xlTypePDF, fileName:=savePath & "\" & fileName & ".pdf", Quality:=xlQualityStandard

' Betreffzeile auslesen
Set subjectCell = ws.Range("K12") ' Annahme: Betreff ist in Zelle K12
emailSubject = subjectCell.Value ' Wert der Betreffzeile zuweisen

' Outlook-Instanz erstellen
Set outlookApp = CreateObject("Outlook.Application")
Set outlookMail = outlookApp.CreateItem(0)

' Empfänger der E-Mail
emailRecipient = "michael.dedes@sanha.com"

' Text der E-Mail
emailBody = "Hallo Michael," & vbCrLf & _
vbCrLf & _
"anbei die Rechnungen." & vbCrLf & _
vbCrLf & _
"Viele Grüße," & vbCrLf & _
"Heike" & vbCrLf & _
"Accountant" & vbCrLf & _
"T +49 2054 925132" & vbCrLf & _
vbCrLf & _
"mailto:heike.ausderfuenten@sanha.com"

' Pfad zu den Anhängen
attachmentPath = "W:\Anhang WB\"

' Befehlszeile für Ghostscript
sCommand = "cmd /c gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=" _
& Chr$(34) & savePath & "\" & fileName & "_with_attachments.pdf" & Chr$(34) _
& " " & Chr$(34) & savePath & "\" & fileName & ".pdf" & Chr$(34)

' Alle PDF-Dateien im Anhangordner durchlaufen und zur Befehlszeile hinzufügen
attachmentFileName = Dir(attachmentPath & "*.pdf") ' Alle PDF-Dateien im Ordner abrufen
Do While attachmentFileName > "" ' Solange es Dateien gibt
sCommand = sCommand & " " & Chr$(34) & attachmentPath & attachmentFileName & Chr$(34)
attachmentFileName = Dir ' Nächste Datei abrufen
Loop

' Ghostscript-Befehl ausführen, um PDFs zu kombinieren
Shell sCommand, vbHide

' E-Mail zusammenstellen
With outlookMail
.To = emailRecipient
.Subject = emailSubject
.Body = emailBody

' Anhang hinzufügen (die kombinierte PDF-Datei)
.Attachments.Add savePath & "\" & fileName & "_with_attachments.pdf"

.Display ' E-Mail anzeigen
End With

Exit Sub ' Bei erfolgreicher Ausführung den Fehlerhandler überspringen
Anzeige
AW: VBA: Blatt als pdf per Mail. Blatt mit anderen pdfs vereinen
23.04.2024 09:37:48
volti
Hallo,

cmd (command) ruft mittels des angegebenen Codes aus der DOS-Ebene ein Programm auf. Hier also gswin64c.exe.
Das muss natürlich auf dem Rechner vorhanden und beim Betriebssystem angemeldet sein, um wie hier ohne Pfadangabe gefunden zu werden.

Hier ist was zum Lesen (habe ich aber auch noch nicht gelesen).
https://ghostscript.com/docs/9.54.0/Use.htm

Gruß
KH
Anzeige
AW: VBA: Blatt als pdf per Mail. Blatt mit anderen pdfs vereinen
23.04.2024 09:40:36
Jörg Bergmann
Dann ist das schon mal gelöst, danke! ;)

Für den Rest fehlt mir leider absolut das Wissen. Ich versuche lediglich die Makros etwas zu verstehen, um Anpassungen vornehmen zu können. Aber generell habe ich das nie gelernt. Die Motivation steigt, aber bis dato nutze ich nur ChatGPT und dieses tolle Forum. ;)

VG
Jörg
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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