Excel-Bereich auswählen und per Mail senden

  • Excel

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Baem.

    Excel-Bereich auswählen und per Mail senden

    Hallo zusammen,

    ich habe ein Tabellenblatt, wo ich mit einem Macro einen bestimmten Bereich auswähle und dieser dann per Mail verschickt werden soll.

    Erledigte Zeilen blende ich mit einem normalen Filter aus, diese werden mir aber (warum auch immer) in der versendeten Mail dann doch angezeigt.. Weiß jemand wo hier mein Fehler ist? :-/

    Visual Basic-Quellcode

    1. Sub Versand5()
    2. Dim oOutlookApp As Object, oOutlookMessage As Object
    3. Dim oFSObj As Object, oFSTextStream As Object
    4. Dim rngeSend As Range, strHTMLBody As String, strTempFilePath As String, strTempFileFullPath As String
    5. Dim ColIndex, RowIndex, Var1, Var2, i As Integer
    6. Dim DatumSheet
    7. Sheets("Protokoll").Select
    8. On Error Resume Next
    9. Set rngeSend = Range("B1:G15", Range("G65536").End(xlUp)).Select
    10. If rngeSend Is Nothing Then Exit Sub
    11. On Error GoTo 0
    12. Set oFSObj = CreateObject("Scripting.FilesystemObject")
    13. strTempFilePath = oFSObj.GetSpecialFolder(2) & "\"
    14. strTempFileFullPath = strTempFilePath & "XLRange.htm"
    15. Dim imgPrefix As String: imgPrefix = "Myimg"
    16. ActiveWorkbook.PublishObjects.Add(4, strTempFileFullPath, rngeSend.Parent.Name, rngeSend.Address, 0, imgPrefix, "").Publish True
    17. Set oOutlookApp = CreateObject("Outlook.Application")
    18. Set oOutlookMessage = oOutlookApp.CreateItem(0)
    19. For i = 1 To 1
    20. oOutlookMessage.To = "SMA"
    21. oOutlookMessage.Subject = "Protokoll vom " & Range("G7")
    22. Set oFSTextStream = oFSObj.OpenTextFile(strTempFileFullPath, 1)
    23. strHTMLBody = oFSTextStream.ReadAll
    24. Dim j As Integer
    25. Dim strData() As String
    26. strData() = Split(strHTMLBody, vbCrLf)
    27. For j = LBound(strData) To UBound(strData)
    28. If InStr(1, strData(j), "Myimg_", vbTextCompare) And InStr(1, strData(j), ".png", vbTextCompare) Then
    29. Debug.Print strData(j)
    30. strData(j) = Replace(strData(j), "XLRange-Dateien/", strTempFilePath & "XLRange-Dateien/")
    31. Debug.Print strData(j)
    32. End If
    33. Next j
    34. strHTMLBody = Join(strData, vbCrLf)
    35. oOutlookMessage.HTMLBody = strHTMLBody
    36. oOutlookMessage.Display
    37. Cells(1, 1).Select
    38. Next i
    39. ActiveWorkbook.Save
    40. '
    41. End Sub


    Danke im Voraus und LG,
    Benny
    Das Blatt sieht wie folgt aus.
    B1:G14 = Kopfzeile, diese sollte immer mitgeschickt werden.
    Zeile 15 ist die Überschrift mit den Filtern - muss also auch immer mitgeschickt werden.
    Demnach soll B1:G15 immer dabei sein.

    Nun soll automatisch nach unten hin so viel markiert sein, wo auch Inhalt ist... Aktuell habe ich Inhalt bis zur Zeile 60, dabei sind die meisten Zellen aber aufgrund des Filters ausgeblendet.
    Aktuell sollte daher also folgender Inhalt beim Macro ausgewählt und in eine Mail gepackt werden:
    B1:G15 + Zeile 35,36,38,43,48,49,50,52,53,54,55,56,57,58,59,60

    Wenn ich die Mail dann aber rausgeschickt habe, werden mir auch die ausgeblendeten Zeilen in der Mail angezeigt, jedoch ohne Inhalt.
    Hier ein Bild, da siehst du das E-Mailergebnis... Die ganzen Zeilen sind ohne Inhalt, dies sind die eigentlich ausgeblendeten Zeilen die garnicht angezeigt/markiert werden sollten.

    Meinst du jetzt die Mail selbst?

    Eigentlich nicht... Der Code erstellt eine neue Mail und fügt dort einfach das ein, was er hier im Excelsheet kopiert hat. Leider kopiert er halt auch ausgeblendete Zeilen mit, nur eben leer (diese haben nämlich eig. schon Inhalte).
    Doofe Frage.. Wo genau soll ich jetzt xlAutoFilter einfügen?

    Komisch ist ja auch, dass ich beim senden der Mail, also wenn sie erstellt wird und ich sie noch nicht abgeschickt habe so aussieht:



    Hier werden die Zeilen ausgeblendet, zwar nicht schön (da sie als fette Linie angezeigt werden) aber dennoch ausgeblendet... erst beim empfangen der Mail sind die Zeilen dann ohne Inhalt eingeblendet.

    Baem schrieb:

    Wo genau soll ich jetzt xlAutoFilter einfügen
    An der Stelle, wo du jetzt die hart codierte 4 bei PublishObjects.Add verwendest.

    Baem schrieb:

    beim senden der Mail, also wenn sie erstellt wird und ich sie noch nicht abgeschickt habe so aussieht
    Wie sieht denn die HTML-Datei aus, die du schreibst?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Habe die 4 gegen xlAutoFilter getauscht, geht aber nicht.. Nun erstellt er die Datei garnicht mehr. Er macht dann eine neue Outlook Mail auf wie gehabt, aber anstatt das alles eingefügt wird was in Excel kopiert wurde, meldet er mir nur "Diese Seite verwendet Frames. Frames werden von Ihrem Browser aber nicht unterstützt."

    Die HTML Datei sieht so aus wie im Screenshot oben.
    Hallo Baem,

    wenn Du nur einen Bereich aus einer Exceltabelle als Bild oder als Bereich in eine Mail kopieren willst, teste mal folgendes Makro als Alternative.
    Das zeigt auch keine ausgeblendeten Zeilen.

    Visual Basic-Quellcode

    1. Private Sub Versand5()
    2. ' Sendet Mail mit integriertem Bereich als Bereich mit Signatur
    3. Dim WSh As Worksheet
    4. Dim sMailtext As String
    5. Dim sBer As String
    6. sBer = "B1:G15" ' Kopierbereich
    7. Set WSh = ThisWorkbook.Sheets("Protokoll") ' Blatt mit Maildaten
    8. WSh.Range(sBer).Copy ' Bereich kopieren
    9. With CreateObject("Outlook.Application").CreateItem(0)
    10. .BodyFormat = 2 ' 2=HTML-Format, 3=Richtext
    11. .Subject = "Protokoll vom " & WSh.Range("G7") ' Betreff
    12. .To = "SMA" ' Empfänger
    13. sMailtext = "Hallo,¶Ihre Daten:¶¶" ' Mailbodytext
    14. sMailtext = Replace(sMailtext, "¶", vbLf) ' Umbrüche einfügen
    15. .GetInspector ' Signatur holen
    16. .htmlbody = Replace(sMailtext, vbLf, "<br>") & .htmlbody
    17. .Display
    18. With .GetInspector.WordEditor.Application.Selection
    19. .Start = Len(sMailtext): .Paste ' Grafik in Mail einfügen
    20. End With
    21. End With
    22. End Sub


    viele Grüße
    Karl-Heinz
    Hallo Baem,

    meinst Du so?

    Visual Basic-Quellcode

    1. ​Private Sub Versand5()
    2. ' Sendet Mail mit integriertem Bereich als Bereich mit Signatur
    3. Dim WSh As Worksheet
    4. Dim sMailtext As String
    5. Dim sBer As String
    6. Set WSh = ThisWorkbook.Sheets("Protokoll") ' Blatt mit Maildaten
    7. sBer = "B1:G" & WSh.Cells(Rows.Count, "B").End(xlUp).Row ' Kopierbereich
    8. WSh.Range(sBer).Copy ' Bereich kopieren
    9. With CreateObject("Outlook.Application").CreateItem(0)
    10. .BodyFormat = 2 ' 2=HTML-Format, 3=Richtext
    11. .Subject = "Protokoll vom " & WSh.Range("G7") ' Betreff
    12. .To = "SMA" ' Empfänger
    13. sMailtext = "Hallo,¶Ihre Daten:¶¶" ' Mailbodytext
    14. sMailtext = Replace(sMailtext, "¶", vbLf) ' Umbrüche einfügen
    15. .GetInspector ' Signatur holen
    16. .htmlbody = Replace(sMailtext, vbLf, "<br>") & .htmlbody
    17. .Display
    18. With .GetInspector.WordEditor.Application.Selection
    19. .Start = Len(sMailtext): .Paste ' Grafik in Mail einfügen
    20. End With
    21. End With
    22. End Sub


    Gruß
    Karl-Heinz