Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1612to1616
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Code Email versenden per Outlook

VBA Code Email versenden per Outlook
08.03.2018 09:53:19
Markus
Hallo zusammen,
ich hoffe, ihr könnt mir weiter helfen.
Ich möchte, dass wenn in der Beispieldatei im Tabellenblatt "Aufgaben" in Spalte D das Datum wie in Zelle B2 (heute) ist eine Automatische Email per Outlook verschickt wird an die Emailadresse aus der Zelle B1.
Betreff der Email soll lauten: " Aufgabe fällig"
Der Text in der Email soll dann der Text der jeweiligen Zeile sein aus Spalte B.
Also z.B. Wenn in Zeile 5 das Datum erreicht ist soll eine Email generiert werden mit dem Betreff "Aufgabe fällig" und der Text soll lauten: "Birnen tauschen"
Für eure Hilfe wäre ich euch sehr dankbar!
VG
Markus
https://www.herber.de/bbs/user/120279.xlsm

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code Email versenden per Outlook
08.03.2018 10:15:37
Beverly
Hi Markus,
das könntest du z.B. so lösen:
Private Sub Workbook_Open()
Dim obNachricht As Object
Dim obMail As Object
Dim lngZeile As Long
Set obMail = CreateObject("Outlook.Application")
With Worksheets("Aufgaben")
For lngZeile = 1 To IIf(IsEmpty(.Cells(.Rows.Count, 4)), .Cells(.Rows.Count, 4).End( _
xlUp).Row, .Rows.Count)
If .Cells(lngZeile, 1) = .Range("B2") Then
Set obNachricht = obMail.CreateItem(0)
With obNachricht
.To = .Range("B1")
.Subject = "Aufgabe fällig"
.Body = .Cells(lngZeile, 2)
.ReadReceiptRequested = False
.send
End With
Set obNachricht = Nothing
End If
Next lngZeile
End With
Set obMail = Nothing
End Sub



Anzeige
AW: VBA Code Email versenden per Outlook
08.03.2018 10:33:54
Markus
Hallo Beverly,
vielen Dank für Deine Antwort.
Doch leider funktioniert das bei mir dann nicht.
Könntest Du den Code bitte in meine Bespieldatei einfügen und hier wieder hochladen?
Das wäre wirklich lieb!
WAS funktioniert nicht?
08.03.2018 10:43:08
Beverly
Hi Markus,
mit solchen lapidaren Antworten wie "Doch leider funktioniert das bei mir dann nicht" kann leider niemand etwas anfangen. Du musst schon genauer angeben, WAS nicht funktioniert - löst der Code einen Fehler aus, macht er nicht was er soll und wenn ja - WAS macht er falsch?
Der Code gehört ins Codemodul DieseArbeitsmappe, damit die Mail beim Öffnen der Mappe versandt wird.


Anzeige
AW: WAS funktioniert nicht?
08.03.2018 11:03:35
Markus
Hi Beverly,
Ok, dann nun genauer, es passiert gar nichts, weder ein Emailversand, noch eine Fehlermeldung.
Der Code ist wie beschrieben in DieseArbeitsmappe.
Die Emailadresse ist in der Bespieldatei geändert, also an der liegt es nicht.
Wo liegt dann der Fehler?
https://www.herber.de/bbs/user/120282.xlsm
Ein, zwei kleine Dinge...
08.03.2018 13:25:33
Case
Hallo, :-)
... musst Du noch ändern: ;-)
"If .Cells(lngZeile, 1)" - mach aus der 1 eine 4.
".To = .Range("B1")" und ".Body = .Cells(lngZeile, 2)" - durch den Punkt beziehst Du dich auf "obNachricht", das kann nicht klappen. Entweder Du entfernst den Punkt, dann muss aber klar sein, dass es nur funktioniert, wenn Du bei Ausführung des Makros im Tabellenblatt "Aufgaben" bist. Oder Du schreibst es bei beiden davor ".To = Worksheets("Aufgaben").Range("B1").Text".
Das ist jetzt nicht entscheidend für die Schlacht, aber Du musst die Schleife nicht in Zeile 1 anfangen lassen, wenn Deine Daten in Zeile 5 anfangen.
Dann sollte es eigentlich klappen. ;-)
Servus
Case

Anzeige
AW: WAS funktioniert nicht?
08.03.2018 14:47:55
Beverly
Hi Markus,
ändere den Code wir folgt:
Private Sub Workbook_Open()
Dim obNachricht As Object
Dim obMail As Object
Dim lngZeile As Long
Set obMail = CreateObject("Outlook.Application")
With Worksheets("Aufgaben")
For lngZeile = 5 To IIf(IsEmpty(.Cells(.Rows.Count, 4)), .Cells(.Rows.Count, 4).End( _
xlUp).Row, .Rows.Count)
If .Cells(lngZeile, 4) = .Range("B2") Then
Set obNachricht = obMail.CreateItem(0)
With obNachricht
.To = Worksheets("Aufgaben").Range("B1")
.Subject = "Aufgabe fällig"
.Body = Worksheets("Aufgaben").Cells(lngZeile, 2)
.ReadReceiptRequested = False
'.send
.display
End With
Set obNachricht = Nothing
End If
Next lngZeile
End With
Set obMail = Nothing
End Sub


Anzeige
AW: WAS funktioniert nicht?
09.03.2018 08:22:07
Markus
Guten Morgen ihr beiden,
vielen Dank für eure Hilfe, nun funktioniert es! :-)
Ich hätte nur noch 2 kleine Ergänzungen falls das machbar ist....
Und zwar soll die Email auch versandt werden, wenn das Datum nich gleich heute ist, sondern auch wenn es in der Vergangenheit liegt.
In beiden Fällen soll die Email aber nur versandt werden, wenn in Spalte E das Wort "offen" steht....
Für eure Hilfe danke ich euch schon mal im Voraus!
VG
Markus
https://www.herber.de/bbs/user/120302.xlsm
Unklare Fragestellung
09.03.2018 08:57:57
Beverly
Hi Markus,
also hat das ganze nichts mit dem Datum zu tun wie in deinem Eröffnungsbeitrag sondern damit, ob in Spalte E "offen" steht? Und wie soll dann festgestellt werden, ob vielleicht bereits (irgendwann) eine Mail gesendet wurde? Soll die Mail jeden Tag gesendet werden, wenn die Mappe geöffnet wird? Oder wie stellst du dir das ganze konkret vor?


Anzeige
AW: Unklare Fragestellung
09.03.2018 09:20:55
Markus
Hi Beverly,
So dann versuche ich meine Frage deutlicher zu stellen :-)
Doch es hat schon etwas mit dem Datum zu tun und ist so wie es jetzt momentan läuft auch gut so.
Nur wird die Mail nur dann geschickt, wenn es genau das Datum ist.
Im Prinzip soll beim öffnen der Datei die Spalte auf das Datum überprüft werden, wenn das Datum in Spalte D heute oder in der Vergangenheit liegt und in Spalte E "offen" steht, dann soll eine Email verschickt werden.
Das wäre meine Vorstellung.
Wie das von Dir dargestellte Problem mit den bereits versendeten Mails überprüft werden kann weiß ich nicht, daher habe ich die Spalte E eingefügt mit einer zweiten Abfrage. Es sei denn, Du hättest da eine bessere Lösung....
VG
Markus
Anzeige
AW: Unklare Fragestellung
09.03.2018 09:37:34
Beverly
Hi Markus,
ich nehme an mit "offen" meinst du, dass die Aufgabe noch nicht erfüllt wurde? Dann würde ich eine zusätzliche Spalte verwenden und dort z.B. ein "x" eintragen, wenn die Mail gesendet wird - beim nächsten Durchlauf wird diese Aufgabe dann nicht berücksichtigt. Wenn du der Meinung bist, dass die Mail irgendwann doch nochmal gesendet werden soll, löschst du einfach das x von Hand.
    With Worksheets("Aufgaben")
For lngZeile = 5 To IIf(IsEmpty(.Cells(.Rows.Count, 4)), _
.Cells(.Rows.Count, 4).End(xlUp).Row, .Rows.Count)
If .Cells(lngZeile, 4)  "x" Then
Set obNachricht = obMail.CreateItem(0)
With obNachricht
.To = Worksheets("Aufgaben").Range("B1")
.Subject = "Aufgabe fällig"
.Body = Worksheets("Aufgaben").Cells(lngZeile, 2)
.ReadReceiptRequested = False
'.send
.display
End With
Set obNachricht = Nothing
.Cells(lngZeile, 6) = "x"
End If
End If
Next lngZeile
End With

Oder meinst du etwas anderes?


Anzeige
AW: VBA Code Email versenden per Outlook
12.03.2018 10:41:17
Markus
Guten Morgen Beverly,
vielen Dank noch einmal für Deine Hilfe!
Ja so hatte ich mir das vorgestellt, Du bist echt spitze!
Nur hat der letzte von Dir geschriebene Code nicht funktioniert, aber wahrscheinlichi habe ich auch nur etwas falsch gemacht.
Ich habe ihn umgeschrieben und jetzt funktioniert es......
Wenn ich Dich aber noch einmal um Deine Hilfe bitten dürfte, denn momentan gehen alle Mails an die Emailadresse in Zelle B2. Das wollte ich auch so.
Ist es aber auch möglich, dass die Mails an eine Emailadresse die ich in der Spalte 7 der jeweiligen Zeile schreibe sende?
Der momentane Code sieht so aus:
Private Sub Workbook_Open()
Dim obNachricht As Object
Dim obMail As Object
Dim lngZeile As Long
Set obMail = CreateObject("Outlook.Application")
With Worksheets("Aufgaben")
For lngZeile = 5 To IIf(IsEmpty(.Cells(.Rows.Count, 4)), .Cells(.Rows.Count, 4).End( _
xlUp).Row, .Rows.Count)
If .Cells(lngZeile, 4)  "x" Then
Set obNachricht = obMail.CreateItem(0)
With obNachricht
.To = Worksheets("Aufgaben").Range("B1")
.Subject = "Aufgabe fällig"
.Body = Worksheets("Aufgaben").Cells(lngZeile, 2)
.ReadReceiptRequested = False
.send
'.display
End With
Set obNachricht = Nothing
End If
Next lngZeile
End With
Set obMail = Nothing
End Sub
VG
Markus
Anzeige
AW: VBA Code Email versenden per Outlook
12.03.2018 11:28:53
Beverly
Hi Markus,
ändere Worksheets("Aufgaben").Range("B1") in Worksheets("Aufgaben").Cells(lngZeile, 7)


77 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige