Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
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

Automatische Mail bei Datum

Automatische Mail bei Datum
05.05.2020 08:57:56
Andi
Hallo zusammen,
es tut mir sehr Leid, aber ich muss nochmal eine schon oft beantwortete Frage stellen, weil ich einfach nicht klarkomme den Code an meine Datei anzupassen.
Rahmenbedingungen:
- Meine Tabelle wird jeden Tag manuell geöffnet.
- Die Tabelle soll beim öffnen automatische eine Mail versenden sobald ein Datum überschritten ist.
- Der Empfänger steht immer in Spalte D
- Das Datum des Eintrags steht immer in Spalte E. Ausgehend von diesem Datum soll nach X Tagen (immer der gleiche Wert) die Mail geschickt werden.
- Die Mail soll nur einmal verschickt werden. Das Makro muss also, wie in einer anderen Lösung beschrieben, einen Eintrag in die entprechende Zeile, bei Spalte X machen, sobald die Mail versendet wurde, damit die Mail nicht mehrfach abgeschickt wird.
-Betreff der Mail soll sein: Fristablauf: %Spalte C% läuft in X Tagen ab
- Body soll sein:
Inhalt: %SpalteF%
%SpalteG%
Ich habe unter anderem diesen Code gefunden:

Sub auto_open()
Dim rCell As Range
Dim objApp As Object
Dim objMailItm As Object
Dim tBRng As String
Dim tReceiver As String
tBRng = "A11:A" & Sheets("ToDo").UsedRange.Rows.Count
tReceiver = Sheets("ToDo").Range("B4")
'    Set objApp = CreateObject("Outlook.Application")
For Each rCell In Sheets("ToDo").Range(tBRng)
If IsDate(rCell.Offset(0, 5).Value) Then
If rCell.Offset(0, 5) - Date " & vbCrLf & _
"wird am " & rCell.Offset(0, 5).Value & " fällig!"
.Send
End With
rCell.Offset(0, 9).Value = True
Set objMailItm = Nothing
End If
End If
Next
Set objApp = Nothing
End Sub

Quelle: https:\/\/www.herber.de/forum/archiv/876to880/878916_Mail_aus_Excel_heraus_automatisch_versenden.html
Weiß aber nicht wie ich den anpassen kann.
Ich weiß es ist viel erwartet, aber könnte mir jemand erklären wie der Code arbeitet oder was ich tun muss?
Vielen Dank im voraus für die Mühe
Andi

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatische Mail bei Datum
05.05.2020 16:37:09
volti
Hallo Andi,
schau mal, ob der nachfolgende Code in Deinem Sinne ist. Ggf. noch hier und da anpassen.
Ohne Datei ist es etwas schwierig zu testen....
Code in die Zwischenablage
Private Sub Workbook_Open()
'Sub sendet Mails lt. Liste
 Dim sTxt As String, sSignatur As String
 Dim WSh As Worksheet, oMail As Object
 Dim iZeile As Long, iAnz As Integer
 Set WSh = ThisWorkbook.Sheets("ToDo")          'Tabellenblatt
 With CreateObject("Outlook.Application")
 
  For iZeile = 2 To WSh.UsedRange.Rows.Count + 1
   If WSh.Cells(iZeile, "X").Value = "" Then    'Mail noch nicht gesendet
    If WSh.Cells(iZeile, "D").Value <> "" Then  'Empfänger ist vorhanden
     
     If CDate(WSh.Cells(iZeile, "E").Value) <= Date Then
      Set oMail = .CreateItem(0)                'Mail kreieren
      With oMail
        .Getinspector: sSignatur = .body        'Signatur retten
        .Subject = "Fälligkeitswarnung"         'Betreff
        .Importance = 1                         'Wichtigkeit
       .To = WSh.Cells(iZeile, "D").Value       'Empfänger aus Liste
       .CC = ""                                 'Kopieempfänger
       .BCC = ""                                'Blindkopie
       sTxt = "Hallo," & vbCrLf _
              & vbCrLf & "die Tätigkeit <" _
              & WSh.Cells(iZeile, "F").Value _
              & ">" & vbCrLf & "wird am " _
              & WSh.Cells(iZeile, "D").Value _
              & " fällig!"
       .body = sTxt & sSignatur                 'Body setzen mit Signatur
       .display                                 'Mail anzeigen
       WSh.Cells(iZeile, "X").Value = "gesendet" 'Merker setzen
      End With
      Set oMail = Nothing
      iAnz = iAnz + 1                           'Anzahl Mails zählen
     End If
    End If
   End If
  Next iZeile
 
  If iAnz > 0 Then
    sTxt = "Bitte jetzt die Mails absenden!"
  Else
    sTxt = "Nicht zu tun!"
  End If
  MsgBox sTxt, vbInformation, "Mail senden"
 End With
End Sub

viele Grüße
Karl-Heinz

Anzeige
AW: Automatische Mail bei Datum
05.05.2020 16:48:33
volti
Nachtrag:

DIM X as Integer
X=5
If CDate(WSh.Cells(iZeile, "E").Value) <= (Date + X) Then

VG KH
AW: Automatische Mail bei Datum
05.05.2020 17:20:32
Andi
Hallo Karl-Heinz,
vielen Dank für deine Mühe. Bei dir kommt zumindest schonmal ein Ergebnis :-)
Er sagt jetzt allerdings immer "Nichts zu tun."
Deinen Code finde ich toll, weil ich schonmal nachvollziehen kann wie das Ding arbeitet. Mit deinem nachtrag verstehe ich auch, dass der Code das Datum aus E nimmt, und eine Mail sendet wenn seitdem 5 Tage oder mehr vergangen sind, richtig? (Sorry für die vielen Fragen, aber ich will es verstehen lernen, also Danke für die vielen Anmerkungen. Das hilft mir sehr.
Ich habe jetzt ein paar Mal mit dem Datum gespielt, aber er sagt mir immer wieder, dass er nichts zu tun hat.
Was mache ich da denn falsch?
Eine Beispieldatei habe ich jetzt auch, Danke für den Hinweis:
https:\/\/www.herber.de/bbs/user/137284.xlsm
Anzeige
AW: Automatische Mail bei Datum
05.05.2020 18:15:24
volti
Hallo Andi,
das Tool nimmt als Grundlage den UsedRange. In Deiner Datei gehören die ersten beiden Zeilen nicht dazu.
Begonnen wird mit der zweiten Zeile (1. ist die Überschrift) des UsedRange
und dann darf in Spalte $X nichts stehen, muss also leer sein, ansonsten nimmt er an, dass schon versendet worden ist.
Also, bitte oben in Zeile 1 beginnen mit der Überschrift, ab zweiter Zeile dann die Nutzdaten...
Gesendet wird nur, wenn
  • In $X nichts steht, also leer ist
  • in $D ein Empfänger steht, also nicht leer ist
  • Das Datum im Feld<Heute+X ist

viele Grüße
Karl-Heinz
Anzeige
AW: Automatische Mail bei Datum
06.05.2020 12:07:53
Andi
Hallo Karl-Heinz,
das ist echt toll. Ich habe noch ein bisschen rumprobiert und ein paar Sachen leicht angepasst.
Zwei Dinge verstehe ich noch nicht. Vielleicht kannst du mir hier noch weiterhelfen:
- Kommt das Verhalten, dass die Tabelle in der ersten Zeiledie Überschrift haben muss und der Working Range ab Zeile 2 muss über die Formulierung "For iZeile = 2 To WSh....."? Oder was macht diese Funktion?
- Ich wollte noch eine weitere Prüfung einbauen:
If WSh.Cells(iZeile, "W").Value = "" Then 'Vorgang nicht bereits abgeschlossen.
Ich bekomme dann aber den "Fehler beim Kompilieren: Next ohne For". Ich verstehe nicht warum. Das liegt an der neu eingefügten prüfung, aber weiter komme ich nicht.
Mit dieser Zeile möchte ich prüfen ob in Spalte W ein Datum eingetragen ist, wenn kein Datum drin steht, soll er weitermachen und die Mail senden. Wenn eins drinsteht, ist der Vorgang bereits abgeschlossen und er muss nichts weiter prüfen (für diese Zeile)
Ansonsten nochmal vielen, vielen Dank! Das st echt perfekt und spart mir ne Menge Arbeit.
Anzeige
AW: Automatische Mail bei Datum
06.05.2020 14:29:12
volti
Hallo Andi,
For iZeile = 2 To WSh....."?
Mit der zweiten Zeile des UsedRange (normalerweise von Zeile 1 bis x) beginnen, da die erste die Überschrift ist.
If WSh.Cells(iZeile, "W").Value = "" Then
Der Code ist ok, aber Du musst auch noch ein End If dazu setzen (am besten vor das Next iZeile….
Ich bekomme dann aber den "Fehler beim Kompilieren: Next ohne For". Ich verstehe nicht warum. Das liegt an der neu eingefügten prüfung, aber weiter komme ich nicht.
Das ist genau die Fehlerbeschreibung End If fehlt oder ist an falscher Stelle.
viele Grüße
Karl-Heinz
Anzeige
AW: Automatische Mail bei Datum
06.05.2020 16:36:02
Andi
Perfekt. Es geht jetzt alles. Ich Danke dir vielmals für die Lösung, und dass ich das verstehen konnte!
Viele GRüße

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige