Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1680to1684
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
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!!!!

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
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
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
Anzeige
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
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

179 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige