Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1940to1944
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
Pdf mit Outlook senden
08.08.2023 10:07:19
Mike
Hallo zusammen,

ich habe den nachfolgenden VBA Code erstellt und bei mir getestet. Er funktioniert bei mir wie gewünscht.

Der gleiche code führt bei meinen Kollegen zu Laufzeitfehler 1004, obwohl auch bei ihnen die Microsoft Outlook 16.0 Object Library angehackt ist. Eine Kopie des Tabellenblatts wird zwar angelegt, die nachfolgende Outlook Nachricht wird jedoch nicht geöffnet.

Sub PDF()
'PDF erstellen
Application.DisplayAlerts = False
Dim aws As String
Dim olapp As Object
ActiveSheet.Copy
ActiveSheet.Unprotect "save"
ActiveSheet.UsedRange.Copy
ActiveSheet.UsedRange.PasteSpecial Paste:=xlPasteValues
ActiveSheet.Protect "save"
ActiveWorkbook.Save
aws = ActiveWorkbook.FullName
Set olapp = CreateObject("Outlook.Application")
With olapp.CreateItem(0)
.To = "test@test.de" 'Empfänger
.HTMLBody = "Hallo " 'Body
.Subject = "Test" 'Betreff
'.ReadReceiptRequested = True 'Lesebestätigung anfordern
.Attachments.Add aws
.Display
End With
Set olapp = Nothing
Application.DisplayAlerts = True

End Sub

Woran kann das liegen?

Gruß Mike

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Pdf mit Outlook senden
08.08.2023 11:06:01
volti
Hallo Mike,

es wird hier mit "Late Binding" gearbeitet, da ist es egal, ob die entsprechende Library angehakt ist.

Außerdem müsste man wissen, wo (gelb hinterlegt) der Fehler auftritt.
Oder mal mit Einzelschritt durchgehen...
Wird z.B. in oLapp ein Wert gesetzt usw.?

Gruß
Karl-Heinz

Hier noch eine kleine Abwandlung als Anregung incl. Signatur
Sub PDF()

' PDF erstellen
Application.DisplayAlerts = False

With ActiveSheet
.Copy
.Unprotect "save"
.UsedRange.Copy
.UsedRange.PasteSpecial Paste:=xlPasteValues
.Protect "save"
End With
ActiveWorkbook.Save

With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector.Display
.To = "test@test.de" ' Empfänger
.htmlbody = "Hallo " & "
" & .htmlbody ' Body
.Subject = "Test" ' Betreff
' .ReadReceiptRequested = True 'Lesebestätigung anfordern
.Attachments.Add ActiveWorkbook.FullName
End With

Application.DisplayAlerts = True
End Sub
Anzeige
Pdf mit Outlook senden
08.08.2023 12:44:26
Mike
Hallo Karl-Heinz,

Dein code funktioniert bei mir ebenfalls. (Das automatische Einfügen der Signatur ist prima ;-) )

Bei meinen Kollegen kommt jedoch ebenfalls ein Laufzeitfehler 1004 - Zugriff auf schreibgeschützte Datei Mappe 1.xlsx nicht möglich.

Der code bleibt im Einzelschritt bei ActiveWorkbook.Save stehen.

Gruß Mike

Datei mit Outlook senden
08.08.2023 12:54:39
Rudi Maintaire
Hallo,
möglicherweise gibt es Mappe1.xlsx bei den Kollegen schon.
Gib einen Dateinamen an.
z.B
ActiveWorkbook.SaveAs Format(Now,"DD.MM.YYYY-hh:mm:ss"), xlOpenXMLWorkbook

Gruß
Rudi

PS: Was hat das mit PDF zu tun?
Anzeige
Datei mit Outlook senden
08.08.2023 13:28:52
Mike
Hallo Rudi,

bei jedem Versuch ist der Name der der erstellte Mappe eine Zahl höher (Mappe1, Mappe2, Mappe3) Dieser Fehler dürfte somit ausscheiden.

Jetzt bekomme ich den Laufzeitfehler weil der angegebene Ordner nicht vorhanden oder die Datei schreibgeschützt ist.

Sub PDF()
' PDF erstellen
Application.DisplayAlerts = False

With ActiveSheet
.Copy
.Unprotect "save"
.UsedRange.Copy
.UsedRange.PasteSpecial Paste:=xlPasteValues
.Protect "save"
End With
ActiveWorkbook.SaveAs Format(Now, "DD.MM.YYYY-hh:mm:ss"), xlOpenXMLWorkbook

With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector.Display
.To = "test@test.de" ' Empfänger
.HTMLBody = "Hallo " & "" & .HTMLBody ' Body
.Subject = "Test" ' Betreff
' .ReadReceiptRequested = True 'Lesebestätigung anfordern
.Attachments.Add ActiveWorkbook.FullName
End With

Application.DisplayAlerts = True
End Sub

Pdf als Name, weil ich ursprünglich eine Pdf erzeugen und per Mail versenden wollte.

Gruß Mike

Anzeige
Datei mit Outlook senden
08.08.2023 13:39:20
volti
Hallo,

wenn's daran liegt, dass es die Mappe schon gibt, kannst Du sie ja immer wieder lösche. Ich denke mir mal, dass die nur zum Versand benötigt wird oder?

Man könnte sie auch dann temporär ins TEMP-Verzeichnis schieben. Hier eine Variante dazu....

Sub PDF()

' PDF erstellen
Application.DisplayAlerts = False

With ActiveSheet
.Copy
.Unprotect "save"
.UsedRange.Copy
.UsedRange.PasteSpecial Paste:=xlPasteValues
.Protect "save"
End With
ActiveWorkbook.Save

With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector.Display
.To = "test@test.de" ' Empfänger
.htmlbody = "Hallo " & "
" & .htmlbody ' Body
.Subject = "Test" ' Betreff
' .ReadReceiptRequested = True 'Lesebestätigung anfordern
.Attachments.Add Environ$("TEMP") & "\" & ActiveWorkbook.Name
End With
Kill Environ$("TEMP") & "\" & ActiveWorkbook.Name
Application.DisplayAlerts = True
End Sub


Gruß
KH
Anzeige
Datei mit Outlook senden
08.08.2023 13:45:32
Rudi Maintaire
Hallo,
mit
ActiveWorkbook.Save
landet die Datei aber nicht zwangsläufig im Temp.

Gruß
Rudi
Datei mit Outlook senden
08.08.2023 14:39:10
volti
Hi Rudi,

danke für den Hinweis. Ein blöder Schnellschuss. :-(
Naja, man kann es ja auch beim Originalverzeichnis belassen und es von dort löschen.

Gruß KH
Datei mit Outlook senden
08.08.2023 13:41:59
Rudi Maintaire
Dieser Fehler dürfte somit ausscheiden.
bei mir fängt's nach jedem Excel-Start wieder mit Mappe1 an.

Dieser Ordner ist garantiert vorhanden:
ActiveWorkbook.SaveAs Thisworkpook.Path &"\" & Format(Now, "DD.MM.YYYY-hh:mm:ss"), xlOpenXMLWorkbook

Gruß
Rudi
Datei mit Outlook senden
08.08.2023 15:07:37
Mike
Hallo zusammen,

der erste nachfolgende code von Karl-Heinz läuft bei mir einwandfrei.

Sub PDF()
' PDF erstellen
Application.DisplayAlerts = False

With ActiveSheet
.Copy
.Unprotect "save"
.UsedRange.Copy
.UsedRange.PasteSpecial Paste:=xlPasteValues
.Protect "save"
End With
ActiveWorkbook.Save

With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector.Display
.To = "test@test.de" ' Empfänger
.HTMLBody = "Hallo " & "" & .HTMLBody ' Body
.Subject = "Test" ' Betreff
' .ReadReceiptRequested = True 'Lesebestätigung anfordern
.Attachments.Add ActiveWorkbook.FullName
End With

Application.DisplayAlerts = True
End Sub

Eine Kopie des Tabellenblatts wird erstellt und schreibschützt in eine E-Mail gelegt. Bei jedem Ausführen wird eine neue Mappe1, Mappe2 usw. erstellt. Ich müsste nur noch auf Senden drücken.

Bei meinen Kollegen bleibt die Prozedur jedoch bei der geöffneten geschützten Kopie der Arbeitsmappe (Mappe 1, Mappe 2 ...) stehen. Outlook wird nicht geöffnet und die Fehlermeldung angezeigt. Es muss irgendwie an den Benutzereinstellungen liegen, denn der Fehler wird bei meinem Kollegen selbst mit meinem PC erzeugt.

Alle weiteren Modifikationen führen bei mir zu dem genannten Fehler.

Gruß Mike


Anzeige
Datei mit Outlook senden
08.08.2023 16:07:43
Rudi Maintaire
kann der Kollege die Datei denn von Hand speichern?
Datei mit Outlook senden
08.08.2023 16:26:20
Mike
Ja, ohne Problem... irgendwie verhindert der Blattschutz nur das öffnen der Outlookmail...
Datei mit Outlook senden
09.08.2023 09:50:41
Mike
Hallo zusammen,

hat jemand noch eine Idee woran es liegen könnte?

Gruß Mike
Datei mit Outlook senden
09.08.2023 10:29:48
Rudi Maintaire
Hallo,
versuchs mal so:
Sub PDF()

Dim strATT As String
' PDF erstellen
Application.DisplayAlerts = False

ActiveSheet.Copy
With ActiveSheet
.Unprotect "save"
.UsedRange.Copy
.UsedRange.PasteSpecial Paste:=xlPasteValues
.Protect "save"
With .Parent
.Save
strATT = .FullName
.Close
End With
End With

With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector.Display
.To = "test@test.de" ' Empfänger
.HTMLBody = "Hallo " & "" & .HTMLBody ' Body
.Subject = "Test" ' Betreff
' .ReadReceiptRequested = True 'Lesebestätigung anfordern
.Attachments.Add strATT
End With

Application.DisplayAlerts = True
End Sub


Gruß
Rudi
Anzeige
Datei mit Outlook senden
09.08.2023 10:58:52
Mike
Hallo Rudi,

lieben Dank für die Hilfe. Das Problem ist gefunden. Es handelte sich um ein fehlendes Speicher Recht im betreffenden Laufwerk.

Trotzdem nochmals vielen Dank für die Code Variationen, ich werde diese für andere Zwecke gerne einsetzen.

Viele Grüße

Mike
das widerspricht deiner Aussage ...
09.08.2023 11:40:39
Rudi Maintaire
.... von gestern 16:26
Ja, ohne Problem... irgendwie verhindert der Blattschutz nur das öffnen der Outlookmail...

Links zu Excel-Dialogen

Anzeige

Infobox zum Thema

EXCEL - PDF mit Outlook senden


Inhaltsverzeichnis


Die Fragestellung


Du möchtest aus Excel heraus ein PDF-Dokument erstellen und dieses dann automatisch als E-Mail-Anhang über Outlook versenden.


Erläuterung des Problems {#erläuterung-des-problems}


Um ein PDF aus Excel zu erstellen und per E-Mail zu versenden, müssen mehrere Schritte durchgeführt werden: Zuerst muss das Excel-Dokument (oder ein Teil davon) als PDF gespeichert werden, und dann muss eine E-Mail über Outlook erstellt und versendet werden, wobei das PDF als Anhang hinzugefügt wird.


Lösung des Problems {#lösung-des-problems}


Das folgende VBA-Makro speichert das aktive Excel-Arbeitsblatt als PDF und sendet es dann als Anhang mit Outlook:

Sub SendPDFWithOutlook()
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim PDFPath As String
    Dim SheetToPDF As Worksheet

    ' Das Arbeitsblatt, das als PDF gespeichert werden soll
    Set SheetToPDF = ActiveSheet

    ' Speicherort und Name des PDFs
    PDFPath = Environ("USERPROFILE") & "\Desktop\" & SheetToPDF.Name & ".pdf"

    ' Speichere das aktuelle Arbeitsblatt als PDF
    SheetToPDF.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFPath, Quality:=xlQualityStandard

    ' Erstelle ein Outlook-Objekt
    Set OutlookApp = CreateObject("Outlook.Application")
    Set OutlookMail = OutlookApp.CreateItem(0)

    ' Erstelle die E-Mail
    With OutlookMail
        .To = "empfaenger@example.com" ' Setze den Empfänger
        .CC = "" ' Setze CC falls notwendig
        .BCC = "" ' Setze BCC falls notwendig
        .Subject = "Betreff der E-Mail" ' Setze den Betreff
        .Body = "Hier steht der Nachrichtentext." ' Setze den Nachrichtentext
        .Attachments.Add PDFPath ' Füge das PDF als Anhang hinzu
        .Display ' Zeige die E-Mail an oder verwende .Send, um sie direkt zu senden
    End With

    ' Aufräumen
    Set OutlookMail = Nothing
    Set OutlookApp = Nothing
End Sub

Um dieses Makro zu verwenden:

  1. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Kopiere den oben stehenden Code in das Modul.
  4. Passe die E-Mail-Details im Code an (Empfänger, Betreff, Nachrichtentext).
  5. Schließe den VBA-Editor und gehe zurück zu Excel.
  6. Führe das Makro SendPDFWithOutlook aus, indem du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.

Anwendungsbeispiele aus der Praxis


  • Berichtsversand: Automatisches Senden von wöchentlichen Berichten an ein Team oder einen Kunden.
  • Rechnungsstellung: Versenden von Rechnungen direkt nach ihrer Erstellung.

Tipps


  • Stelle sicher, dass Outlook auf deinem Computer installiert und korrekt konfiguriert ist.
  • Teste das Makro zunächst mit deiner eigenen E-Mail-Adresse, um sicherzustellen, dass alles wie erwartet funktioniert.

Verwandte Themenbereiche


  • Automatisierung von E-Mail-Versand
  • VBA-Programmierung in Excel und Outlook
  • Dokumentenmanagement und -verteilung

Zusammenfassung


Mit VBA kannst du den Prozess des PDF-Versands über Outlook automatisieren, indem du ein Makro verwendest, das dein Excel-Arbeitsblatt als PDF speichert und es dann als Anhang in einer Outlook-E-Mail einfügt. Dieses Makro kann Zeit sparen und die Effizienz bei regelmäßigen Aufgaben wie dem Versenden von Berichten oder Rechnungen erhöhen.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige