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

Forumthread: Range to html funktion für E-Mail mit variablen Be

Range to html funktion für E-Mail mit variablen Be
09.10.2019 11:31:12
Harald

Hallo!
Ich versuche mittels Outlook Daten aus einem Excel File zu versenden, wenn in Spalte „T“ eine E-Mail Adresse hinterlegt ist.
Um die Formatierung aus dem Excel beizubehalten verwende ich die RangeToHtml Funktion, die ich hier aus dem Forum kopiert habe.
Im E-Mail Body sollen die Inhalte von der jeweiligen Zeile in Tabellenform stehen.
Also angenommen in Spalte T, Zeile 7 steht die E-Mail Adresse aaa@aaa.aa, dann sollte im E-Mail Body des dazugehörigen E-Mails die Daten aus dem Bereich A7:S7 stehen.
Leider schaffe ich es mit meinen äußerst bescheidenen Makrokenntnissen nur, den Bereich fix zu hinterlegen - RangetoHTML(Range("A7:S7").
Bitte daher um Hilfe, wie ich den Bereich dynamisch gestalten kann, damit immer die korrekte Zeile ins E-Mail eingefügt wird.
Vielen Dank im Voraus!
Grüße
Harald
Hier das Makro:
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 paste 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

Sub Mailversand()
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("T").Cells.SpecialCells(xlCellTypeConstants)
If cell.Value Like "?*@?*.?*" Then
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = Cells(cell.Row, "T").Value
.Subject = "Datenversand"
.htmlbody = "Sehr geehrte Damen und Herren," & "

" & _ "hier die gewünschten Daten: " & _ RangetoHTML(Range("A7:S7")) & "

" & _ "Bitte um Prüfung." & "

" & _ "Vielen Dank im Voraus!" & "

" .display 'erlaubt die Prüfung des E-Mails vor dem Versand '.Send 'würde das E-Mail dann automatisch versenden End With 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: Range to html funktion für E-Mail mit variablen Be
09.10.2019 11:39:37
Torsten
Hallo Harald,
aendere diesen Teil im .HTMLBody Teil wie folgt:
alt:

RangeToHTML (Range("A7:S7"))

neu:

RangeToHTML (Range("A" & cell.Row & ":S" & cell.Row))
Gruss Torsten
AW: Range to html funktion für E-Mail mit variablen Be
09.10.2019 16:36:18
Harald
Perfekt! Vielen Dank!
Lg
Harald
Anzeige
gerne...
10.10.2019 08:23:33
Torsten
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Range to HTML Funktion für E-Mail mit variablen Bereichen in Excel


Schritt-für-Schritt-Anleitung

Um Daten aus einem Excel-Dokument per E-Mail zu versenden und dabei das Format beizubehalten, kannst Du die RangeToHTML Funktion verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du dies umsetzen kannst:

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

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (dein Dokument)" -> Einfügen -> Modul.

  3. Kopiere die folgende Funktion in das Modul:

    Function RangetoHTML(rng As Range)
       ' Deine bestehende RangetoHTML Funktion hier einfügen
    End Function
  4. Füge das folgende Sub ein, um die E-Mail zu versenden:

    Sub Mailversand()
       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("T").Cells.SpecialCells(xlCellTypeConstants)
           If cell.Value Like "?*@?*.?*" Then
               Set OutMail = OutApp.CreateItem(0)
               On Error Resume Next
               With OutMail
                   .To = Cells(cell.Row, "T").Value
                   .Subject = "Datenversand"
                   .htmlbody = "Sehr geehrte Damen und Herren," & _
                               "<p>hier die gewünschten Daten: " & _
                               RangetoHTML(Range("A" & cell.Row & ":S" & cell.Row)) & _
                               "</p><p>Bitte um Prüfung.</p><p>Vielen Dank im Voraus!</p>"
                   .display ' erlaubt die Prüfung des E-Mails vor dem Versand
                   '.Send ' würde das E-Mail dann automatisch versenden
               End With
           End If
       Next cell
       If OutlookOpened Then OutApp.Quit
       Set OutApp = Nothing
    End Sub
  5. Schließe den VBA-Editor und teste das Makro.


Häufige Fehler und Lösungen

  • Fehler: E-Mail wird nicht gesendet
    Lösung: Stelle sicher, dass Outlook korrekt installiert und konfiguriert ist. Überprüfe die E-Mail-Adresse in Spalte T.

  • Fehler: Daten werden nicht korrekt angezeigt
    Lösung: Vergewissere Dich, dass die RangeToHTML Funktion korrekt implementiert ist und die Zellbereiche richtig angegeben sind.


Alternative Methoden

Falls Du die RangeToHTML Funktion nicht verwenden möchtest, gibt es Alternativen:

  1. Export als PDF: Du kannst die Excel-Daten als PDF speichern und diese dann per E-Mail versenden.
  2. Direktes Kopieren in die E-Mail: Kopiere die Daten manuell aus Excel und füge sie in den E-Mail-Body ein. Dies funktioniert jedoch nicht immer mit der gewünschten Formatierung.

Praktische Beispiele

Hier ist ein Beispiel für die Verwendung der RangetoHTML Funktion in der Praxis:

Sub BeispielMailversand()
    ' Verwende die oben beschriebene Mailversand Funktion
End Sub

In diesem Beispiel wird die RangetoHTML Funktion genutzt, um Daten aus der aktuellen Zeile zu versenden, wenn in Spalte T eine gültige E-Mail-Adresse steht.


Tipps für Profis

  • Verwende den HTML-Body von Outlook, um die Formatierung noch weiter anzupassen. Du kannst CSS-Styles für Tabellen hinzufügen, um das Layout zu verbessern.
  • Achte darauf, die Makrosicherheit in Excel zu konfigurieren, damit Deine Skripte ohne Probleme laufen.

FAQ: Häufige Fragen

1. Was ist die RangetoHTML Funktion?
Die RangetoHTML Funktion ist eine VBA-Funktion, die einen Bereich in HTML umwandelt, sodass Du diesen in E-Mails verwenden kannst.

2. Wie kann ich sicherstellen, dass meine E-Mails korrekt formatiert sind?
Verwende die HTML-Tags und CSS in Deinem E-Mail Body, um die Formatierung zu optimieren.

3. Welche Excel-Version benötige ich für diese VBA-Lösungen?
Die beschriebenen Lösungen funktionieren in den meisten modernen Excel-Versionen, einschließlich Excel 2010, 2013, 2016 und 365.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige