Range in Email Body einfügen
Schritt-für-Schritt-Anleitung
Um einen Excel-Bereich in den Body einer E-Mail einzufügen, kannst Du folgenden VBA-Code verwenden. Dieser Code erstellt eine E-Mail in Outlook und fügt den gewünschten Bereich als HTML-Tabelle in den E-Mail-Body ein.
Public Sub Email(EmailAdresse As String)
Dim bereich As Range
Sheets("Pivot_Analysis").Activate
Set bereich = Sheets("Pivot_Analysis").Range(Cells(1, 1), Cells(1, 3).End(xlDown))
Set MyOutApp = CreateObject("Outlook.Application")
Set MyMessage = MyOutApp.CreateItem(0)
With MyMessage
.To = EmailAdresse
.Subject = "PHILOS OVERDUE OPPORTUNITIES"
.HTMLBody = RangeToHtml("Pivot_Analysis", bereich.Address)
.Display
End With
Set MyOutApp = Nothing
Set MyMessage = Nothing
End Sub
Private Function RangeToHtml(ByVal pvstrWorksheetName As String, ByVal pvstrRangeAddress As String) As String
Dim objFilesytem As Object, objTextstream As Object
Dim objPublishObject As PublishObject
Dim strFilename As String, strTempText As String
strFilename = Environ$("temp") & "\" & Format(Now, "dd-mm-yy_hh-mm-ss") & ".htm"
Set objPublishObject = ThisWorkbook.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=strFilename, _
Sheet:=pvstrWorksheetName, _
Source:=pvstrRangeAddress, _
HtmlType:=xlHtmlStatic)
Call objPublishObject.Publish(Create:=True)
Set objFilesytem = CreateObject("Scripting.FileSystemObject")
Set objTextstream = objFilesytem.GetFile(strFilename).OpenAsTextStream(1, -2)
strTempText = objTextstream.ReadAll
Call objTextstream.Close
RangeToHtml = Replace(strTempText, "align=center x:publishsource=", "align=left x:publishsource=")
Set objPublishObject = Nothing
Set objTextstream = Nothing
Set objFilesytem = Nothing
Call Kill(PathName:=strFilename)
End Function
Häufige Fehler und Lösungen
Ein häufiger Fehler, den Du möglicherweise erhältst, ist: "Array lower bound must be zero." Dieser Fehler tritt auf, weil der .Body
-Parameter nur Text akzeptiert. Um einen Bereich aus mehreren Zellen in den E-Mail-Body einzufügen, musst Du die .HTMLBody
-Eigenschaft verwenden.
Lösung: Verwende die Funktion RangeToHtml
, um den Bereich in HTML zu konvertieren und ihn dann in den Body einzufügen.
Alternative Methoden
Wenn Du keine VBA-Programmierung verwenden möchtest, kannst Du auch den Bereich manuell kopieren und in die E-Mail einfügen. Hierzu:
- Markiere den gewünschten Bereich in Excel.
- Drücke
Strg + C
, um den Bereich zu kopieren.
- Öffne Outlook und erstelle eine neue E-Mail.
- Klicke in den E-Mail-Body und drücke
Strg + V
, um den Inhalt einzufügen.
Diese Methode ist zwar weniger automatisiert, funktioniert aber gut für einmalige Einsätze.
Praktische Beispiele
Hier sind einige Beispiele für die Verwendung des Codes:
-
Wenn Du eine Tabelle in den E-Mail-Body einfügen möchtest:
- Stelle sicher, dass der Bereich korrekt definiert ist, z.B.
Set bereich = Sheets("Pivot_Analysis").Range("A1:C10")
.
-
Wenn Du nur bestimmte Zellen einfügen möchtest, kannst Du den Bereich anpassen:
Set bereich = Sheets("Pivot_Analysis").Range("A1:A5")
Tipps für Profis
- Achte darauf, dass der Bereich, den Du in den E-Mail-Body einfügen möchtest, nicht zu groß ist, um Probleme mit der Darstellung in der E-Mail zu vermeiden.
- Überlege, ob Du das E-Mail-Format auf HTML einstellen möchtest, um eine bessere Formatierung zu erhalten.
- Nutze die
Kill
-Funktion, um temporäre Dateien nach dem Senden der E-Mail zu löschen und Speicherplatz zu sparen.
FAQ: Häufige Fragen
1. Frage: Kann ich auch Bilder oder Grafiken in den E-Mail-Body einfügen?
Antwort: Ja, Du kannst Bilder in den E-Mail-Body einfügen, indem Du die HTML-Tag <img>
in der HTML-Body-Eigenschaft verwendest.
2. Frage: Welche Excel-Version benötige ich für diesen VBA-Code?
Antwort: Der Code sollte in Excel ab 2010 funktionieren, da er die Outlook-Objektbibliothek nutzt, die in diesen Versionen verfügbar ist.
3. Frage: Was ist der Unterschied zwischen .Body
und .HTMLBody
?
Antwort: .Body
akzeptiert nur einfachen Text, während .HTMLBody
HTML-Inhalt erlaubt, was bedeutet, dass Du formatierte Tabellen und andere HTML-Elemente einfügen kannst.