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

Forumthread: Einen Bereich einer Tabelle per Email senden

Einen Bereich einer Tabelle per Email senden
18.03.2019 10:16:57
Sven
Hallo,
ich möchte den Bereich Tabelle2!A1:B25 in den Body einer Email einfügen und diese dann via Outlook versenden.
Die Email wird generiert und auch versendet. Soweit so gut.
Nur schaffe ich es nicht den gewünschen Bereich in diese Email zu packen.
Mit nur einer Zelle funktioniert es.
Aber es soll ja der komplette Bereich vonA1 bis B25 verschickt werden.
Kann mir da bitte wer Helfen?
Bisher siet das Makro so aus:

Sub Mail()
' On Error GoTo ErrHandler
' SET Outlook APPLICATION OBJECT.
Dim objOutlook As Object
Set objOutlook = CreateObject("Outlook.Application")
' CREATE EMAIL OBJECT.
Dim objEmail As Object
Set objEmail = objOutlook.CreateItem(olMailItem)
With objEmail
.to = "test1@email.de;test2@email.de"
.cc = "test2@email.de"
.Subject = "KW: " & Range("Tabelle3!B25").Value & "/" & Range("Tabelle3!D25").Value
.Body = Range("Tabelle2!A1").Value
'        .Display
.Send
End With
' CLEAR.
Set objEmail = Nothing:    Set objOutlook = Nothing
ErrHandler:
End Sub

Schonmal Danke für die Hilfe!!!!
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einen Bereich einer Tabelle per Email senden
18.03.2019 10:31:06
Torsten
Hallo,
vielleicht so?
Sub Mail()
' On Error GoTo ErrHandler
' SET Outlook APPLICATION OBJECT.
Dim objOutlook As Object
Set objOutlook = CreateObject("Outlook.Application")
' CREATE EMAIL OBJECT.
Dim objEmail As Object
Set objEmail = objOutlook.CreateItem(olMailItem)
With objEmail
.to = "test1@email.de;test2@email.de"
.cc = "test2@email.de"
.Subject = "KW: " & Range("Tabelle3!B25").Value & "/" & Range("Tabelle3!D25").Value
.Body = Tabelle2.Range("A1:B25").Value
'        .Display
.Send
End With
' CLEAR.
Set objEmail = Nothing:    Set objOutlook = Nothing
ErrHandler:
End Sub

Anzeige
AW: Einen Bereich einer Tabelle per Email senden
18.03.2019 11:02:53
Torsten
Hallo nochmal Sven,
dein Code funktioniert nicht. Meiner aber auch nicht.
Versuch es mal folgendermassen. Du musst aber erst in den Referenzen "Microsoft Forms 2.0 Object Library" aktivieren, um mit der Zwischenablage arbeiten zu koennen, sonst bekommst du eine Fehlermeldung. Wenn du dazu Hilfe brauchst, melde dich nochmal. Wenn das aktiviert ist, dann laeuft der folgende Code.

Sub Mail()
' On Error GoTo ErrHandler
' SET Outlook APPLICATION OBJECT.
Dim objOutlook As Object
Dim ClpObj As DataObject
Set ClpObj = New DataObject
Set objOutlook = CreateObject("Outlook.Application")
' CREATE EMAIL OBJECT.
Dim objEmail As Object
Set objEmail = objOutlook.CreateItem(olMailItem)
'Excelbereich der versendet werden soll.
Range("A1:B25").Select
'Bereich wird in die Zwischenablage kopiert
Selection.Copy
With objEmail
.to = "test1@email.de;test2@email.de"
.cc = "test2@email.de"
.Subject = "KW: " & Range("Sheet2!C25").Value & "/" & Range("Sheet2!D25").Value
'Zwischenablage wird eingefügt
ClpObj.GetFromClipboard
.Body = ClpObj.GetText(1)
.Display
'.Send
End With
' CLEAR.
Set objEmail = Nothing:    Set objOutlook = Nothing
ErrHandler:
End Sub
Gruss Torsten
Anzeige
AW: Einen Bereich einer Tabelle per Email senden
18.03.2019 12:38:00
Sven
Moin Torsten,
erstmal Danke für die schnelle Antwort.
Leider funktioniert das so bei mir noch nicht.
Ich bekomme "Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert mit dem Verweis auf die Zeile mit "Dim ClpObj As DataObject"
Wie funktioniert dass denn mit Referenzen "Microsoft Forms 2.0 Object Library" aktivieren?
Gruß
Sven
Anzeige
Hast Du denn...
18.03.2019 13:19:33
{Boris}
Hi,
...mal mein Beispiel ausprobiert?
Option Explicit
Sub Mail()
Dim MyOutApp As Object
Dim MyMessage As Object
Dim rng As Range
Set MyOutApp = CreateObject("Outlook.application")
Set MyMessage = MyOutApp.createitem(0)
Set rng = Tabelle1.Range("A1:B25") 'Bereich anpassen!
With MyMessage
.To = "Max.Muster@irgendwo.com"
.Subject = "Betreffzeile"
.HTMLBody = RangetoHTML(rng)
.Display ' Mail anzeigen ohne automatischen Versand
'.Send ' Mail automatisch senden ohne vorherige Anzeige
End With
Set MyMessage = Nothing
Set MyOutApp = 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
VG, Boris
Anzeige
AW: Einen Bereich einer Tabelle per Email senden
18.03.2019 14:06:35
Torsten
Hi Sven,
ja genau das ist die Fehlermeldung wegen der fehlenden Library. Da du 365 hast, ist das etwas umstaendlicher, da die Library nicht mehr in der Liste ist.
Ich habe englisches Excel. Hoffe, du findest die Menuepunkte.
Im Code Fenster klickst du oben im Menue auf "Tools", dann References. Dann geht ein Fenster auf. Dort klickst du auf "Browse" und musst auf deinem Computer nach der Datei FM20.dll suchen lassen. Dann auf Oeffnen klicken und die Library ist installiert. Dann OK.
Und es sollte laufen.
Gruss Torsten
Anzeige
AW: Einen Bereich einer Tabelle per Email senden
18.03.2019 14:09:08
Torsten
Hallo nochmal,
hab gerade ne deutsche Beschreibung dazu gefunden:
- ALT+F11 drücken (Visual Basic Editor (VB-Editor))
- [Extras] / [Verweise]
- mit "Durchsuchen" finden z.B. unter:
C:\WINDOWS\SYSTEM32\FM20.DLL
- OK drücken
- VB-Editor schließen
- Datei speichern
AW: Einen Bereich einer Tabelle per Email senden
18.03.2019 14:09:17
Werner
Hallo Torsten,
bin mit jetzt nicht sicher. Aber ist das nicht die Geschichte bei der es reicht einfach eine Userform zu erstellen. Dadurch wird die Library eingebunden. Danach kann die Userform wieder gelöscht werden.
Gruß Werner
Anzeige
AW: Einen Bereich einer Tabelle per Email senden
18.03.2019 14:11:15
Torsten
hab ich jetzt noch nicht gehoert, kann aber durchaus sein.
AW: Einen Bereich einer Tabelle per Email senden
18.03.2019 14:15:39
Torsten
Hallo nochmal Werner,
habs jetzt gerade mal ausprobiert. Du hast recht. Das mit der Userform funktioniert.
AW: Einen Bereich einer Tabelle per Email senden
18.03.2019 11:21:51
{Boris}
Hi,
ich habe folgende Funktion im Einsatz, um den gesamten Excelbereich incl. Formaten in den Body zu packen:
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
Also Bereich festlegen und damit die Funktion aufrufen:
Set Dein_Bereich = Range("A1:B25")
...
.HTMLBody = RangetoHTML(Dein_Bereich)
VG, Boris
Anzeige
AW: Einen Bereich einer Tabelle per Email senden
19.03.2019 10:33:11
Torsten
Hallo Boris,
gut und schoen deine Funktion. Aber jetzt musst du jemandem mit "Kaum Excel/VBA Kenntnisse" noch erklaeren, wie das ganze dann in die Email kommt.
Gruss Torsten
AW: Einen Bereich einer Tabelle per Email senden
19.03.2019 11:08:15
{Boris}
Hi,
hier https://www.herber.de/forum/messages/1681924.html habe ich den ganzen Code gepostet.
Alles ab in ein allgemeines Modul und die
Sub Mail()
starten. Das sollte doch machbar sein ;-)
VG, Boris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Bereich einer Excel-Tabelle per Email versenden


Schritt-für-Schritt-Anleitung

Um einen Bereich einer Excel-Tabelle per Email zu versenden, kannst Du folgendes VBA-Makro verwenden. Dieses Beispiel versendet den Bereich Tabelle2!A1:B25 im Body einer Outlook-Email.

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge folgenden Code in das Modul ein:
Sub Mail()
    Dim objOutlook As Object
    Dim objEmail As Object
    Set objOutlook = CreateObject("Outlook.Application")
    Set objEmail = objOutlook.CreateItem(0)

    ' Bereich definieren
    Dim rng As Range
    Set rng = Tabelle2.Range("A1:B25") ' Bereich anpassen!

    ' Email erstellen
    With objEmail
        .To = "test1@email.de;test2@email.de"
        .Subject = "KW: " & Range("Tabelle3!B25").Value & "/" & Range("Tabelle3!D25").Value
        .HTMLBody = RangetoHTML(rng) ' Bereich als HTML einfügen
        .Display ' Zum Anzeigen der Email
        ' .Send ' Um die Email automatisch zu senden
    End With

    ' Objekte freigeben
    Set objEmail = Nothing
    Set objOutlook = Nothing
End Sub

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
        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
  1. Passe den Bereich Tabelle2!A1:B25 nach Bedarf an.
  2. Führe das Makro aus, um die Email zu versenden.

Häufige Fehler und Lösungen

  • Fehler: Benutzerdefinierter Typ nicht definiert
    Stelle sicher, dass die Microsoft Forms 2.0 Object Library aktiviert ist. Gehe zu Tools > References im VBA-Editor und aktiviere die entsprechende Bibliothek.

  • Kein Outlook installiert
    Dieses Makro funktioniert nur, wenn Outlook auf Deinem Computer installiert ist. Andernfalls wird die Email nicht gesendet.


Alternative Methoden

Wenn Du kein VBA verwenden möchtest, kannst Du die Daten auch manuell kopieren und in eine neue Email in Outlook einfügen. Eine weitere Möglichkeit ist, die Excel-Datei als Anhang zu versenden. Hierfür kannst Du einfach die Datei > Teilen > E-Mail Funktion in Excel nutzen.


Praktische Beispiele

Hier sind einige praktische Beispiele, um einen Excel-Bereich per Email zu versenden:

  1. Versenden einer Excel-Tabelle als Email: Verwende den oben bereitgestellten Code und passe den Bereich an, den Du senden möchtest.

  2. Versenden einer Excel-Datei als Anhang: Du kannst die gesamte Datei mit folgendem VBA-Code versenden:

Sub SendWorkbook()
    Dim objOutlook As Object
    Dim objEmail As Object
    Set objOutlook = CreateObject("Outlook.Application")
    Set objEmail = objOutlook.CreateItem(0)

    With objEmail
        .To = "test@example.com"
        .Subject = "Excel Datei"
        .Body = "Hier ist die angeforderte Excel-Datei."
        .Attachments.Add "C:\Pfad\zu\deiner\Datei.xlsx" ' Pfad anpassen
        .Send
    End With

    Set objEmail = Nothing
    Set objOutlook = Nothing
End Sub

Tipps für Profis

  • HTML-Formatierung: Um sicherzustellen, dass die Email gut aussieht, verwende .HTMLBody anstelle von .Body.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung im Code, um unerwartete Probleme beim Senden der Email abzufangen.
  • Automatisierung: Plane das Makro mit Windows Task Scheduler, um regelmäßig Berichte zu senden.

FAQ: Häufige Fragen

1. Wie kann ich eine Excel-Tabelle per Mail versenden?
Du kannst das oben bereitgestellte Makro verwenden, um den gewünschten Bereich zu versenden.

2. Welche Version von Excel benötige ich?
Der bereitgestellte Code funktioniert in Excel-Versionen 2000 bis 2016 und sollte auch in Excel 365 funktionieren.

3. Wie kann ich den Versandschritt automatisieren?
Du kannst den .Send Befehl im Makro aktivieren, um die Email ohne vorherige Anzeige direkt zu versenden.

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