Hallo zusammen,
eine ähnliche Anfrage gab es da schon mal 2015 unter
https://www.access-o-mania.de/forum/index.php?topic=20546.msg115134#msg115134
Das hilft mir aber leider nicht weiter.
Ich erzeuge für einzelne Vorgesetzte Einzeldateien in Excel und füge sie als Anlage der Email hinzu.
Nun kommt die Frage auf, ob der Inhalt der Anlage direkt in den Mailbody eingefügt werden kann, damit nicht erst die Anlage geöffnet werden muss.
Ich verstehe das so, dass der Inhalt des Recordsets "xlRs" nach .body übertragen werden soll, weiß aber leider nicht wie das im Code formuliert wird.
Besten Dank für eure Hilfe!
Jochen
Sub export_Click()
' deactivate warning message
DoCmd.SetWarnings False
' Verweis auf MS DAO x.x setzen
Dim db As DAO.Database
Dim rs As DAO.Recordset, xlRs As DAO.Recordset
Dim xlApp As Object, xlWB As Object
Dim olApp As Object, olMItem As Object
Dim DatNam As String
Dim ZielPfad As String
Dim Startrow As Integer
Dim CCManager As String
Dim filt As String
Dim TemplatePfad, AppPfad As String
ZielPfad = Application.CurrentProject.Path & "\Attachements\"
Startrow = Me.ZeileExport
filt = Me.filt
TemplatePfad = Application.CurrentProject.Path & "\_Template.xltx"
AppPfad = Application.CurrentProject.Path
Attachement2 = Me.Attachement2
Set db = CurrentDb
Set rs = db.OpenRecordset("qry_sendmail_viaVG")
If (rs.EOF And rs.BOF) Then Exit Sub
'-------------------------------------------------------------------
' übernommen von anderem Tool > SJ 2020-03
Set olApp = CreateObject("Outlook.Application")
Set xlApp = CreateObject("Excel.Application")
'-------------------------------------------------------------------
On Error Resume Next
Kill ZielPfad & "*.*"
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False ' zum Testen
rs.MoveFirst
While Not rs.EOF
Set xlRs = db.OpenRecordset("select * from qry_source_viaVG WHERE " & filt & "='" & rs(filt) & "'")
If Not (xlRs.EOF And xlRs.BOF) Then
xlRs.MoveFirst
Set xlWB = xlApp.Workbooks.Add(TemplatePfad)
xlWB.Sheets(1).Cells(2, 1).CopyFromRecordset xlRs
On Error Resume Next
xlWB.SaveAs ZielPfad & rs(filt) & ".xlsx"
xlWB.Close SaveChanges:=False
'-------------------------------------------------------------------
' übernommen von anderem Tool > SJ 2020-03
Set olMItem = olApp.CreateItem(0)
With olMItem
.To = rs("Email")
.Subject = Me.Subject & " - " & rs(filt)
.body = Me.body
.Attachments.Add ZielPfad & rs(filt) & ".xlsx" '(funktioniert so im Standard) JS
.Display ' oder .send
End With
'-------------------------------------------------------------------
End If
rs.MoveNext
Wend
MsgBox "Dateien & Mailvorlage erzeugt"
End Sub
ZitatIch verstehe das so, dass der Inhalt des Recordsets "xlRs" nach .body übertragen werden soll
Richtiger Gedanke, den ganzen Part Excel brauchst Du dann nicht.
.Body nimmt PlainText entgegen. Also müsste der Inhalt des Recordsets in einem Gesamtstring zusammengefasst werden, dieser kann dann im Stück übergeben werden.
Grundlagen - SQL ist leicht (22) - Zusammenfassen von Datensätzen (https://www.ms-office-forum.net/forum/showthread.php?t=379256)
Je nach Inhalten der Abfrage kann diese übergebene "Tabelle" unübersichtlich und schwer lesbar sein.
Dann darf man über .HTMLBody nachdenken, womit eine HTML-Darstellung möglich ist, der Inhalt der Abfrage selbstredend dann in HTML-Text gewandelt werden muss.
Hallo Eberhard,
besten Dank für deine schnelle Rückmeldung.
Der Tabelleninhalt hat meistens nur 2-3 Zeilen, somit würde ich das mal probieren (erst mal ohne html body).
Trotzdem fehlt mir die Info, was ich anstatt in den .body einfügen kann, um die Daten des einzelnen recordsets zu übergeben, also
anstatt z.B.: xlWB.Sheets(1).Cells(2, 1).CopyFromRecordset xlRs
bräuchte ich die Info, was ich im body definiere, damit das xlRs darin übergeben wird.
Vielen Dank nochmal
Jochen
Hallo Jochen,
Hab ich im Netz gefunden
Dim rs_query as Recordset
Set rs_query = CurrentDb.OpenRecordset("SELECT * FROM TABLEDAT;")
Open "C:\NewtextFile.txt" For Output As #1
Do While Not rs_query.EOF
Print #1, rs_query!FieldA & Chr(9) & rs_query!FieldB & Chr(9) & rs_query!FieldC
rs_query.movenext
loop
Close #1ZitatThen use this as the body of your eMail.
Statt des Textfiles sollte aber auch ein direkt erzeugter String den gleichen
Effekt haben.
gruss ekkehard
Zusammensetzen der Einzelinformationen einer Abfrage mit einer der folgenden Funktionen:
Grundlagen - SQL ist leicht (22) - Zusammenfassen von Datensätzen (https://www.ms-office-forum.net/forum/showthread.php?t=379256)
.Body = "irgendwas" & vbCrLf & _
SQLListe(strSQL, vbTab, vbCrLf) & vbCrLf & _
"noch etwas"