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

Forumthread: Bereich aus Tabelle in eMail Boddy einfügen

Bereich aus Tabelle in eMail Boddy einfügen
24.03.2016 12:48:24
Andreas
Mit diesem Makro kann ich aus einer Excel Arbeitsmappe zB. Tabelle „HoleDaten“ einen zuvor markierten Bereich in der Tabelle „HoleDaten“an einen eMail_Empfänger senden. Dies funktioniert auch problemlos.
Nun habe ich versucht dieses Makro in meine andere Excel Arbeitsmappe aus der ich die eMail ü _
ber eine Schaltfläche aus Excel herraus versenden möchte in das Makro „

Sub eMail_Excel_Workbook_via_Outlook_Senden()“
einzubinden. Das kriege ich aber nicht hin. Kann mir einer dabei helfen, oder den Code im Makro  _
_
(‚

Sub eMail_Excel_Workbook_via_Outlook_Senden()‘) dementsprechend anpassen?
Wäre für eine Hilfe sehr dankbar

Sub Send_OriginalRange_from_Excel()
'Geht nur ab Office 2000 und höher
'Ohne Select geht es in diesem Fall nicht :-))
'Sendet den aktuell markierten Bereich
With Selection
'Das anzeigen der Envelope Commandbar ist unabdingbar
'Hier wird EXCEL selbst als "Mail-Client" verwendet.
ActiveWorkbook.EnvelopeVisible = True
'Nun werden die Adressen vergeben
With ActiveSheet.MailEnvelope
'Der Betreff
.item.Subject = "Die aktuellen Daten"
'Dies ist der eigentliche "Body"-Text
.Introduction = "Das ist der Einleitungstext." & vbCrLf & "mit einer zweiten Zeile"
'item.To = "eMailEmpfänger.de"
'.Display       'wenn ich Display aktiviere erscheint der Debugger und markiert mir  _
_
die Zeile gelb
'.item.Send
End With
End With
ActiveWorkbook.EnvelopeVisible = False
End Sub

++++++++++
'sendet die aktuelle Datei an e- Mail Empfänger über Outlock
Sub eMail_Excel_Workbook_via_Outlook_Senden()
Dim MyMessage As Object, MyOutApp As Object
Dim Qe As Integer
Dim AWS As String
'Testen ob die aktuelle Mappe schon gespeichert wurde
If ThisWorkbook.Saved = False Then
'Die letzten Änderungen wurden noch nicht gespeichert
Qe = MsgBox("Diese Mappe wurde noch nicht gespeichert, und kann nicht versandt werden!"  _
_
_
& Chr$(13) & "Soll die Datei gespeichert werden?", vbInformation + vbYesNo, " _
Sendefehler")
If Qe = vbNo Then
'Abbruch durch Benutzer
MsgBox "Sendevorgang abgebrochen"
Exit Sub
Else
'Prüfen ob die Datei schon mal gespeichert wurde
If Right(ThisWorkbook.Name, 3)  "xlsm" Then
'Nein > Speicherdialog aufrufen
'Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.SaveAs Filename:= _
"N:\Ablagen\MeineDatei.xlsm"
Else
'Speichern
ThisWorkbook.Save
End If
End If
End If
'Aktive Arbeitsmappe wird als mail gesendet
'Übergabe des Mappennames an die Variable
AWS = ThisWorkbook.FullName
'Outlook Object erstellen
Set MyOutApp = CreateObject("Outlook.Application")
'Outlook Nachricht erstellen
Set MyMessage = MyOutApp.CreateItem(0)
With MyMessage
'Empfänger
.To = "eMailEmpfänger.de"
'Betreff
.Subject = "Teilnehmerliste"
'Hier wird ein normaler Text erstellt
'.Body = "Mail für normalen Textempfang"
.HTMLBody = "Hallo Frau Mustermann,
" & _ "
Hier die neuen Teilnehmer die ab Montag die Maßnahme beginnen sollen" & vbCrLf & _"

" & _"

" & _"

" & _"
schönes Wochenende _ b>
" & _"Mit freundlichen Grüßen
" & _"
Ich
" & _"Telefon: 1111 111-645
" & _"Telefax: 111 111-660
" & _"E -Mail: eMailEmpfänger.de
" & _"
Ort Musterstadt
" & _"Musterstraße 1
" & _"Musterort
.Attachments.Add AWS 'Hier wird eine HTML Mail erstellt 'Dies kann zu Problemen führen, wenn der Empfänger 'nur TEXT Dateien empfangen darf. '.HTMLBody = "Das ist ein Test." & vbCrLf & "Bitte ignorieren." 'Hier wird die Mail nochmals angezeigt .Display 'Hier wird die Mail gleich in den Postausgang gelegt und gesendet '.Send End With 'Outlook schliessen 'MyOutApp.Quit 'Variablen leeren 'Set MyOutApp = Nothing Set MyMessage = Nothing End Sub
Für eine Hilfe wäre ich sehr dankbar
liebe Grüße Andreas

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
kleiner Fehler
24.03.2016 14:34:09
KlausF
Hallo Andreas,
ein kleiner Fehler im Code:
If Right(ThisWorkbook.Name, 4) "xlsm" Then
Gruß
Klaus

AW: kleiner Fehler
24.03.2016 15:10:52
Andreas
Hallo Klaus,
das war nicht der Fehler
ich möchte das Makro (

Sub Send_OriginalRange_from_Excel())
so in mein Makro (

Sub eMail_Excel_Workbook_via_Outlook_Senden())
einbinden, das aus dem Tabellenblatt (HoleDaten)der markierte Bereich mit in den Boddy der  _
eMail übernommen wird --->sie mal Fettgerucktes im Code

Sub Send_OriginalRange_from_Excel()
'Geht nur ab Office 2000 und höher
'Ohne Select geht es in diesem Fall nicht :-))
'Sendet den aktuell markierten Bereich
With Selection
'Das anzeigen der Envelope Commandbar ist unabdingbar
'Hier wird EXCEL selbst als "Mail-Client" verwendet.
ActiveWorkbook.EnvelopeVisible = True
'Nun werden die Adressen vergeben
With ActiveSheet.MailEnvelope
'Der Betreff
.item.Subject = "Die aktuellen Daten"
'Dies ist der eigentliche "Body"-Text
.Introduction = "Das ist der Einleitungstext." & vbCrLf & "mit einer zweiten Zeile"
'item.To = "eMailEmpfänger.de"
'.Display       'wenn ich Display aktiviere erscheint der Debugger und markiert mir  _
die Zeile gelb
'.item.Send
End With
End With
ActiveWorkbook.EnvelopeVisible = False
End Sub
++++++++++
'sendet die aktuelle Datei an e- Mail Empfänger über Outlock
Sub eMail_Excel_Workbook_via_Outlook_Senden()
Dim MyMessage As Object, MyOutApp As Object
Dim Qe As Integer
Dim AWS As String
'Testen ob die aktuelle Mappe schon gespeichert wurde
If ThisWorkbook.Saved = False Then
'Die letzten Änderungen wurden noch nicht gespeichert
Qe = MsgBox("Diese Mappe wurde noch nicht gespeichert, und kann nicht versandt werden!"  _
_
& Chr$(13) & "Soll die Datei gespeichert werden?", vbInformation + vbYesNo, " _
Sendefehler")
If Qe = vbNo Then
'Abbruch durch Benutzer
MsgBox "Sendevorgang abgebrochen"
Exit Sub
Else
'Prüfen ob die Datei schon mal gespeichert wurde
'If Right(ThisWorkbook.Name, 3)  "xlsm" Then
If Right(ThisWorkbook.Name, 4)  "xlsm" Then
'Nein > Speicherdialog aufrufen
'Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.SaveAs Filename:= _
"N:\Ablagen\MeineDatei.xlsm"
Else
'Speichern
ThisWorkbook.Save
End If
End If
End If
'Aktive Arbeitsmappe wird als mail gesendet
'Übergabe des Mappennames an die Variable
AWS = ThisWorkbook.FullName
'Outlook Object erstellen
Set MyOutApp = CreateObject("Outlook.Application")
'Outlook Nachricht erstellen
Set MyMessage = MyOutApp.CreateItem(0)
With MyMessage
'Empfänger
.To = "eMailEmpfänger.de"
'Betreff
.Subject = "Teilnehmerliste"
'Hier wird ein normaler Text erstellt
'.Body = "Mail für normalen Textempfang"
.HTMLBody = "Hallo Frau Mustermann,
" & _ "
Hier die neuen Teilnehmer die ab Montag die Maßnahme beginnen sollen" & vbCrLf & _"

" & _"

" & _"

" & _"
schönes Wochenende
" & _"Mit freundlichen Grüßen
" & _"
Ich
" & _"Telefon: 1111 111-645
" & _"Telefax: 111 111-660
" & _"E -Mail: eMailEmpfänger.de
" & _"
Ort Musterstadt
" & _"Musterstraße 1
" & _"Musterort
hier soll jetzt noch der selektierte Bereich aus der Tabelle (HoleDaten) mit eingefügt _ werden hatte das inzwischen mit der Codezeile .HTMLBody = "Hallo Frau R. " _ & Sheets("Tabelle1").Cells(1, 2) _ & ",
anbei ...
"
probiert. Das hatte auch funtioniert aber ohne den Vorher im >.HTMLBody Codeabschnitt mit zu _ übernehmen (also in diesem Fall nur den markierten Bereich aus Tabelle (HoleDaten) kann man eventuell auch zwei >.HTMLBody zusammenfügen oder nacheinander ausführen lassen? brauche dazu wirklich Eure Hilfe wenn das überhaupt geht .Attachments.Add AWS 'Hier wird eine HTML Mail erstellt 'Dies kann zu Problemen führen, wenn der Empfänger 'nur TEXT Dateien empfangen darf. '.HTMLBody = "Das ist ein Test." & vbCrLf & "Bitte ignorieren." 'Hier wird die Mail nochmals angezeigt .Display 'Hier wird die Mail gleich in den Postausgang gelegt und gesendet '.Send End With 'Outlook schliessen 'MyOutApp.Quit 'Variablen leeren 'Set MyOutApp = Nothing Set MyMessage = Nothing End Sub

Für eine Hilfe wäre ich sehr dankbar
liebe Grüße Andreas

Anzeige
AW: kleiner Fehler
24.03.2016 15:13:28
Andreas
Hallo Klaus,
Hallo Excelfreunde
meine Frage ist noch nicht beantwortet,
Also der Beitrag ist noch offen

AW: kleiner Fehler
24.03.2016 15:55:23
Andreas
Hallo Excelfreunde,
hier zu meinem Problem nochmals einen Code der soweit auch funktioniert.
Aber eben beide .HTMLBody nicht zusammen. wenn ich einen deaktiviere funktioniert der andere, wenn ich den anderen wieder aktiviere und den vorherigen deaktivier funktioniert diese ebenfalls.
Das Problem ist es das aber beide zusammen funktionieren sollen. Aber das tut es eben nicht.
habe den Code in einem Modul
Option Explicit
Public Sub prc()
Dim objOutlook As Object, objMail As Object
Set objOutlook = CreateObject(Class:="Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = "Andreas.Rohrbeck@jobcenter-ge.de"
.Subject = "Hallo"
Hier liegt mein Problem, wenn ich den   .HTMLBody = fncRangeToHtml("Tabelle1", "B2:H37")
aktiviere und allein laufen lasse funktioniert das Makro und der markierte Bereich wird in die   _
_
eMail übernommen.
Wenn ich beide   '.HTMLBody
aktiviere wird nur der Bereich aus dem         .HTMLBody = "Hallo Frau R,
" & _usw. ü _
bernommen.
Ich möchte aber beide .HTMLBody zusammenführen, oder nacheinander laufen lassen.
Aber eben das kriege ich nicht hin

'.HTMLBody = fncRangeToHtml("Tabelle1", "B2:H37") 'Anpassen !!!
.HTMLBody = "Hallo Frau R,
" & _
Hier die neuen Teilnehmer die ab Montag die Maßnahme beginnen sollen" & vbCrLf & _
" & _
" & _
" & _
schönes Wochenende
" & _
"Mit freundlichen Grüßen
" & _
Andreas
" & _
"Integrationsvermittler
" & _
"Telefon:
" & _
"Telefax:
" & _
"E -Mail: Andreas.de
" & _
Gunzenhausen
" & _
"1
" & _
"Ort
.Display 'zum testen
'        .Send
End With
Set objMail = Nothing
Set objOutlook = Nothing
End Sub

Private Function fncRangeToHtml(strWorksheetname As String, _
strRangeaddress As String) As String
Dim objFilesytem As Object, objTextstream As Object
Dim strFilename As String
strFilename = Environ$("temp") & "/" & _
Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
ActiveWorkbook.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=strFilename, _
Sheet:=strWorksheetname, _
Source:=strRangeaddress, _
HtmlType:=xlHtmlStatic).Publish True
Set objFilesytem = CreateObject("Scripting.FileSystemObject")
Set objTextstream = objFilesytem.GetFile(strFilename). _
OpenAsTextStream(1, -2)
fncRangeToHtml = objTextstream.ReadAll
objTextstream.Close
Set objTextstream = Nothing
Set objFilesytem = Nothing
Kill strFilename
End Function
Bitte nochmals um Untestützung
liebe Grüße Andreas

Anzeige
AW: kleiner Fehler
26.03.2016 16:06:39
Michael

Hallo Andreas,
schau Dir mal das Ergebnis Deiner Funktion im Debug-(direkt-)Fenster an, z.B. so:
Sub anzeigen()
Debug.Print fncRangeToHtml("Tabelle1", "A2:B5")
End Sub

(das siehst Du in VBA mit der Tastenkombination Strg+g bzw. unter Ansicht-Direktfenster)
Der Code sieht dann etwa so aus:
viel bla bla bla, dann
</body>
</html>
D.h., daß "HTML" im Prinzip bereits "beendet" ist.
Ich würde versuchen, die Ausgabe zwischenzuspeichern und den restlichen Text vor das schließende BODY zu bekommen, etwa so:
Sub anzeigenAlles()
Dim s As String
s = "Hallo Frau R," & _
"Hier die neuen Teilnehmer die ab Montag die Maßnahme beginnen sollen<br>" _
& vbCrLf & _
"schönes Wochenende vom gunzahaisa Gaul"
' vbcrlf kannst Dir schenken, das br reicht völlig
Debug.Print allesZusammen("Tabelle1", "A2:B5", s)
End Sub
Function allesZusammen(shN As String, _
rngA As String, sonstText As String) As String
Dim langerS As String, p&, zwischenS As String
langerS = fncRangeToHtml(shN, rngA)
p = InStr(langerS, "</body>")
If p = 0 Then allesZusammen = "Fehler": Exit Function
zwischenS = Mid(langerS, p)
langerS = Mid(langerS, 1, p - 1)
allesZusammen = langerS & sonstText & zwischenS
End Function
Kapiert?
Also, nochmal ganz langsam: Du weist in Deinem Code erst Mal den eigentlichen Text zu ...
Public Sub prc()
Dim objOutlook As Object, objMail As Object
' neu *************
Dim s As String
Set objOutlook = CreateObject(Class:="Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
' neu *************
s = "Hallo Frau R," & _
"Hier die neuen Teilnehmer die ab Montag die Maßnahme beginnen sollen<br>" _
"schönes Wochenende vom gunzahaisa Gaul"
With objMail
und weist dann nur EINMAL .HTMLBODY zu:
.HTMLBody = allesZusammen("Tabelle1", "B2:H37", s)
Ich habe leider kein OL zum Testen, also hier nur ein Vorschlag zur Logik...
Meine Testdatei mit Direktfenster: https://www.herber.de/bbs/user/104614.xlsm
Schöne Grüße,
Michael

Anzeige
AW: kleiner Fehler
29.03.2016 15:34:15
Andreas
Hallo Michael,
entschuldige das ich mich jetzt erst melde. Ich war leider anderweitig verhindert.
Dein Lösungsansatz war Goldrichtig. Habe es mit Deiner Hilfe geschafft das Problem zu lösen. Nochmals herzliche Dank dafür
liebe Grüße Andreas

Das freut mich,
30.03.2016 21:29:55
Michael
Andreas,
alles gut & nix zu danken.
Schöne Grüße aus dem nördlicheren Mfr. zurück,
Michael
Anzeige
;

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

Tabelle in E-Mail einfügen: Schritt-für-Schritt-Anleitung


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen. Wähle Einfügen > Modul, um ein neues Modul zu erstellen.

  2. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Sub eMail_Excel_Workbook_via_Outlook_Senden()
       Dim MyMessage As Object, MyOutApp As Object
       Dim Qe As Integer
       Dim AWS As String
    
       If ThisWorkbook.Saved = False Then
           Qe = MsgBox("Diese Mappe wurde noch nicht gespeichert, und kann nicht versandt werden!" & _
           Chr$(13) & "Soll die Datei gespeichert werden?", vbInformation + vbYesNo, "Sendefehler")
           If Qe = vbNo Then
               MsgBox "Sendevorgang abgebrochen"
               Exit Sub
           Else
               ThisWorkbook.Save
           End If
       End If
    
       AWS = ThisWorkbook.FullName
       Set MyOutApp = CreateObject("Outlook.Application")
       Set MyMessage = MyOutApp.CreateItem(0)
    
       With MyMessage
           .To = "eMailEmpfänger.de"
           .Subject = "Teilnehmerliste"
           .HTMLBody = "Hallo Frau Mustermann,<br>" & _
           "Hier die neuen Teilnehmer, die ab Montag die Maßnahme beginnen sollen.<br>" & _
           fncRangeToHtml("Tabelle1", "B2:H37") & _
           "<br>Mit freundlichen Grüßen<br>Ich"
           .Attachments.Add AWS
           .Display ' Zum Testen, für das Versenden .Send verwenden
       End With
    
       Set MyMessage = Nothing
       Set MyOutApp = Nothing
    End Sub
    
    Function fncRangeToHtml(strWorksheetname As String, strRangeaddress As String) As String
       ' Funktion zur Umwandlung eines Bereichs in HTML
       Dim objFilesytem As Object, objTextstream As Object
       Dim strFilename As String
       strFilename = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
       ActiveWorkbook.PublishObjects.Add(SourceType:=xlSourceRange, Filename:=strFilename, _
       Sheet:=strWorksheetname, Source:=strRangeaddress, HtmlType:=xlHtmlStatic).Publish True
       Set objFilesytem = CreateObject("Scripting.FileSystemObject")
       Set objTextstream = objFilesytem.GetFile(strFilename).OpenAsTextStream(1, -2)
       fncRangeToHtml = objTextstream.ReadAll
       objTextstream.Close
       Set objTextstream = Nothing
       Set objFilesytem = Nothing
       Kill strFilename
    End Function
  3. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Du kannst das Makro über Entwicklertools > Makros ausführen.


Häufige Fehler und Lösungen

  • Fehler beim Senden: Wenn du die Fehlermeldung bekommst, dass die Datei nicht gespeichert wurde, stelle sicher, dass du die Datei vor dem Senden speicherst. Das Makro fragt dich, ob die Datei gespeichert werden soll.

  • HTML-Formatierung funktioniert nicht: Überprüfe, ob du die Funktion fncRangeToHtml korrekt implementiert hast. Diese ist notwendig, um den Tabellenbereich in HTML umzuwandeln.

  • Outlook öffnet sich nicht: Stelle sicher, dass Outlook korrekt installiert und konfiguriert ist.


Alternative Methoden

  • Excel E-Mail Add-Ins: Es gibt verschiedene Add-Ins, die dir helfen können, Excel-Daten direkt in E-Mails einzufügen, ohne VBA verwenden zu müssen.

  • Power Automate: Mit Microsoft Power Automate kannst du automatisierte Workflows erstellen, die E-Mails mit Excel-Daten versenden.


Praktische Beispiele

  • E-Mail mit markiertem Bereich: Wenn du einen bestimmten Bereich aus einer Tabelle in eine E-Mail einfügen möchtest, kannst du den Bereich zunächst markieren und dann in den HTMLBody des E-Mail-Objekts einfügen, indem du die Funktion fncRangeToHtml verwendest.

  • Versenden einer Teilnehmerliste: Der angepasste Code sendet automatisch eine E-Mail mit einer Liste von Teilnehmern aus einer Excel-Tabelle.


Tipps für Profis

  • Fehlerbehandlung einfügen: Ergänze deinen Code mit On Error Resume Next, um Fehler während der Ausführung zu handhaben und benutzerfreundliche Fehlermeldungen zu erstellen.

  • VBA-Sicherheit: Achte darauf, dass die Makrosicherheit in Excel so eingestellt ist, dass deine Makros ausgeführt werden können.


FAQ: Häufige Fragen

1. Wie kann ich eine Excel-Tabelle in den E-Mail-Text einfügen?
Nutze die Funktion fncRangeToHtml, um den gewünschten Bereich in HTML umzuwandeln und in den HTMLBody zu integrieren.

2. Kann ich mehrere Tabellen in eine E-Mail einfügen?
Ja, du kannst die Funktionen anpassen, um mehrere Bereiche nacheinander zu verarbeiten und diese in den E-Mail-Text einzufügen.

3. Wie kann ich sicherstellen, dass die E-Mail auch gesendet wird?
Ändere .Display in .Send, um die E-Mail direkt in den Postausgang zu senden, anstatt sie nur anzuzeigen.

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