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

Forumthread: Zellenformatierung in E-Mail Body übernehmen

Zellenformatierung in E-Mail Body übernehmen
20.03.2019 12:04:13
Harald
Hallo!
Ich hoffe jemand kann mir bei folgendem Problem helfen...
Durch ein Excel-Makro soll ein E-mail via Outlook versendet werden.
Im Body des E-Mails sollen die Zellinhalte inklusive Formatierung übernommen werden.
Wie kann die Formatierung aus Excel ins Outlook übernommen werden?
Wenn also eine Excel-Zelle fett ist, dann soll dieser Wert auch im E-Mail fett eingetragen werden.
Leider konnte ich im Forum keine Lösung für oben genanntes Problem finden.
Vielen Dank im Voraus!
LG
Harald
Hier noch das Makro (vereinfacht dargestellt):
Sub Email_test()
Dim OutApp As Object
Dim OutMail As Object
Dim cell As Range
Dim OutlookOpened As Boolean
OutlookOpened = False
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
If OutApp Is Nothing Then
Set OutApp = CreateObject("Outlook.Application")
OutlookOpened = True
End If
On Error GoTo 0
For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
If cell.Value Like "?*@?*.?*" Then
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = Cells(cell.Row, "B").Value
.Subject = "Bla Bla Bla"
.htmlbody = "Sehr geehrte Damen und Herren," & "

" & _ "Ihr Ergebnis lautet " & Cells(cell.Row, "A").Value & "

" .display End With On Error GoTo 0 Set OutMail = Nothing End If Next cell If OutlookOpened Then OutApp.Quit Set OutApp = Nothing End Sub


Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Zellenformatierung in E-Mail Body übernehmen
20.03.2019 12:23:04
{Boris}
Hi,
das hatte wir gerade erst in einem anderen Thread.
Füge diese Funktion in ein allgemeines Modul ein.
Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2016
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
Und in Deinen Codzeilen lautet es dann:
.htmlbody = "Sehr geehrte Damen und Herren," & "" & "Ihr Ergebnis lautet " & RangetoHTML(Cells(cell.Row, "A")) & """"
VG, Boris
Anzeige
AW: Zellenformatierung in E-Mail Body übernehmen
20.03.2019 19:28:26
Harald
Hallo Boris!
Vielen Dank für deine rasche Hilfe!
Auf so eine Lösung wäre ich nie im Leben gekommen.
VG
Harald
AW: Zellenformatierung in E-Mail Body übernehmen
21.03.2019 12:13:53
{Boris}
Hi,
Auf so eine Lösung wäre ich nie im Leben gekommen.
Ich auch nicht - aber dafür gibt`s ja das Netz ;-) Hatte zuletzt genau die selbe Frage.
VG, Boris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zellenformatierung im E-Mail Body von Excel übernehmen


Schritt-für-Schritt-Anleitung

Um die Zellenformatierung aus Excel in den E-Mail Body zu übernehmen, kannst du ein VBA-Makro verwenden. Hier ist eine detaillierte Anleitung:

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

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Email_test()
       Dim OutApp As Object
       Dim OutMail As Object
       Dim cell As Range
       Dim OutlookOpened As Boolean
       OutlookOpened = False
       On Error Resume Next
       Set OutApp = GetObject(, "Outlook.Application")
       If OutApp Is Nothing Then
           Set OutApp = CreateObject("Outlook.Application")
           OutlookOpened = True
       End If
       On Error GoTo 0
       For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
           If cell.Value Like "?*@?*.?*" Then
               Set OutMail = OutApp.CreateItem(0)
               On Error Resume Next
               With OutMail
                   .To = Cells(cell.Row, "B").Value
                   .Subject = "Bla Bla Bla"
                   .HTMLBody = "Sehr geehrte Damen und Herren," & "<p>" & _
                   "Ihr Ergebnis lautet " & RangetoHTML(Cells(cell.Row, "A")) & "</p><p>"
                   .Display
               End With
               On Error GoTo 0
               Set OutMail = Nothing
           End If
       Next cell
       If OutlookOpened Then OutApp.Quit
       Set OutApp = Nothing
    End Sub
  4. Füge die RangetoHTML-Funktion hinzu, um die Formatierung zu übernehmen:

    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
       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
       TempWB.Close savechanges:=False
       Kill TempFile
       Set ts = Nothing
       Set fso = Nothing
       Set TempWB = Nothing
    End Function
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Führe das Makro aus, um E-Mails mit formatierten Inhalten zu versenden.


Häufige Fehler und Lösungen

  • Outlook öffnet sich nicht: Stelle sicher, dass Outlook installiert und korrekt konfiguriert ist. Überprüfe auch, ob du die Berechtigung hast, E-Mails zu senden.

  • Zellenformatierung wird nicht übernommen: Achte darauf, dass in der Zelle tatsächlich eine Formatierung vorhanden ist. Der Code RangetoHTML muss korrekt im Makro integriert sein.

  • Fehlermeldung beim Senden: Überprüfe die E-Mail-Adressen in der Spalte B. Diese müssen im korrekten Format sein.


Alternative Methoden

Eine andere Möglichkeit, die Zellenformatierung in den E-Mail Body zu übernehmen, besteht darin, die Inhalte manuell zu kopieren und in den E-Mail-Body einzufügen. Dies ist allerdings nicht so effizient wie ein VBA-Makro.


Praktische Beispiele

Angenommen, du hast in Spalte A die Ergebnisse und in Spalte B die E-Mail-Adressen. Wenn eine Zelle in Spalte A fett formatiert ist, wird diese Formatierung auch im E-Mail Body übernommen, wenn du das Makro ausführst.


Tipps für Profis

  • Kombiniere VBA mit anderen Excel-Funktionen: Du kannst den Code erweitern, um noch mehr Informationen aus Excel in den E-Mail Body zu integrieren.

  • Teste das Makro mit einer kleinen Anzahl von E-Mails, bevor du es für große Verteilerlisten verwendest, um sicherzustellen, dass alles korrekt funktioniert.

  • Nutze Variablen, um den E-Mail Betreff dynamisch zu gestalten, basierend auf den Inhalten deiner Excel-Datei.


FAQ: Häufige Fragen

1. Wie kann ich die E-Mail-Adressen in einer bestimmten Liste filtern?
Du kannst eine Filterung in Excel anwenden und dann das Makro nur auf die gefilterten Zellen anwenden.

2. Funktioniert das Makro in allen Excel-Versionen?
Der bereitgestellte Code funktioniert in den meisten Excel-Versionen, von Excel 2000 bis 2016. Stelle jedoch sicher, dass du die entsprechende Outlook-Version hast.

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