Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Excel Bereich Recordset direkt in den Mailbody einfügen

Begonnen von jochens, Februar 06, 2023, 11:38:14

⏪ vorheriges - nächstes ⏩

jochens

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



ebs17

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

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.
Mit freundlichem Glück Auf!

Eberhard

jochens

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



Beaker s.a.

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 #1
ZitatThen use this as the body of your eMail.

Statt des Textfiles sollte aber auch ein direkt erzeugter String den gleichen
Effekt haben.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

#4
Zusammensetzen der Einzelinformationen einer Abfrage mit einer der folgenden Funktionen:
Grundlagen - SQL ist leicht (22) - Zusammenfassen von Datensätzen

.Body = "irgendwas" & vbCrLf & _
        SQLListe(strSQL, vbTab, vbCrLf) & vbCrLf & _
        "noch etwas"
Mit freundlichem Glück Auf!

Eberhard