E-Mail automatisch aus Excel versenden

Hallo Chris, klappt Super. Nun hab ich doch noch ein Problem. Wenn ich das Sheet schließe und wieder öffne versendet er wieder alle Emails. Wie Kriege ich es hin, dass er nur noch an neu hinzugekommene Email-Adressn versendet?

Vielen Dank

Set Outlook = CreateObject(„Outlook.Application“)

dann müssen wir das senden manuell auslösen:

Sub mailto()
Dim Outlook As Object, MyMessage As Object
Set Outlook =_
CreateObject(„Outlook.Application“)
Set Mail = Outlook.CreateItem(0)
'Spalten: A=Adresse, B=Betreff,C=Text, D=Status
'von=von Zeile; bis= bis Zeile

von=2:bis=1002

for Z=von to bis
if cells(z,4)„gesendet“ and cells(z,1)"" then
With Mail
.To = cells(z,1) 'Adresse
.Subject = cells(z,2)'Betreff
.Body = cells(z,3) 'Text
.Send
End With
cells(z,4)=„gesendet“
endif
next Z

Set Outlook = Nothing
Set Mail = Nothing
End Sub

ersetze die Function durch eine Sub
diese nimmt aus den Zeilen 2 bis (hier 1002) aus der ersten Spalte die Adresse usw. und schreibt nach dem senden ein „gesendet“ in Spalte D. Nur die Adresse, bei denen nicht „gsendet“ in Spalte D steht werden gesendet.
Der Auslöser könnte dann eine Schaltfläche sein, auf die du drücken musst…
Spalten und Zeile lassen sich leicht anpassen.

Super. Super. Super.

Herzlichen Dank

Hab es direkt ausprobiert. Kleine Tabelle mit 5 Datensätzen. Wenn ich das Makro auslöse schickt er es an die erste Adresse und schreibt gesendet in D. Allerdings kommt dann ein Laufzeitfehler 2147221238 - das Element wurde verschoben oder gelöscht. Wenn ich das Makro wieder auslöse macht er mit dem 2. Datensatz weiter, aber dann wieder die Fehlermeldung. Kannst Du Dir das erklären?

Danke

Thomas

Hab es direkt ausprobiert. Kleine Tabelle mit 5 Datensätzen. Wenn ich das Makro auslöse schickt er es an die erste Adresse und schreibt gesendet in D. Allerdings kommt dann ein Laufzeitfehler 2147221238 - das Element wurde verschoben oder gelöscht. Wenn ich das Makro wieder auslöse macht er mit dem 2. Datensatz weiter, aber dann wieder die Fehlermeldung. Kannst Du Dir das erklären?

Habe gerade gemerkt, dass er das beim letzen Datensatz nicht macht mit der Fehlermeldung.

Danke

Thomas

Hallo Thomas,

probier mal diese Anpassung:

Sub mailto()
Dim Outlook As Object, MyMessage As Object
Set Outlook =_
CreateObject(„Outlook.Application“)

'Spalten: A=Adresse, B=Betreff,C=Text, D=Status
'von=von Zeile; bis= bis Zeile

von=2:bis=1002

for Z=von to bis
if cells(z,4)„gesendet“ and cells(z,1)"" then
Set Mail = Outlook.CreateItem(0)
With Mail
.To = cells(z,1) 'Adresse
.Subject = cells(z,2)'Betreff
.Body = cells(z,3) 'Text
.Send
End With
cells(z,4)=„gesendet“
Set Mail = Nothing
endif
next Z

Set Outlook = Nothing

End Sub

mit

„Mail = Outlook.CreateItem(0)“ und
„Set Mail = Nothing“

innerhalb der Z-Schleife

Gruß
Chris

Hi Chris,

es klappt:smile: Du bist der Beste:smile:

Herzlichen Dank

Thomas

Hallo Chris, ich schon wieder:smile: Das weißt Du nicht zufällig auch?

Zuhause (Outlook 2007) funktioniert das mit Deinem Makro hervorragend, in der Firma (Outlook 2010) erzeugt es die Fehlermeldung:
Laufzeitfehler: -2147467259 (80004005)
Outlook kennt mindestens einen Namen nicht

Mein e-mail-Konto läuft in der Firma über einen Exchange Server. Ich denke es muss irgendwie daran liegen oder?

Danke

Thomas

Hallo,
der küzeste Weg, aus Excel eine Mail zu generieren ist über ein Makro:

Sub Mailing()
Dim empfänger As String
ActiveWorkbook.SendMail Recipients:=empfänger, Subject:=„Test“
End Sub

Innerhalb einer Funktion geht es m.W. nicht - es muss schon ein Makro her.

Das o.a. Makro kann man natürlich mit entsprechenden Bedingungen versehen.

Gruß,
Ptonka