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

Forumthread: Range als E-Mail Body einfügen

Range als E-Mail Body einfügen
22.10.2021 21:11:23
Carl
Hallo Zusammen ich habe ein kleines Problem, ich versuche den Inhalt einer intelligenten Tabelle in den Body einer E-Mail einzufügen.
Mittels des gefundenen VBA Codes funzt es eigentlich auch ganz gut. Eigentlich... Es gibt nämlich ein kleines Problem. Der Code kopiert nur den Datenbereich der intelligenten Tabelle3 aus dem Tabellenblatt1. Wie bekomme ich es denn bitte hin die Tabelle inklusive der Überschriften Zeile in die Tabelle einzufügen.
Set rng = Sheets("Tabelle1").Range("Tabelle3"[#All]).SpecialCells(xlCellTypeVisibl
wirf leider die Fehlermeldung der MsgBox aus.

Sub Mail_Selection_Range_Outlook_Body()
'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm
'Don't forget to copy the

Function RangetoHTML in the module.
'Working in Excel 2000-2016
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Set rng = Nothing
On Error Resume Next
'Only the visible cells in the selection
'Set rng = Selection.SpecialCells(xlCellTypeVisible)
'You can also use a fixed range if you want
Set rng = Sheets("Tabelle1").Range("Tabelle3").SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "The selection is not a range or the sheet is protected" & _
vbNewLine & "please correct and try again.", vbOKOnly
Exit Sub
End If
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = ""
.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)
' 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
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range als E-Mail Body einfügen
23.10.2021 08:16:25
Luschi
Hallo Carl,
hier mal ein Lösungsvorschlag vom User Volti, in dem man den betreffenden Bereich der Tabelle als Bild in den EMail-Body einfügt.
siehe; https://www.office-hilfe.com/support/threads/excel-range-als-bild-in-email.54172/
(letzter Eintrag!)
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Range als E-Mail Body einfügen
23.10.2021 09:08:27
volti
Hallo zusammen,
hier noch eine Alternative, falls der Bereich/Tabelle nicht als Grafik, sondern als Tabellenbereich eingefügt werden soll, auch hier ohne das Range2HTML-Gedöns.
Leider ist es mir auch noch nicht gelungen, die Kopfzeile mit zu kopieren, aber über Trick17, ich erweitere einfach den zu kopierenden Bereich, da sollte es dann klappen.
Probiert es halt mal aus.
Code:

[Cc][+][-]

Option Explicit Private Sub Mail_BereichalsBereich() ' Sendet Mail mit integriertem Bereich als Bereich mit Signatur Dim sMailtext As String, sBer() As String ' Bereich bearbeiten und kopieren sBer = Split(ThisWorkbook.Sheets("Tabelle1").Range("Tabelle1").Address, "$") sBer(2) = Val(sBer(2)) - 1 & ":" ' Bereich um 1 Zeile nach oben erw. ThisWorkbook.Sheets("Tabelle1").Range(Join(sBer, "$")) _ .SpecialCells(xlCellTypeVisible).Copy ' Mail erstellen With CreateObject("Outlook.Application").CreateItem(0) .BodyFormat = 2 ' 2=HTML-Format, 3=Richtext .Subject = "Betreff" ' Betreff .To = "An@web.de" ' Empfänger .CC = "AuchAn@web.de" ' Kopie .BCC = "" sMailtext = "Hallo,¶¶hier die Daten" ' Mailtext (optional) sMailtext = Replace(sMailtext, "", vbLf) ' Umbrüche einfügen .GetInspector ' Signatur holen .htmlbody = Replace(sMailtext, vbLf, "<br>") & .htmlbody .Display With .GetInspector.WordEditor.Application.Selection .Start = Len(sMailtext) + 1 .Paste ' Bereich in Mail einfügen End With End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Range als E-Mail Body einfügen
23.10.2021 10:31:57
Carl
Hallo ihr Zwei,
vielen Dank für die schnelle Rückmeldung.
Kurz vorab: hatte zunächst zwischenzeitlich noch die folgende Idee geprüft gehabt:
Range(ActiveSheet.ListObjects("Tabelle3").ListColumns(1).Range.Select, ActiveSheet.ListObjects("Tabelle3").ListColumns(5).Range.Select).Select
Das habt aber auch leider nicht funktioniert.
Das was Klaus geschrieben passt besser für meine Lösung und funktioniert wunderbar.
Viele Güße nach Freigericht von einem Ex-Altenmittlauer
Anzeige
AW: Range als E-Mail Body einfügen
23.10.2021 10:52:15
volti
Hallo Carl,
die Welt ist manchmal klein. Da laufe ich nachher mit dem 🐕 von Somborn aus hin.
Aber, wo hat Klaus was geschrieben?
Aber wenn Du eine Lösung hast, dann 👍.
Gruß und schönes Wochenende
Karl-Heinz
Für die ganze Tabelle...
25.10.2021 09:10:20
Case
Hallo Karl-Heinz, :-)
... reicht doch: ;-)

ThisWorkbook.Worksheets("Tabelle1").ListObjects("Tabelle1").Range.Copy
Servus
Case
Anzeige
AW: Für die ganze Tabelle...
25.10.2021 09:37:59
Volti
Danke Case,
für den Tipp.
Werde ich mir merken, habe ehrlich gesagt selber noch nicht groß was mit Intelligenten Tabellen gemacht.
Gruß
KH
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Inhalte einer Excel-Tabelle als E-Mail Body einfügen


Schritt-für-Schritt-Anleitung

Um den Inhalt einer Excel-Tabelle als E-Mail Body in Outlook einzufügen, kannst Du folgenden VBA-Code verwenden. Dieser Code nutzt die RangetoHTML-Funktion, um ein Excel-Bereich in HTML umzuwandeln und in eine E-Mail einzufügen.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul ein: Rechtsklick auf "VBAProject (DeinWorkbook)" > Einfügen > Modul.
  3. Kopiere und füge den folgenden Code in das Modul ein:
Sub Mail_Selection_Range_Outlook_Body()
    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object

    Set rng = Sheets("Tabelle1").Range("Tabelle3").SpecialCells(xlCellTypeVisible)

    If rng Is Nothing Then
        MsgBox "Der ausgewählte Bereich ist nicht vorhanden oder das Blatt ist geschützt."
        Exit Sub
    End If

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = "empfaenger@example.com"
        .Subject = "Betreff der E-Mail"
        .HTMLBody = RangetoHTML(rng)
        .Display
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Function RangetoHTML(rng As Range) As String
    ' Hier kommt der Code zur Umwandlung in HTML
End Function
  1. Füge die RangetoHTML-Funktion in das gleiche Modul ein, um den Bereich in HTML umzuwandeln.
  2. Starte das Makro: Du kannst das Makro über F5 im VBA-Editor ausführen oder zurück zu Excel gehen und das Makro über das Menü "Entwicklertools" > "Makros" starten.

Häufige Fehler und Lösungen

  • Fehler: "Der ausgewählte Bereich ist nicht vorhanden oder das Blatt ist geschützt."

    • Lösung: Stelle sicher, dass der angegebene Bereich tatsächlich existiert und das Arbeitsblatt nicht geschützt ist.
  • Fehler: E-Mail wird ohne Inhalt gesendet.

    • Lösung: Überprüfe, ob die RangetoHTML-Funktion korrekt implementiert und dass der Bereich nicht leer ist.

Alternative Methoden

Falls Du eine andere Methode bevorzugst, kannst Du den Bereich auch als Bild in die E-Mail einfügen:

Sub Mail_BereichAlsBild()
    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object

    Set rng = Sheets("Tabelle1").Range("Tabelle3")
    rng.CopyPicture

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = "empfaenger@example.com"
        .Subject = "Betreff der E-Mail"
        .HTMLBody = "Hier ist das Bild der Tabelle:"
        .GetInspector.WordEditor.Application.Selection.Paste
        .Display
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Praktische Beispiele

Hier sind einige nützliche Beispiele, wie Du den Code anpassen kannst:

  • Um den gesamten Bereich einer intelligenten Tabelle zu kopieren:
Set rng = ThisWorkbook.Sheets("Tabelle1").ListObjects("Tabelle3").Range
  • Um mehrere Tabellenbereiche in einer E-Mail zu kombinieren:
Dim rng1 As Range, rng2 As Range
Set rng1 = Sheets("Tabelle1").Range("Tabelle3")
Set rng2 = Sheets("Tabelle1").Range("Tabelle4")
Set rng = Union(rng1, rng2)

Tipps für Profis

  • Verwende die .Display-Methode, um die E-Mail vor dem Senden anzuzeigen. So kannst Du letzte Anpassungen vornehmen.
  • Testen Sie den Code in einer sicheren Umgebung, bevor Du ihn in der Produktion verwendest, um unerwartete Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich den E-Mail Body in einem anderen Format als HTML senden? Ja, Du kannst den Body auch im Rich-Text-Format senden, indem Du .BodyFormat = 3 setzt.

2. Wie kann ich mehrere Empfänger angeben? Trenne die E-Mail-Adressen mit einem Semikolon in der .To-Eigenschaft, z.B. .To = "empfaenger1@example.com; empfaenger2@example.com".

3. Funktioniert dieser Code in Excel 365? Ja, der Code funktioniert in Excel-Versionen von 2000 bis 365. Achte darauf, dass die verwendeten Objekte kompatibel sind.

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