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