Neuigkeiten:

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

Mobiles Hauptmenü

Excel Bereich ein Mailbody einfügen.

Begonnen von Carlos_C, Juli 09, 2015, 10:53:09

⏪ vorheriges - nächstes ⏩

Carlos_C

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?
Gruß,

Carlos

MaggieMay

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.
Freundliche Grüße
MaggieMay

Carlos_C

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?
Gruß,

Carlos

MaggieMay

Nein, mit HTML-Codierung kenne ich mich leider nicht aus.
Freundliche Grüße
MaggieMay

daolix

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



Carlos_C

Danke Ihr beide! Ich werde dann versuchen, die Lösung von Daolix anzuwenden und berichte Euch, wie es mir gegangen ist.
Gruß,

Carlos

Carlos_C

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


Gruß,

Carlos

daolix

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)


MaggieMay

Hallo Carlos,

wenn das alles als ein zusammenhängender String ausgegeben wird, solltest du vielleicht mal zeigen wie du den Array v() befüllst.
Freundliche Grüße
MaggieMay