Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1324to1328
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

Mail versenden - Range in body + sheet im Anhang

Mail versenden - Range in body + sheet im Anhang
19.08.2013 11:27:02
Vat
Hallo zusammen,
ich bin auf der Suche nach einem Makro, welches einen dynamischen Bereich aus meinem Tabellenblatt2 im Mail- Body versendet (A1:H-letztebefüllte zeile).
Zusätzlich soll aber noch das Tabellenblatt1 als Anhang versendet werden (Nur Werte).
Ich habe schon mehrer Makros für den Mailversand laufen. Entweder einen Bereich versenden, eine Mappe oder einen Sheet. Alles kein Problem… Aber beides kombiniert, bekomme ich absolut nicht hin :( Ich suche jetzt seit Freitag alle Möglichen Mailscripts durch – ohne Erfolg.
Hat vielleicht jemand etwas ähnliches am laufen, was ich mir anpassen kann?
Danke und Viele Grüße
Vat

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mail versenden - Range in body + sheet im Anhang
19.08.2013 14:41:22
fcs
Hallo Vat,
wenn du schon ein funktionierendes Makros hast, mit dem du einen Zellbereich als Bodytext versenden kannst, dann sollte es kein Problem sein das 2. Tabellenblatt als Attachment anzuhängen. Das Blatt muss dann zu Beginn des Makros in eine neue Arbeitsmappe kopiert werden, die Formeln durch Werte ersetzt werden und die Datei gespeichert und geschlossen werden. Den Namen der Datei muss man dabei in einer Varaiablen speichern, damit er beim Versenden der E-Mail als Attachment angegeben werden kann.
Hilfreich wäre jetzt, wenn du dein existierendes Makro hier posten würdest.
Wichtig ist auch, welches E-Mail-Programm du verwendest, da es zum Teil Unterschiede in der Syntax gibt.
Gruß
Franz

Anzeige
AW: Mail versenden - Range in body + sheet im Anhang
19.08.2013 15:28:55
Vat
Hallo Franz,
Vielen Dank für deine unterstützung. Ich habe mir das aus 2 scripts zusammen gebaut.
Leider funktionieren 2 Dinge noch nicht. Die dynamische Range ist noch nicht drin (damit habe ich mich noch nicht befasst) und der "nächste" Versand macht Probleme.
Immer wenn ich die Datei noch einmal versende hängt das script die vorigen alten Anhänge wieder mit dran. Immer einen mehr… Beim 5ten Versand habe ich dann quasi 5 Anhänge mit dran.
Sub Mail_senden()
Application.ScreenUpdating = False
Dim myMessage As Object, myOutApp As Object
Dim SavePath As String
Dim AWS As String
SavePath = (Environ("USERPROFILE")) '"C:\Eigene Dateien"
'Kopiert aktuelles Sheet in eine neue Mappe
'welche nur diese Tabelle enthält
Application.ScreenUpdating = False
ActiveSheet.Copy
Formeln_wandeln
'Speichert die Datei unter dem Tabellennamen und einem Zeitstempel
ActiveWorkbook.SaveAs SavePath & "\" & ActiveSheet.Name & "_" & Format(Now, "ddmmyyyy_hhmm") & " _
.xls"
'Mappenname wird an Variable übergeben
'und anschliessend gleich geschlossen
With ActiveWorkbook
AWS = .FullName
.Close
End With
Worksheets("Protokoll").Activate
ActiveSheet.Range("h1:m10").Select 'Hier noch Dynamik einrichten
'Das anzeigen der Envelope Commandbar ist unabdingbar
ActiveWorkbook.EnvelopeVisible = True
'Nun werden die Adressen vergeben
With ActiveSheet.MailEnvelope
.Introduction = "Hallo Kollegen," & Chr(13) & _
.Item.To = "xxx@xxx.de"
.Item.cc = ""
.Item.Subject = " Subject " & Date & Time
.Item.Attachments.Add AWS
‚.Item.send
.Item.display
Kill AWS
End With
Application.ScreenUpdating = True
End Sub

Public Sub Formeln_wandeln()
Worksheets("2013").Activate 'Arbeitsblatt Aktiv setzen
Dim a As Range
For Each a In ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas)
a.Copy
a.PasteSpecial (xlPasteValuesAndNumberFormats)
Next a
Application.CutCopyMode = False
End Sub
v.G. Vat

Anzeige
AW: Mail versenden - Range in body + sheet im Anhang
19.08.2013 15:52:04
mumpel
Hallo!
Weshalb "MailEnvelope", wo Du Doch Outlook benutzt!? Stichwort: CreateObject("Outlook.Application")
Gruß, René

AW: Mail versenden - Range in body + sheet im Anhang
19.08.2013 16:10:49
Vat
Hallo René,
Wenn ich nach dem Versand einer Range, im Body, recherchiert habe, bin ich immer nur über "MailEnvelope" fündig geworden. Bzw. verwende ich dieses Script schon seit Jahren um automatisch Bereiche zu versenden.
Ich bin nur Laie und komme immer seltener dazu VBA zu nutzen – leider.
Deswegen kann ich mir nur simple Vorgänge selbst schreiben. Den Rest muss ich mir suchen und anpassen.
Grüße Vat

AW: Mail versenden - Range in body + sheet im Anhang
19.08.2013 16:37:37
mumpel
Word und Excel: Als Emailanhang

Anzeige
AW: Mail versenden - Range in body + sheet im Anhang
19.08.2013 17:40:20
Vat
Hallo René,
das script habe ich jetzt eingebunden. die mail wird auch mit dem selektierten Bereich generiert. Leider bekomme als HTMLBody nur besagte selektion und nicht meine dynamische Range (H2:M-letzte befüllte zeile).
Range(Cells(1, 8), Cells(Cells(65536, 13).End(xlUp).Row, 13)) 
funktioniert nicht.
Dann müsste ich noch tabelle1 als Datei- Anhang anhängen.
Es ist für mich immer wieder das gleiche Problem... Entweder das eine geht oder das andere. Ich bekomme beides nicht kombiniert.
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
.Cells(1).Select
Application.CutCopyMode = False
On Error GoTo 0
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
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
TempWB.Close savechanges:=False
Kill TempFile
Set ts = Nothing
Set Fso = Nothing
Set TempWB = Nothing
End Function

Sub MailBodyDialog()
Dim rng As Range
Dim olapp As Object
Set olapp = CreateObject("Outlook.Application")
With olapp.CreateItem(0)
Set rng = Selection
.HTMLBody = RangetoHTML(rng)
.to = "xxx@xxx.de" 'Empfänger
'.cc = "" 'optional Kopie an
'.bcc = "" 'optional Blindkopie an
'.ReadReceiptRequested = True ' optional Lesbestätigung anfordern
.Display
End With
Set rng = Nothing
Set olapp = Nothing
End Sub
Danke und Grüße
Vat

Anzeige
AW: Mail versenden - Range in body + sheet im Anhang
19.08.2013 17:39:39
fcs
Hallo Vat,
ich hab dein Makro mal so angepasst, dass
  • der Bereich im Blatt "Protokoll" dynamisch angepasst wird. Ich bin davon ausgegangen, dass in Spalte H in jeder Zeile ein Wert steht. Falls nicht muss hier nochmals etwas angepasst werden.

  • ein bereits vorhandenens Attachment wieder gelöscht wird.

  • Das Makro funktioniert bei mir in Verbindung mit Outlook 2010.
    Das direkte Senden nur wen Outlook bereits geöffnet ist, ansonsten landen die Mails erst einmal im Postausgang.
    Mit Thunderbird ?, da sich Office automatisch bei Outlook bedient, obwohl Thunderbird das Standard E-Mail-Programm ist.
    Gruß
    Franz
    Sub Mail_senden()
    Application.ScreenUpdating = False
    Dim myMessage As Object, myOutApp As Object
    Dim SavePath As String
    Dim AWS As String
    SavePath = (Environ("USERPROFILE")) '"C:\Eigene Dateien"
    'Kopiert aktuelles Sheet in eine neue Mappe
    'welche nur diese Tabelle enthält
    Application.ScreenUpdating = False
    ActiveSheet.Copy
    Call Formeln_wandeln
    'Speichert die Datei unter dem Tabellennamen und einem Zeitstempel
    ActiveWorkbook.SaveAs SavePath & "\" & ActiveSheet.Name & "_" & Format(Now, "ddmmyyyy_hhmm") _
    _
    & ".xls", FileFormat:=-4143
    'Mappenname wird an Variable übergeben
    'und anschliessend gleich geschlossen
    With ActiveWorkbook
    AWS = .FullName
    .Close
    End With
    Worksheets("Protokoll").Activate
    With Worksheets("Protokoll")
    .Range(.Cells(1, 8), .Cells(.Rows.Count, 8).End(xlUp).Offset(0, 5)).Select 'Hier noch  _
    Dynamik einrichten
    End With
    'Das anzeigen der Envelope Commandbar ist unabdingbar
    ActiveWorkbook.EnvelopeVisible = True
    'Nun werden die Adressen vergeben
    With ActiveSheet.MailEnvelope
    .Introduction = "Hallo Kollegen," & Chr(13) & _
    .Item.To = "xxx@xxx.de"
    .Item.cc = ""
    .Item.Subject = " Subject " & Date & Time
    If .Item.attachments.Count > 0 Then
    .Item.attachments(1).Delete
    End If
    .Item.attachments.Add AWS
    '.Item.send
    .Item.display
    Kill AWS
    End With
    Application.ScreenUpdating = True
    End Sub
    Public Sub Formeln_wandeln()
    Worksheets(1).Activate 'Arbeitsblatt Aktiv setzen
    Dim a As Range
    For Each a In ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas)
    a.Copy
    a.PasteSpecial (xlPasteValuesAndNumberFormats)
    Next a
    Application.CutCopyMode = False
    End Sub
    

    Anzeige
    AW: Mail versenden - Range in body + sheet im Anhang
    19.08.2013 17:53:10
    Vat
    Hallo Franz,
    es funktioniert super.
    Jetzt komme ich endlich weiter und kann den Rest anpassen :)
    Morgen früh melde ich mich noch einmal ausführlicher zurück.
    Dir und auch René Vielen Dank!
    Grüße Vat

    AW: Mail versenden - Range in body + sheet im Anhang
    20.08.2013 08:13:46
    Vat
    Guten Morgen zusammen,
    wie gestern schon gesagt, das script funktioniert jetzt wunderbar.
    Ich habe jetzt noch ein
    .Item.DeleteAfterSubmit = True
    
    eingebaut, damit die Mails nicht das Postfach belasten.
    Vielen Dank nochmal
    Grüße
    Vat

    300 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige