Hallo Leute,
weißt jemand, wie man einen variablen Excel Bereich in einen Mailbody hinzufügt?
Also, mit dem folgenden Code fülle ich eine Excel Tabelle mit den Zellen einer Abfrage und danach schreibe ich eine Mail:
Private Sub BerichteMailen_Click()
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim myOutlApp As Object
Dim myMail As Object
'Excel Tabelle ausfüllen
Set db = CurrentDb
Set rs = db.OpenRecordset("Abfragename", dbOpenSnapshot)
Dim eApp As Object
Dim wbk As Object
Dim wsh As Object
Set eApp = CreateObject("Excel.Application")
With eApp.Workbooks.Open("Pfad zu XLSX Datei")
Set wsh = .Worksheets("Tabell1")
wsh.Range("b6").CopyFromRecordset rs
.Save
.Close
End With
eApp.Quit
rs.Close
Set rs = Nothing
Set db = Nothing
'Mail mit Anhang schreiben
Set myOutlApp = CreateObject("Outlook.Application")
Set myMail = myOutlApp.CreateItem(olMailItem)
With myMail
.Subject = "Testberichte"
'.HTMLBody = "<font face=arial><font size = 2>Guten Tag,<br><br>anbei die Testberichte " & "<b>"
For M = 1 To n
.Attachments.Add A(M) 'Den Array A(M) hatte ich schon definiert, aber vom Code hier rausgenommen, damitder Code hier nicht so lang ist.
Next
.Display
End With
eApp.Quit
Set myMail = Nothing
Set myOutlApp = Nothing
Else
MsgBox "Die Merkliste ist leer"
End If
End Sub
Funktioniert sehr gut. Jetzt möchte ich aber, die Excel Tabelle, die ich mit diesem Code am Anfang ausfülle, in das Mail Body einfügen. Die Excel Tabelle kann jedes Mal unterschiedlich lang (also die Zeilennummer, die Spaltennummer ist immer gleich). Der Bereich soll in B5 anfangen und un MX enden. Den Wert X kann ich (mit Hilfe vom Recordcount in der Abfrage) selber bestimmen.
Ich brauche dann in diesen Code den Befehl einfügen:
Von der Excel Tabelle, nimm den Bereich B5:MX und füge ihn in das Mail Body?
Geht das?
Hi,
eine Excel-Tabelle in den Mail-Body einzufügen halte ich für keine gute Idee, als Empfänger würde ich einen Anhang bevorzugen.
Außerdem genügt es ja wohl nicht die reinen Daten zu kopieren, sondern du musst die Tabelle in HTML codieren.
Hallo Maggie, danke für Deine Antwort! Meine Empfänger wünschen sich die Daten als Tabelle im Mail Body, deswegen möchte ich die Lösung anwenden. Hast Du einen Rat wie?
Nein, mit HTML-Codierung kenne ich mich leider nicht aus.
Hallo
mit z.B.
v() = TabelleWasWeisIch.Range("B5:M20000").Resize(x).Value
erstellest du ein zweidimensionales Array (das jetzt 12 spalten und x Zeilen gross ist) welches du dann nur noch durchlaufen musst und jedes element und Zeile mit den entsprechenden htmlcodes (tr, td) umschliesst.
Luftcode:
for i = 1 to ubound(v(), 1)
stbl = stbl & "<tr>"
for j = 1 to ubound(v(),2)
stbl = stbl & "<td>" & v(i,j) & "</td>"
next
stbl = stbl & "</tr>"
next
Danke Ihr beide! Ich werde dann versuchen, die Lösung von Daolix anzuwenden und berichte Euch, wie es mir gegangen ist.
Hallo Daolix,
ich habe Deine Lösung angewendet. Am Ende sehen im Mailkörper die ganzen Werte des Tabellenbereichs, als ob ich einfach als Text drauf geschrieben hätte, und gar nicht als Tabelle, wie ich sie gerne hätte =(, zum Beispiel so:
Nehmen wir an die Tabelle sieht so aus:
Bericht Nr. Datum Prüfer Test
1001 1.2.15 Prüfer1 Test1
1002 5.2.15 Prüfer2 Test2
Mit Deinem Code sieht dann der Mailbody so aus:
Bericht Nr.DatumPrüferTest10011.2.15Prüfer1Test110025.2.15Prüfer2Test2
Hallo
wie schon gesagt(getippt): ist Luftcode, dieser erhebt keinen Anspruch auf lauffähigkeit und Vollständigkeit
gib mal nach Zeile next
stbl = "<table>" & stbl & "</table>"
ein, dann sollte schon die Tabellenform kommen.
Ansonsten Tante Google, Onkel Bing befragen dann jibbet folgenden Code:
Private Function RangeToHtml(sWSHName As String, sRange As String) As String
Dim fs As Object
Dim stm As Object
Dim sFile As String
sFile = Environ$("temp") & "\" & Format(Now, "dd.mm.yy\_h.mm.ss") & ".htm"
ThisWorkbook.PublishObjects.Add(xlSourceRange, sFile, sWSHName, sRange, xlHtmlStatic).Publish
Set fs = CreateObject("Scripting.FileSystemObject")
Set stm = fs.GetFile(sFile).OpenAsTextStream(1, -2)
RangeToHtml = stm.ReadAll
stm.Close
Set stm = Nothing
Set fs = Nothing
Kill sFile
End Function
Aufruf ist dann
sbody = RangeToHtml( "TabelleWasWeisIch", TabelleWasWeisIch.Range("B5:M20000").Resize(x).Address)
Hallo Carlos,
wenn das alles als ein zusammenhängender String ausgegeben wird, solltest du vielleicht mal zeigen wie du den Array v() befüllst.