"Serienmail" aus Excel via Outlook scheitert beim zweiten Durchlauf

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von mumpel.

    "Serienmail" aus Excel via Outlook scheitert beim zweiten Durchlauf

    Hallo liebe Spezialisten,

    ich benötige wieder einmal eure Hilfe. Ich arbeite mit Outlook 2013 und Excel 2013.

    Ich habe ein VBA Makro erstellt, bei dem aus einer Pivot-Tabelle relevante Personen ausgelesen werden. Pro Person soll dann der Pivot-Tabellen Inhalt kopiert und als Mail an die Person verschickt werden.

    Der erste Durchlauf funktioniert wunderbar. Sobald jedoch eine Mail an die zweite Person verschickt werden soll, erhalte ich die Fehlermeldung "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt". Der Fehler tritt auf, wenn das Makro die Zeile ".to = mail_name" ausführen soll. Die Variable "mail_name" ist aber korrekt mit der zweiten Person gefüllt (=itm). Die Funktion "RangetoHTML" habe ich jetzt nicht mit beigefügt. Diese funktioniert eigentlich wunderbar.

    Hat jemand eine Idee wo hier mein Fehler ist, bzw. wie ich diesen Code noch optimieren könnte?

    Vielen Dank für Eure Hilfe.

    Liebe Grüße

    Jörg

    Sub MailSenden()
    Dim objNachricht As Object
    Dim objmail As Object
    Dim mail_name As String
    Dim mail_vorname As String
    Dim str As String
    Dim LZ As Long 'letzte Zeile
    Dim rng As Range

    Set objmail = CreateObject("Outlook.Application")
    Set objNachricht = objmail.CreateItem(0)
    Set Pivot_Table = ActiveSheet.PivotTables("PivotTable2").PivotFields

    Pivot_Table( _
    "[4 - Persons].[Employee Name].[Employee Name1]").VisibleItemsList = Array( _
    "[4 - Persons].[Employee Name].[Employee Name1].[GROUPMEMBER.[Employee_NameXl_Grp_1]].[4 - Persons]].[Employee Name]].[All]]]", _
    "[4 - Persons].[Employee Name].[Employee Name1].[GROUPMEMBER.[Employee_NameXl_Grp_2]].[4 - Persons]].[Employee Name]].[All]]]", _
    "[4 - Persons].[Employee Name].[Employee Name1].[GROUPMEMBER.[Employee_NameXl_Grp_3]].[4 - Persons]].[Employee Name]].[All]]]")

    Pivot_Table("[4 - Persons].[Employee Name].[Employee Name]").VisibleItemsList = Array("")

    For Each itm In Pivot_Table("[4 - Persons].[Employee Name].[Employee Name]").PivotItems

    Pivot_Table("[4 - Persons].[GfK Employee Name].[Employee Name1]").VisibleItemsList = Array("")
    Pivot_Table("[4 - Persons].[GfK Employee Name].[Employee Name]").VisibleItemsList = Array(itm)

    LZ = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
    Set rng = Range("A10:I" & LZ)
    rng.Copy

    PositionEnd = Len(itm)

    positionStart = InStrRev(itm, "&[", PositionEnd) + 2
    mail_name = Mid(itm, positionStart, PositionEnd - positionStart)
    mail_vorname = Left(mail_name, Len(mail_name) - InStr(mail_name, " ") - 1)
    If mail_name = "xxx" Or mail_name = "yyy" Then GoTo Naechster

    '*********************

    With objNachricht
    .getInspector
    .To = mail_name
    .CC = yyy@yyy.com
    .Subject = "Aktuelle Übersicht Angebote vom " & Format(Now, "dd-mm-yy h-mm-ss")
    .HTMLBody = "<font size=""2"" face=""Arial"" >" & _
    "Hallo " & mail_vorname & "," & "<br>" & "<br>" & _
    "<hr noshade size=1 width=100%>" & _
    RangetoHTML(rng) & "<br>" & "<br>" & "<br>" & .HTMLBody 'fügt die Signatur mit ein
    .Display 'oder .send
    End With

    Set objNachricht = Nothing
    Set objmail = Nothing
    Set rng = Nothing

    '***************

    Naechster:
    Next itm

    End Sub
    Hallo Henry,

    super 1000 Dank - das wars. So simple und ich wäre fast verzweifelt.

    Was ich allerdings jetzt eben festgestellt habe, ist das mir das Makro nun alle "Serienmails" in eine einzige Mail schreibt. Er erzeugt eine Mail, schreibt die Daten von Person 1 in diese Mail, schreibt aber direkt darunter dann im nächsten Schritt die Daten von Person 2 usw. So dass ich zum Schluss eine einzige Mail mit den Infos aller Personen haben, statt getrennte E-Mails. Hast du hier noch eine Idee?

    Schöne Grüße

    Jörg
    Hallo Henry,

    vielen Dank für deine schnelle Hilfe. Leider funktioniert dieses Vorgehen nicht. Es kommt ebenfalls die Fehlermeldung "91".

    Ich habe jetzt aber einmal "with objmail.createitem(0)" geschrieben, statt objnachricht und nun klappt alles wie gewünscht.

    Nochmals danke für deine Zeit.

    Schöne Grüße

    Jörg
    Hallo!

    Die Schleife muss eigentlich vor "Set objmail = CreateObject("Outlook.Application")" beginnen und nach "Next itm" enden. Ich kann den Beispielcode aber nicht lesen, da mal wieder kein Code-Tag verwendet wurde.

    Gruß, René