Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

128 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige