Hallo zusammen,
ich habe ein Script, welches aus einer Abfrage eine (oder mehrere) Mails generiert. Dies funktioniert auch. Jetzt möchte ich gerne noch einen individuellen PDF Anhang hinzufügen. Und da scheitere ich. Das Script habe ich mir abgeschrieben und für mich angepasst - jedoch kann ich keine Code Schnipsel für den Dateianhang finden. Ich habe es versucht (siehe Script), aber ohne Erfolg.
Option Compare Database
Option Explicit
Public Sub sendMail()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim outApp As Outlook.Application
Dim outMail As Outlook.MailItem
Dim outStarted As Boolean
[b][color=red]Dim myattachments As Variant[/color][/b]
On Error Resume Next
Set outApp = GetObject("", "Outlook.Application")
[b][color=red]Set myattachments = outMail.attachments[/color][/b]
On Error GoTo 0
If outApp Is Nothing Then
Set outApp = CreateObject("Outlook.Application")
outStarted = True
End If
Dim emailTo As String
Dim emailSubject As String
Dim emailText As String
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Anrede, Nachname, Vorname, EmailAdresse, Angebotsdatum, AngebotErfolgt, Anlage " & _
" FROM qryKunde_AngeboteNachhacken")
Do Until rs.EOF
emailTo = Trim(rs.Fields("Vorname").Value & " " & rs.Fields("Nachname").Value) & _
" <" & rs.Fields("EmailAdresse").Value & "> "
emailSubject = "Angebotsnachfrage vom " & " " & rs.Fields("Angebotsdatum").Value
emailText = Trim(rs.Fields("Anrede").Value & " " & rs.Fields("Nachname").Value & ",") & vbCrLf
emailText = emailText & _
"hier steht der Text" & vbCrLf
[b][color=red] myattachments.Add Anlage [/color][/b]
Set outMail = outApp.CreateItem(olMailItem)
outMail.To = emailTo
outMail.Subject = emailSubject
outMail.Body = emailText
outMail.Send
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
If outStarted Then
outApp.Quit
End If
Set outMail = Nothing
Set outApp = Nothing
End Sub
Die Anlage habe ich über die Tabelle (Anlage) hinzugefügt, so dass jeder Datensatz eine bestimmte PDF hat. Dies habe ich ebenso in die Abfrage mit übernommen. Leider bekomme ich aber diese nicht zum versenden anbei. Die Stellen habe ich in Rot markiert, wo ich es versucht habe.
Vielen Dank Vorab
Markus
(https://ibb.co/VM5nP8C)
With outMail
.To = emailTo
.Subject = emailSubject
.Body = emailText
.Attachments.Add VollstaendigerPfadAnlage
End With
Die Anlage muss zur Verwendung als Datei im Filesystem liegen.
Hallo Eberhard,
vielen Dank für die Hilfestellung. Jedoch kann ich so nur 1 (.Attachments.Add VollstaendigerPfadAnlage) festgelegte PDF an die Kunden senden. Ich benötige jedoch für jeden Kunden eine eigene PDF.
Und wo im Code müsste ich deinen Code eingeben. Ich bin leider totaler Anfänger in VBA und habe meinen Code lediglich
abgetippt und angepasst.
Viele grüße
Markus
Der Pfad zum PDF müsste natürlich individuell wechseln für individuelle Mails.
Es stellt sich also die logische Frage (unabhängig von VBA-Kenntnissen), wo solche PDF's liegen und wie sie den Empfängern zugeordnet sind oder ob sie im Zuge der individuellen Mailerstellung erst individuell erzeugt werden und damit quasi live übernehmbar wären.
Hallo Eberhard,
es handelt sich hierbei um Angebote, welche dem Kunden bereits (durch Outlook direkt) zugesandt wurden. Diese PDF, mit eindeutigem Namen, liegen dann im speziellen Kunden Ordner. Das Script soll einfach die Möglichkeit herstellen, dass eine Erinnerung des Angebots, (mit dem bereits vorhandenem Angebot) in einem bestimmten Zeitraum erneut gesendet wird. Da dies über Outlook, Manuell, einen nicht zu Unterschätzen Aufwand bedeutet, versuche ich dies Automatisiert
über Access umzusetzen.
Vorarbeit: Nach dem senden über Outlook, wird der Kunde in Access angelegt mit verweis auf die Datei.
Danach soll Access dann automatisch die Erinnerung senden.
Viele grüße
Markus
Siehe Deine Recordseterzeugung:
Set rs = db.OpenRecordset("SELECT Anrede, Nachname, Vorname, EmailAdresse, Angebotsdatum, AngebotErfolgt, Anlage " & _
" FROM qryKunde_AngeboteNachhacken")
Wenn Anlage hier den benötigten vollständigen Pfad zur Datei enthält, dann verwendest Du einfach dieses Feld.
Hallo Eberhard,
so, habe versucht dies umzusetzen. Der Pfad liegt vor wie auf dem Bild zu sehen.
Oben habe ich noch zusätzlich:
Dim emailAtt as Variant
und dann die Einträge auf dem Bild. Hier erhalte ich die Fehlermeldung:
Screenshot 2022-02-22 094338.png
Laufzeitfehler '5'
Ungültiger Prozeduraufruf oder ungültiges Argument
Bin leider überfragt, wo ich hier was ändern muss.
Viele grüße
Markus
Das Gleichheitszeichen war zuviel eigenerbrachte Kreativität.
Mit Variablen kann man auch sparsamer sein. Diese machen erst bei Mehrfachnutzung Sinn, wenn man sich darüber Mehrfachberechnungen spart.
outMail.Attachments.Add rs.Fields("Anlage").Value
Hallo Eberhard,
das war es. Supi, vielen Dank für die Hilfe.
Viele grüße
Markus
Hallo Eberhard und Markus,
bin auf euer Thema gestoßen, was genau für mich passen würde.
Ich habe das geringfügig angepasst, komme aber leider auf einen analogen Fehler (Laufzeitfehler, die Datei kann nicht gefunden werden) wie von Markus.
Hättet ihr da noch eine Idee was ich da falsch hinterlegt habe?
Der Pfad zur jeweiligen Anlage wird eigentlich korrekt übergeben.
Besten Dank vorab.
Jochen
(http://apponyi.de/wp-content/uploads/2022/09/Laufzeitfehler-Doku.png)
Laufzeitfehler Doku.png