Live-Forum - Die aktuellen Beiträge
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
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
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
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