Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mail Makro: Tabelle in html text einfügen

Mail Makro: Tabelle in html text einfügen
04.09.2019 11:47:19
Hans
Hallo,
ich habe folgendes Problem: Ich habe ein Mailmakro, das eine neue Mail öffnet und entsprechend mit Text und Empfänger usw. füttert. Ich möchte allerdings nun in den HTMLBody (siehe angehängtes makro) eine kleine Tabelle aus Excel einfügen. Und zwar soll die kleine Tabelle zwischen strText und grussformel. Geht das? Kann mir bitte jemand von euch weiterhelfen?
Danke :)
Gruß, Peter
Sub Makro_Generate_Mail()
Dim objOut As Object
Dim objMail As Object
Dim strText As String
Dim Operator As String
Dim grussformel As String
Set objOut = CreateObject("Outlook.Application")
Set objMail = objOut.CreateItem(olMailItem)
strText = Tabelle1.Shapes("Textfeld 1").TextFrame2.TextRange.Text
grussformel = Tabelle1.Shapes("Textfeld 3").TextFrame2.TextRange.Text
Operator = Range("A3").Value
With objMail
'EMail-Parameter festlegen (Betreff, Empfänger, Text)
.Subject = "123456789"
.Body = strText
.BodyFormat = 2
.HTMLBody = "Hi Heiko," & "
" & "
" & "" & "" & strText & "
" & "
" & grussformel
.To = Worksheets("Result").Range("A3").Value & "@gerhardschroeder.com"
.cc = "Angela.merkel@cdumail.com" & ";" & Worksheets("Result").Range("A3").Value & "@helmutkohl.com"
'Zeigt die EMail unabgesendet im Fenster an
.Display
'.Send (optional)
'Cursor ans Ende der EMail setzen
VBA.SendKeys "^{END}", True
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mail Makro: Tabelle in html text einfügen
04.09.2019 11:53:04
Torsten
Hallo Hans,
das geht schon. Allerdings die Frage, soll die Tabelle bearbeitbar sein in der Email oder soll es nur ein Bild (screenshot) der Tabelle sein?
Gruss Torsten
AW: Mail Makro: Tabelle in html text einfügen
04.09.2019 11:57:36
Hans
Hi Torsten,
danke für die schnelle Antwort. Eigentlich ist beides denkbar. Aber ideal wäre es, wenn die Tabelle bearbeitbar wäre (also wie wenn ich sie manuell rauskopieren würde und dann in die mail nach dem text und vor der Grußformel einfügen würde.)
danke
VG
Anzeige
AW: Mail Makro: Tabelle in html text einfügen
04.09.2019 12:46:10
Torsten
Hallo Hans oder Peter?,
Versuch mal diese Ergaenzungen:

Sub Makro_Generate_Mail()
Dim objOut As Object
Dim objMail As Object
Dim strText As String
Dim Operator As String
Dim grussformel As String
Set objOut = CreateObject("Outlook.Application")
Set objMail = objOut.CreateItem(olMailItem)
Set ClpObj = New DataObject
strText = Tabelle1.Shapes("Textfeld 1").TextFrame2.TextRange.text
grussformel = Tabelle1.Shapes("Textfeld 3").TextFrame2.TextRange.text
Operator = Range("A3").value
With objMail
'EMail-Parameter festlegen (Betreff, Empfänger, Text)
.Subject = "123456789"
.Body = strText
'.BodyFormat = 2
Range("A1:B5").Copy       'hier deinen Bereich, eventuell auch Blattname noch angeben
ClpObj.GetFromClipboard
.HTMLBody = "Hi Heiko," & ""
" & "" & "" & strText & "
" & ClpObj.GetText(1) & grussformel
'.To = Worksheets("Result").Range("A3").value & "@gerhardschroeder.com"
'.CC = "Angela.merkel@cdumail.com" & ";" & Worksheets("Result").Range("A3").value & "@ _
helmutkohl.com"
'Zeigt die EMail unabgesendet im Fenster an
.Display
'.Send (optional)
'Cursor ans Ende der EMail setzen
VBA.SendKeys "^{END}", True
Gruss Torsten
Anzeige
AW: Mail Makro: Tabelle in html text einfügen
04.09.2019 14:05:47
Hans
Hallo Torsten,
Danke, ich hab's ausprobiert. Leider krieg ich dann bei Set ClpObj = New DataObject die Fehlermeldung "Fehler beim Kompilieren - Benutzerdefinierter Typ nicht definiert".
Müsste man dafür noch eine neue Variable erstellen, wenn ja wie?
Danke für deine Hilfe.
Gruß,
Hans-Peter
Anzeige
AW: Mail Makro: Tabelle in html text einfügen
04.09.2019 14:08:23
Torsten
Oh ja sorry. hab ich vergessen mit zu kopieren.
Dim ClpObj As DataObject
Oben bei den Dimensionierungen noch ergaenzen
AW: Mail Makro: Tabelle in html text einfügen
04.09.2019 14:18:58
Hans
Ok, hab ich gemacht, jetzt kennt er bei mir nur DataObject nicht. Wie kann ich diesen "Variablentyp" denn anlegen?
AW: Mail Makro: Tabelle in html text einfügen
04.09.2019 15:03:42
Torsten
Hast du in den Refernzen alle Bibliotheken eingebunden, die noetig sind?
Erstell mal eine Userform. Dann speicher die Datei. Dann kannst du die Userform wieder loeschen. Dann sollten alle noetigen Bibliotheken drin sein.
Probiere es danach nochmal.
Anzeige
AW: Mail Makro: Tabelle in html text einfügen
04.09.2019 15:37:24
Hans
Ah super, danke, nun läuft das Makro durch. Allerdings ist es nicht das gewünschte Ergebnis. Es zeigt mir zwar in der Mail jetzt den kompletten Inhalt der Tabelle an, allerdings nicht in Tabellenform, sondern als aneinander gereihte Wörter. :/
Gibt es noch eine andere Möglichkeit?
Wäre super dankbar für deine Hilfe.
Anzeige
AW: Mail Makro: Tabelle in html text einfügen
05.09.2019 08:41:16
Torsten
Hallo Hans,
andere Moeglichkeit waere mit einer ausgelagerten Funktion, die die Range in HTML umwandelt.
Hier die Funktion, die du in ein Modul kopierst:

Function rangetoHTML(rng As Range)
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
FileName:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
rangetoHTML = ts.readall
ts.Close
rangetoHTML = Replace(rangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
TempWB.Close savechanges:=False
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function

und dein angepasster Code dazu. Musst halt Blatt und Range anpassen, die kopiert werden soll bei Set rng = ....

Sub Makro_Generate_Mail()
Dim objOut As Object
Dim objMail As Object
Dim strText As String
Dim Operator As String
Dim grussformel As String
Dim rng As Range
Set objOut = CreateObject("Outlook.Application")
Set objMail = objOut.CreateItem(olMailItem)
Set rng = Sheets("Sheet1").Range("A1:B5")
strText = Tabelle1.Shapes("Textfeld 1").TextFrame2.TextRange.text
grussformel = Tabelle1.Shapes("Textfeld 3").TextFrame2.TextRange.text
Operator = Range("A3").value
With objMail
'EMail-Parameter festlegen (Betreff, Empfänger, Text)
.Subject = "123456789"
.Body = strText
.BodyFormat = 2
.HTMLBody = "Hi Heiko," & ""
" & "" & "" & strText & "
" & rangetoHTML(rng) & grussformel
.To = Worksheets("Result").Range("A3").value & "@gerhardschroeder.com"
.CC = "Angela.merkel@cdumail.com" & ";" & Worksheets("Result").Range("A3").value & "@helmutkohl. _
com"
'Zeigt die EMail unabgesendet im Fenster an
.Display
'.Send (optional)
'Cursor ans Ende der EMail setzen
VBA.SendKeys "^{END}", True

Mit Zeilenumbruechen musst du selber sehen.
Gruss Torsten
Anzeige
AW: Mail Makro: Tabelle in html text einfügen
05.09.2019 11:13:22
Hans
Hallo Torsten,
vielen Dank dir! Hat super funktioniert :)
VG, Hans-Peter
gerne...
05.09.2019 11:23:32
Torsten
viel Spass
AW: Mail Makro: Tabelle in html text einfügen
05.09.2019 10:28:01
MCO
Guten Morgen!
Versuch mal folgendes:
Hier wird die Tabelle aus den einzelnen Feldern der Tabelle neu aufgebaut.
Leider mußte ich die Zeichen für kleinergleich und größérgleich durch das Wort ersetzen, weil sonst dieses Eingabeformular die html-Befehle sofort umsetzt und sie für dich nicht mehr sichtbar sind.
Sub Html_test_ausführen()
Dim titel As String, text As String, html_tab As String, html_kompl As String
Dim test As Boolean
test = False
titel = Now
text = "Dies ist eine automatische Nachricht aus der Fehlerstatistik- _
TabellekleinergleichbrgrößergleichFolgende Positionen sind als erwarteter WE gekennzeichnet, jedoch noch nicht eingetroffen:"
html_tab = html_tab_text(2, 4, "1;2;sehr langer Text;4", "A;B;C;D;E;F;G;H")
html_kompl = html_aufbau(titel, text, html_tab, test)
Dim MyMessage As Object, MyOutApp As Object
Set MyOutApp = CreateObject("Outlook.Application")
Set MyMessage = MyOutApp.CreateItem(0)
With MyMessage
.To = send_to
.cc = Kopie_an
.Subject = Betreff
.DeleteAfterSubmit = del_gesendet
.HTMLBody = text
End With
End Sub
Function html_aufbau(titel As String, htm_txt As String, Optional tab_text As String, Optional  _
test As Boolean)
Dim a, B, C, D, E, F, G, H
Dim kopf As String, körper As String
a = "" '"kleinergleichmeta charset=""utf-8""größergleichkleinergleichstylegrößergleichtable, _
td, th { border: 1px solid black; }kleinergleich/stylegrößergleich"
B = "kleinergleichtitlegrößergleich" & titel & "kleinergleich/titlegrößergleich" 'Titel des  _
Tabellenreiters
C = "kleinergleich h1 style='background:#BFBFBF'größergleich" & titel & "kleinergleich/h1grö _
ßergleich" 'Überschrift
D = htm_txt & "kleinergleichbrgrößergleichkleinergleichbrgrößergleichkleinergleichbrgröß _
ergleich"
kopf = "kleinergleichheadgrößergleich" & a & B & "kleinergleich/headgrößergleich"
körper = "kleinergleichbodygrößergleich" & C & D & tab_text & "kleinergleich/bodygröß _
ergleich"
html_aufbau = html_text_generieren("kleinergleichhtmlgrößergleich" & kopf & körper & " _
kleinergleich/htmlgrößergleich", test)
End Function
Function html_tab_text(z_zahl As Long, sp_zahl As Long, Ü_schr_text As String, tab_text As  _
String)
'Fügt eine Tabelle mit Inhalt in einen Text für eine email ein.
'Felder müssen Zeilenweise mit kommas getrennt sein
Dim txt_arr As Variant, Ü_schr_arr As Variant
Dim zähl As Long, zeil As Long, spalt As Long
Dim txt As String, style_tmp As String
Ü_schr_arr = Split(Ü_schr_text, ";")
txt_arr = Split(tab_text, ";")
zähl = 0
'Kopfzeile
style_tmp = "style='width:130.5pt;background:#BFBFBF;'"
For spalt = 1 To sp_zahl
txt = txt & "kleinergleichth " & style_tmp & "größergleich" & Ü_schr_arr(spalt - 1) & " _
kleinergleich/thgrößergleich"
Next
txt = "kleinergleichtrgrößergleich" & txt & "kleinergleich/trgrößergleich"
'Datenbereich
For zeil = 1 To z_zahl
txt = txt & "kleinergleichtrgrößergleich"
For spalt = 1 To sp_zahl
txt = txt & "kleinergleichtdgrößergleich" & txt_arr(zähl) & "kleinergleich/tdgröß _
ergleich"
zähl = zähl + 1
Next spalt
txt = txt & "kleinergleich/trgrößergleich"
Next zeil
html_tab_text = "kleinergleichtable border=""1""größergleich" & txt & "kleinergleich/ _
tablegrößergleich"
End Function
Ich hoffe, du kommst damit soweit klar....
Gruß, MCO
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Tabelle in HTML für Outlook E-Mails einfügen


Schritt-für-Schritt-Anleitung

Um eine Excel-Tabelle in eine E-Mail einzufügen, kannst Du ein Outlook-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf „VBAProject (DeineDatei.xlsx)“ > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Makro_Generate_Mail()
        Dim objOut As Object
        Dim objMail As Object
        Dim strText As String
        Dim grussformel As String
        Dim rng As Range
    
        Set objOut = CreateObject("Outlook.Application")
        Set objMail = objOut.CreateItem(olMailItem)
        Set rng = Sheets("Sheet1").Range("A1:B5") ' Anpassen der Range
    
        strText = Tabelle1.Shapes("Textfeld 1").TextFrame2.TextRange.Text
        grussformel = Tabelle1.Shapes("Textfeld 3").TextFrame2.TextRange.Text
    
        With objMail
            .Subject = "Dein Betreff"
            .HTMLBody = "Hi," & "<br>" & strText & "<br>" & rangetoHTML(rng) & "<br>" & grussformel
            .Display ' oder .Send, um die E-Mail direkt zu senden
        End With
    End Sub
  4. Füge die Funktion rangetoHTML hinzu, um die Excel-Tabelle in HTML umzuwandeln:

    Function rangetoHTML(rng As Range)
        ' Funktion zum Umwandeln einer Range in HTML
        Dim fso As Object
        Dim ts As Object
        Dim TempFile As String
        Dim TempWB As Workbook
    
        TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
        rng.Copy
        Set TempWB = Workbooks.Add(1)
    
        With TempWB.Sheets(1)
            .Cells(1).PasteSpecial Paste:=8
            Application.CutCopyMode = False
        End With
    
        TempWB.PublishObjects.Add(SourceType:=xlSourceRange, _
            FileName:=TempFile, _
            Sheet:=TempWB.Sheets(1).Name, _
            Source:=TempWB.Sheets(1).UsedRange.Address, _
            HtmlType:=xlHtmlStatic).Publish (True)
    
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
        rangetoHTML = ts.readall
        ts.Close
        TempWB.Close savechanges:=False
        Kill TempFile
    End Function
  5. Schließe den VBA-Editor und führe das Makro aus.


Häufige Fehler und Lösungen

  • Fehler beim Kompilieren - Benutzerdefinierter Typ nicht definiert: Stelle sicher, dass Du die richtige Bibliothek für das DataObject eingebunden hast. Gehe zu Extras > Verweise und aktiviere die Microsoft Forms 2.0 Object Library.

  • Tabelle wird als Text angezeigt: Stelle sicher, dass Du die Funktion rangetoHTML korrekt implementiert hast, um die Tabelle in HTML zu konvertieren.


Alternative Methoden

Eine Alternative zum Einfügen einer Excel-Tabelle in eine E-Mail ist das Erstellen der Tabelle direkt mit HTML-Code. Du kannst die HTML-Tags verwenden, um eine Tabelle manuell zu erstellen:

<table border="1">
    <tr>
        <th>Spalte 1</th>
        <th>Spalte 2</th>
    </tr>
    <tr>
        <td>Daten 1</td>
        <td>Daten 2</td>
    </tr>
</table>

Wenn Du diese Tabelle in Deine E-Mail integrieren möchtest, kannst Du den HTML-Code in .HTMLBody einfügen.


Praktische Beispiele

Hier ist ein Beispiel für eine einfache E-Mail, die eine Tabelle in HTML enthält:

.HTMLBody = "<h2>Meine Tabelle</h2>" & _
            "<table border='1'>" & _
            "<tr><th>Name</th><th>Alter</th></tr>" & _
            "<tr><td>Max</td><td>30</td></tr>" & _
            "<tr><td>Anna</td><td>25</td></tr>" & _
            "</table>"

Dieses Beispiel zeigt, wie Du eine HTML-Tabelle mit Daten direkt in eine E-Mail einfügen kannst.


Tipps für Profis

  • Gestalte Deine HTML-Tabelle: Nutze CSS, um das Aussehen Deiner Tabelle zu verbessern. Du kannst z.B. Hintergrundfarben, Schriftarten und Ränder anpassen.

  • Verwende mailto Links: Wenn Du E-Mail-Adressen in Deiner Tabelle hast, kannst Du sie als klickbare Links formatieren. Beispiel: <a href='mailto:beispiel@domain.com'>beispiel@domain.com</a>.

  • Testen: Teste Dein Makro gründlich, um sicherzustellen, dass alle E-Mails korrekt formatiert sind und die Tabellen richtig angezeigt werden.


FAQ: Häufige Fragen

1. Wie kann ich eine Excel-Tabelle in eine E-Mail einfügen, die bearbeitbar ist?
Verwende die im Tutorial beschriebene Methode mit der rangetoHTML-Funktion, um die Tabelle in HTML umzuwandeln. So bleibt die Formatierung erhalten.

2. Kann ich Bilder in die HTML-Tabelle einfügen?
Ja, Du kannst Bilder zu Deiner HTML-Tabelle hinzufügen, indem Du den <img>-Tag verwendest, z.B.: <td><img src='URL_zum_Bild'></td>.

3. Was mache ich, wenn die Tabelle nicht korrekt angezeigt wird?
Überprüfe den HTML-Code auf Fehler und stelle sicher, dass alle erforderlichen Tags korrekt gesetzt sind. Manchmal kann auch ein falsches HTML-Format zu Anzeigeproblemen führen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige