Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabelle in eMail kopieren mit Formatierung via VBA

Tabelle in eMail kopieren mit Formatierung via VBA
26.04.2014 17:47:59
Sebastian
Hallo Leute,
ich habe eine Tabelle, die ich filtern lasse und dann eine bestimmte Mail per eMail versenden möchte.
Ich möchte die Tabelle jedoch in der selben Formatierung via eMail einbinden, wie sie auch in Excel ist, das gelingt mir aktuell jedoch noch nicht.
Es wird wohl an den Eigenschaften von xlpaste liegen, allerdings kriege ich es nicht hin :(
Hier ist mein Code:
Private Sub CommandButton2_Click()
Dim eMail As Variant
eMail = Sheets("Tabelle1").Cells(2, 10)
Dim rng As Range
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Set rng = Nothing
On Error Resume Next 'Only the visible cells in the selection
Set rng = Sheets("Tabelle1").Range("B4:N500").SpecialCells(xlCellTypeVisible) 'Hier den  _
Bereich der gesamten Tabelle angeben
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Die Auswahl ist kein Bereich oder das Tabellenblatt ist geschützt.", vbOKOnly
Exit Sub
End If
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)
On Error Resume Next
With OutMail
.To = eMail
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.HTMLBody = RangetoHTML(rng)
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub 

Der Code der Function:
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"
'Copy the range and create a new workbook to past the data in
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
'Publish the sheet to a htm file
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
'Read all data from the htm file into RangetoHTML
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=")
'Close TempWB
TempWB.Close savechanges:=False
'Delete the htm file we used in this function
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle in eMail kopieren mit Formatierung via VBA
27.04.2014 03:36:17
fcs
Hallo Sebastian,
ich hab deine Makros bei mir unter MS Office Professional Plus 2010 getestet.
Das Ergebnis sieht eigentlich OK aus. Bei Zahlen sollten die Zellen ggf. nicht als Standard formatiert sein sondern mit einem passen Zahlenformat, da sich sonst die Nachkommastellen in der Darstellung unterscheiden können.
Bild Excel
Userbild
Bild Outlook
Userbild
Ich hab hier mit einem Tabellenobjekt gearbeitet, um auf die Schnelle ein paar Formatierungen zu zaubern. Allerdings ansonsten keine "Schnickschnack" (Grafiken, bedingte Formatierungen) in den kopierten Zellen gehabt.
Die verwendeten xlPaste-Optionen sollten eigentlich unter Excel 365 kein Problem sein.
Was ggf. nicht funktioniert sind bedingte Formatierungen
Was funktioniert bei dir denn nicht, wo scheitert es. Gibt es Fehlermeldungen?
Gruß
Franz

Anzeige
AW: Tabelle in eMail kopieren mit Formatierung via VBA
27.04.2014 10:46:53
Raphael_H
Hallo Sebastian,
kann es sein, dass sich dir Formatierung ändert weil es schlussendlich zu breit ist. Sprich in Outlook werden die Spalten verschmälert, damit sie ins Formular passen und somit ist auch deine Formatierung weg.
Schau die mal diesen Beitrag an. Könnte das Selbe Problem sein
https://www.herber.de/forum/archiv/1352to1356/t1355767.htm
Gruess
Raphael

Anzeige
AW: Tabelle in eMail kopieren mit Formatierung via VBA
27.04.2014 10:46:56
Raphael_H
Hallo Sebastian,
kann es sein, dass sich dir Formatierung ändert weil es schlussendlich zu breit ist. Sprich in Outlook werden die Spalten verschmälert, damit sie ins Formular passen und somit ist auch deine Formatierung weg.
Schau die mal diesen Beitrag an. Könnte das Selbe Problem sein
https://www.herber.de/forum/archiv/1352to1356/t1355767.htm
Gruess
Raphael
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Tabelle in eMail kopieren mit Formatierung via VBA


Schritt-für-Schritt-Anleitung

Um eine Excel-Tabelle in den E-Mail-Body einzufügen, ohne die Formatierung zu verlieren, kannst Du den folgenden VBA-Code verwenden. Dieser Code ermöglicht es Dir, die Tabelle zu kopieren und in Outlook einzufügen.

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Modul erstellen: Klicke auf Einfügen > Modul.
  3. Code einfügen: Füge den folgenden Code in das Modul ein:
Private Sub CommandButton2_Click()
    Dim eMail As Variant
    eMail = Sheets("Tabelle1").Cells(2, 10)
    Dim rng As Range
    Dim OutApp As Outlook.Application
    Dim OutMail As Outlook.MailItem
    Set rng = Nothing
    On Error Resume Next
    Set rng = Sheets("Tabelle1").Range("B4:N500").SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    If rng Is Nothing Then
        MsgBox "Die Auswahl ist kein Bereich oder das Tabellenblatt ist geschützt.", vbOKOnly
        Exit Sub
    End If
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(olMailItem)
    On Error Resume Next
    With OutMail
        .To = eMail
        .CC = ""
        .BCC = ""
        .Subject = "This is the Subject line"
        .HTMLBody = RangetoHTML(rng)
        .Display
    End With
    On Error GoTo 0
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

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
  1. Makro ausführen: Gehe zurück zu Excel und führe das Makro aus, um die Tabelle in eine Outlook-E-Mail einzufügen.

Häufige Fehler und Lösungen

  • Fehlermeldung beim Kopieren: Wenn Du die Fehlermeldung "Die Auswahl ist kein Bereich oder das Tabellenblatt ist geschützt." erhältst, überprüfe, ob der ausgewählte Bereich sichtbar ist und das Tabellenblatt nicht geschützt ist.

  • Formatierungsprobleme in Outlook: Wenn die Formatierung in Outlook anders aussieht, könnte es an den Spaltenbreiten liegen. Stelle sicher, dass die Breite der Spalten im Excel-Dokument nicht zu groß ist.

  • Keine Daten in der E-Mail: Überprüfe, ob die Zellen im angegebenen Bereich tatsächlich Daten enthalten. Wenn der Bereich leer ist, wird auch nichts in die E-Mail eingefügt.


Alternative Methoden

Wenn Du die Tabelle nicht über VBA kopieren möchtest, kannst Du auch manuell vorgehen:

  1. Tabelle kopieren: Markiere den gewünschten Bereich in Excel und kopiere ihn (STRG + C).
  2. E-Mail erstellen: Öffne Outlook, erstelle eine neue E-Mail.
  3. Tabelle einfügen: Füge die Tabelle direkt in den E-Mail-Body ein (STRG + V). Achte darauf, dass Du die Formatierung beibehältst, indem Du die Option "Formatierung beibehalten" wählst.

Praktische Beispiele

  • E-Mail an mehrere Empfänger: Du kannst die .To, .CC und .BCC Felder im VBA-Code entsprechend anpassen, um mehrere Empfänger hinzuzufügen.

  • Betreff anpassen: Ändere die Zeile .Subject = "This is the Subject line" im Code, um den Betreff Deiner E-Mail anzupassen.

  • Dynamische Daten: Verwende Funktionen wie VLOOKUP oder INDEX in Excel, um dynamisch Daten zu ziehen, die in der E-Mail angezeigt werden sollen.


Tipps für Profis

  • Bedingte Formatierungen: Achte darauf, dass komplexe bedingte Formatierungen möglicherweise nicht korrekt übertragen werden. Vereinfachte Formatierungen funktionieren meist besser.

  • Testen: Teste den Code zunächst mit einer kleinen Tabelle, um sicherzustellen, dass alles wie gewünscht funktioniert.

  • Outlook-Sicherheitseinstellungen: Überprüfe die Sicherheitseinstellungen von Outlook, da bestimmte Einstellungen das automatisierte Senden von E-Mails blockieren können.


FAQ: Häufige Fragen

1. Kann ich die Tabelle auf anderen E-Mail-Plattformen verwenden?
Ja, der VBA-Code funktioniert hauptsächlich mit Outlook, aber der HTML-Export könnte auch in anderen E-Mail-Clients funktionieren.

2. Was ist der Unterschied zwischen .Display und .Send im VBA-Code?
.Display öffnet die E-Mail zur Überprüfung, während .Send die E-Mail sofort sendet.

3. Welche Excel-Versionen unterstützen diesen Code?
Der Code wurde erfolgreich mit Excel 2010 und Excel 365 getestet. Achte darauf, dass VBA in Deiner Excel-Version aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige