3.6k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

ich habe folgenden Code für den Export von im Excel erzeugten .pdf Dateienanhängen ins Outlook 2010:

Sub Versenden()
Sheets("VersandTab").Select
Dim oOL As Object
Dim oOLMsg As Object
Dim oOLRecip As Object
Dim oOLAttach As Object
Dim iRow As Integer, iCounter As Integer
Dim sFile As String, sRec As String, sSub As String
Dim sBody As String
Dim bln
Application.ScreenUpdating = False
Application.DisplayStatusBar = True
bln = Application.DisplayStatusBar
iRow = Cells(Rows.Count, 1).End(xlUp).Row
Set oOL = CreateObject("Outlook.Application")
For iCounter = 2 To iRow
sRec = Cells(iCounter, 1)
sFile = Cells(iCounter, 2)
'MsgBox sFile
sSub = Cells(iCounter, 3)
sBody = Cells(iCounter, 4)
Application.StatusBar = "Sende Datei " & sFile & " an " & sRec & "..."
'MsgBox Application.StatusBar
Set oOLMsg = oOL.CreateItem(0)
With oOLMsg
Set oOLRecip = .Recipients.Add(sRec)
.Subject = sSub
.Body = sBody & vbLf & vbLf
Set oOLAttach = .Attachments.Add(sFile)
.Send
End With
oOLRecip.Resolve
Next iCounter
Set oOL = Nothing
Application.StatusBar = False
Application.DisplayStatusBar = bln
End Sub

Der Code funktioniert einwandfrei. Allerdings habe ich mehrere Outlook-Konten und möchte daraus ein bestimmtes "muster@web.de" ansteuern. Ich habe dieses im Outlook auch als Standardkonto festgelegt, es wird aber leider vom Code nicht angesteuert. Hat jemand einen Tipp???
Gruß
Andreas

11 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Andreas!

Das was Du vor hast, geht erst ab Excel 2007. Da Du etwas von Excel 2010 schreibst, sollte es also funktionieren.

Ich habe mal Deinen Code entsprechend geändert, aber nicht getestet, da ich keine Zeit habe, mir Deine Datei und die Umgebung nachzubauen.

Bevor Du allerdings den Code testest, musst Du in der VBA-Umgebung in der Menüleiste unter „Extras =>Verweise…“ den Verweis auf "Microsoft Outlook 14.0 Object Library“ auswählen, da es sonst nicht funktioniert. Außerdem habe ich zum Testen die „.Send-Methode“ auskommentiert und dafür die „.Display-Methode“ aktiviert, damit die Mails nicht gesendet, sondern nur erzeugt und angezeigt werden. Musst Du wieder zurück ändern.

Sub Versenden()
Sheets("VersandTab").Select
Dim oOL As Outlook.Application
Dim oOLMsg As Outlook.MailItem
Dim oOLRecip As Object
Dim oOLAttach As Object
Dim iRow As Integer, iCounter As Integer
Dim sFile As String, sRec As String, sSub As String
Dim sBody As String
Dim bln

Application.ScreenUpdating = False
Application.DisplayStatusBar = True

bln = Application.DisplayStatusBar
iRow = Cells(Rows.Count, 1).End(xlUp).Row

Set oOL = CreateObject("Outlook.Application")
For iCounter = 2 To iRow
sRec = Cells(iCounter, 1)
sFile = Cells(iCounter, 2)
'MsgBox sFile
sSub = Cells(iCounter, 3)
sBody = Cells(iCounter, 4)
Application.StatusBar = "Sende Datei " & sFile & " an " & sRec & "..."
'MsgBox Application.StatusBar
Set oOLMsg = oOL.CreateItem(olMailItem)
With oOLMsg
Set oOLRecip = .Recipients.Add(sRec)
.Subject = sSub
.Body = sBody & vbLf & vbLf
Set oOLAttach = .Attachments.Add(sFile)
.SendUsingAccount = .Session.Accounts(4) 'Die Zahl in der Klammer gibt das Sendekonto an
'.Send
.Display
End With
oOLRecip.Resolve
Next iCounter

Set oOL = Nothing

Application.StatusBar = False
Application.DisplayStatusBar = bln
End Sub


Die Methode, die den Absender vorgibt, ist die „.SendUsingAccount = .Session.Accounts(4) 'Die Zahl in der Klammer gibt das Sendekonto an“.

Nachfolgend nochmal der Code nur für das Versenden aus meinem Fundus ohne Deine ganzen anderen Variablen usw.

Option Explicit

Sub Mail_senden()
'Verweis auf Microsoft Outlook 14.0 Object Library setzen
Dim oApp As Outlook.Application
Dim oMail As Outlook.MailItem

Set oApp = CreateObject("OUTLOOK.Application")
Set oMail = oApp.CreateItem(olMailItem)
With oMail
.To = "" 'Empfänger
.cc = "" 'Kopie
.bcc = "" 'Blindkopie
.Subject = "" 'Betreff
.Body = "" 'E-Mailnachricht
.Attachments.Add "" 'Dateianhang
.SendUsingAccount = .Session.Accounts(4) 'Die Zahl in der Klammer ist das Sendekonto
'.Send 'Nachricht wird sofort gesendet
.Display 'Nachricht wird nicht gesendet, sondern in Outlook geöffnet
End With
End Sub


Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Oliver,

das ist ja genial..!!!!
Ich habe jetzt nur noch ein kleines Problem. Es wird das richtige Konto ausgewählt beim Senden, allerdings übernimmt er nicht die für dieses Konto eingestellte Signatur für ausgehende Post. Hast du da etwa auch einen Tipp??
Danke im Voraus und viele Grüße
Andreas
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Oliver,

erhalte Fehlermeldung, dass diese Typen nicht definiert sind. Habe ich die vlt. nicht in meinem Outlook 2010?

Dim oOL As Outlook.Application
Dim oOLMsg As Outlook.MailItem

Gruß
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Andreas!

Wenn es einmal bei Dir funktioniert hat, dann sollte auch weiterhin funktionieren. Du musst natürlich nach dem Setzen des Verweis Deine Datei einmal abspeichern, damit dieser Verweis dauerhaft für diese Datei beim Öffnen gesetzt wird.

Solltest Du den VBA-Code auf einem anderen Rechner jetzt testen, dann musst Du natürlich wieder

Bevor Du allerdings den Code testest, musst Du in der VBA-Umgebung in der Menüleiste unter „Extras =>Verweise…“ den Verweis auf "Microsoft Outlook 14.0 Object Library“ auswählen, da es sonst nicht funktioniert.

beachten.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,
ne leider klappt das nicht mit den beiden benutzerdefinierten Typen, obwohl ich das Häkchen gesetzt habe....??
Hat du noch einen Hinweis zur fehlenden Signatur?
Andreas
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Andreas!

Du schreibst in Antwort 2 so, als ob Du es getestet hast und es funktionierte. Ist das so?

Zur Signatur: Ändere in Deinem Makro die Zeile

Set oOLMsg = oOL.CreateItem(olMailItem)
in

Set oOLMsg = oOL.CreateItem(0)
und füge nach

With oOLMsg
in der nächsten Zeile

.GetInspector.Display
ein. Dass sollte Dir die Signatur einfügen. Ich kann das hier im Moment noch nicht testen, da ich hier im Moment nur Excel 2003 zur Verfügung habe und das geht aber erst ab Excel 2007. Ansonsten kann ich das erst heute Abend testen, da habe ich alle Versionen zur Verfügung.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,

den Test habe ich erst nach der ersten Antwort durchgeführt, der Fehler ist also schon beim ersten Durchlauf aufgetreten.

Ich habe jetzt auch die kleine Korrektur zur Signatur vorgenommen, wie du beschrieben hast:

....
For iCounter = 2 To iRow
sRec = Cells(iCounter, 1)
sFile = Cells(iCounter, 2)

sSub = Cells(iCounter, 3)
sBody = Cells(iCounter, 4)
Application.StatusBar = "Sende Datei " & sFile & " an " & sRec & "..."
Set oOLMsg = oOL.CreateItem(0)

With oOLMsg

.GetInspector.Display
Set oOLRecip = .Recipients.Add(sRec)
.Subject = sSub
.Body = sBody & vbLf & vbLf
Set oOLAttach = .Attachments.Add(sFile)
.Send
End With
oOLRecip.Resolve
Next iCounter
.........
Leider kommt die Signatur damit auch nicht auf die mail...
Danke schon mal für deine Geduld!!!!
Andreas
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Andreas!

Nachfolgendes Makro funktioniert so, wie Du es Dir vorgestellt hast. Ich habe das nicht in Dein Makro eingebaut, da ich das nicht testen kann (Grund siehe AW1) und da ich davon ausgehe, dass Du Dir das selber so eintragen kannst, wie Du es benötigst. Außerdem kann ein anderer User mit gleichem Problem besser etwas mit einem universellen Makro anfangen.

Sub Mail_senden_mit_Signatur()
Dim strSignatur As String
Dim oApp As Object
Dim oMail As Object

Set oApp = CreateObject("OUTLOOK.Application")
Set oMail = oApp.CreateItem(0)

With oMail
.To = "Mail@web.de" 'Empfänger
.cc = "" 'Kopie
.bcc = "" 'Blindkopie
.Subject = "Testbetreff" 'Betreff
.GetInspector.Display 'Signatur anzeigen
Set .SendUsingAccount = .Session.Accounts.Item(2) 'Die Zahl in der Klammer ist das Sendekonto
strSignatur = .HTMLBody 'Signatur zwischenspeichern
.HTMLBody = "Testnachricht" & strSignatur 'E-Mailnachricht mit Signatur
'.Send
.Display
End With

Set oApp = Nothing
Set oMail = Nothing
End Sub


Mit obigem Makro kann die Absenderadresse angegeben werden und es wird die Signatur eingeblendet.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Oliver,

dein Code funktioniert einwandfrei, genauso wie es sein soll. Jetzt muss ich noch hinkriegen. dass er in meiner Umgebung genauso klappt.
Vielen Dank!!!
Andreas
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Oliver,

ich habe deinen Code jetzt auch in meiner Programmumgebung - funktioniert suuuper!
Vielen Dank für deine umfangreiche Unterstützung und Geduld!!!!
Deine Lösung ist perfekt!!
Andreas
...