Bei erreichen eines Datums sollte eine Mail versendet werden

  • Excel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Bei erreichen eines Datums sollte eine Mail versendet werden

    Hallo zusammen,

    so etwas ähnliches wurde auch schon mal gestellt aber ich werde daraus nicht schlau.

    Es geht um Folgendes: Ich habe 2 Arbeitsblättern mit unterschiedlichen Werten. Das wichtigste ist jedoch die Spalte Zeitraum Ende. Hier möchte ich eine Mail erhalten wenn das Datum überschritten bzw. erreicht ist. Als Mailprügramm nutze ich Outlook. Der Empfänger steht rechts daneben. Mir ist wichtig das die Mail einmal den Kunden und die Maßnahme erhält und vom zweiten Arbeitsblatt die Zeichnungsnummer, Kunden und Maßnahme.
    Die Maßnahmen können Kundenspezifisch gehalten werden oder auf bestimmte Baugruppen des Kunden, Daher ist auch das Ende-Datum unterschiedlich, da es durchaus sein kann, dass wir bei dem Kunde generell Maßnahmen treffen welche dann an Tag X aufgehoben werden und dennoch Maßnahmen zu einer Baugruppe weiterlaufen ggf. auch in einer separaten Abteilung daher auch in Tabelle 2 die Spalte Zeichnungsnummer. Für unterschiedliche Kunden können auch unterschiedliche Maßnahmen getroffen werden. Die Maßnahmen sind auf einem anderen Arbeitsblatt hinterlegt und werden durch ein Dropdown Feld ausgewählt. Die andern Spalten werden dann automatisch ausgefüllt. Wichtig wäre es in erster Linie eine Mail zu erhalten dass, eine Maßnahme abläuft ggf. mit einem Vorlauf von 1 Woche, hierfür kann ich dann aber eine neue Spalte kreieren. Dann wäre es schön identifizieren zu können welche Maßnahme abläuft --> Das wäre dann ja der Text der Mail. --> Vorstellung: Sehr geehrter Herr Mustermann, die Maßnahme "1" des Kunden "X" läuft zum 30.02.2029 aus, bzw. Sehr geehrter Herr Mustermann, die Maßnahme "1" des Kunden "X" mit der Zeichnungsnummer "Y" läuft zum 30.02.2023 aus.

    Leider sind meine VBA Kenntnisse nicht vorhanden daher bitte ich es wie einem kleinen Kind zu erklären. Ich wollte eigentlich die VBA Methode umgehen finde jedoch keine Formel mit der dies gelingt.

    Ich hoffe ich habe mein Problem ausreichend geschildert.

    Vielen lieben Dank bereits vorab für die Hilfe.

    P.s. Ein Superlativ wäre es auch noch wenn ich die Datei durch eine VBA Programmierung dazu bringen kann sich selbst zu öffnen ggf. die Mails schickt und dann auch wieder zu schließen. Oder ist dies Wunschdenken?
    Dateien

    Marcus schrieb:

    wenn ich die Datei durch eine VBA Programmierung dazu bringen kann sich selbst zu öffnen

    Wie soll das gehen? Die Datei muss schon manuell oder vom System aufgerufen werden. Man könnte sie als Cronjob (Windows-Aufgabenplanung/Taskplaner) anlegen.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Das mit dem selber öffnen wäre ja nur der Superlativ. Da ich keine Ahnung von VBA-Programmierung habe weiß ich es auch nicht. Das mit dem Cronjob bzw. Windows scheduled Task. DAs kannte ich vorhin noch nicht. DAnke. Leider kann ich diesen noch nicht "anlegen" da mir dazu die vollständig richtige Excel fehlt. Aber ich kann mir das mit dem Cronjob gern mal anschauen. Es sollte wenigstens das mit der Mail funktionieren. Diesen Code habe ich.

    VB.NET-Quellcode

    1. Imports System.Net.Mail
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim Msg As New MailMessage
    5. Dim myCredentials As New System.Net.NetworkCredential
    6. myCredentials.UserName = "mp_1992@hotmail.de"
    7. myCredentials.Password = "*****"
    8. Msg.IsBodyHtml = False
    9. Dim mySmtpsvr As New SmtpClient()
    10. mySmtpsvr.EnableSsl = True 'SSL aktivieren
    11. mySmtpsvr.Host = "smtp.live.com"
    12. mySmtpsvr.Port = 25
    13. mySmtpsvr.UseDefaultCredentials = False
    14. mySmtpsvr.Credentials = myCredentials
    15. Try
    16. Msg.From = New MailAddress("mp_1992@hotmail.de")
    17. Msg.To.Add("Don_Perser@live.de")
    18. Msg.Subject = "HEY"
    19. Msg.Body = "HALLOOOOOOOO"
    20. mySmtpsvr.Send(Msg)
    21. MsgBox("E-Mail gesendet.", MsgBoxStyle.Information, Title:="Information")
    22. Catch ex As Exception
    23. MsgBox(Err.Number & ex.Message & ex.StackTrace.ToString) 'Falls ein Fehler auftritt wird eine MsgBox angezeigt
    24. End Try
    25. End Sub
    26. End Class

    jetzt muss ich ja nur noch hinzufügen wann er welchen Text schicken soll? Also bei Erreichen eines Datums aus der Zeile mit den Spalten Kunde und Zeichnung.

    Der Einfachheit halber würde ich dann in dem einen Arbeitsblatt die Spalte Zeichnungen hinzufügen und dort dann einfach "Alle" hinterlegen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marcus“ ()

    Das erklärt schon mal vieles.
    Wie gesagt leider bin ich was VBA angeht sehr unwissentlich.

    Ich habe nun einen Basic VBA Code fürd as Senden von mails gefunden:

    Visual Basic-Quellcode

    1. Sub SendMail()
    2. Dim MyEmail As MailItem
    3. Set MyEmail = Application.CreateItem(olMailItem)
    4. With MyEmail
    5. .To = "<type your recipient email address/ess here>" --> Hier gebe ich die Empfängermail ein
    6. .Importance = olImportanceHigh
    7. .Subject = "<type the subject of your email here>" --> Hier würde ich den Titel Beendigung der Maßnahme wählen
    8. .Body = "<type the email message text here>" --> Hier müsste ja dann der Kunde und die Zeichnungsnummer stehen welche in meiner Excel durch Formatierung rot wird ( bei erreichen des Datums)
    9. .BodyFormat = olFormatHTML
    10. .Display
    11. End With
    12. 'I purposely commented the next line, uncomment it by removing the "'" sign to send your email.
    13. ' MyEmail.Send
    14. End Sub



    Ist das so in der richtigen Richtung?

    Ichhabe dies mal so versucht und meine Mail als Empfänger angegeben und musste leider feststellen das gar nichts passiert

    *VB-BBCode eingefügt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Gibt es denn eine Fehlermeldung? Auf den ersten Blick sieht das ganz OK aus. Im Gegensatz zu deinem .NET-Quellcode wird hier einfach nur Outlook gefüttert und nicht wirklich eine Mail über einen Server versandt.

    Ich nehme stark an, dass man Outlook noch als Verweis im Projekt einrichten muss. Ist das geschehen? Menü Extras – Verweise. Also die Bibliothek muss eingebunden werden, damit olMailItem bekannt ist.

    Ich rate dringend dazu, falls noch nicht geschehen, ganz oben in jedem Modul, jeder Form usw., also in jeder Quellcodeansicht, ein Option Explicit ganz oben zu schreiben (1. Zeile des ganzen "Dokuments").
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo Marcus,

    Dein Code kann m.E. allenfalls in Outlook selbst funktionieren:
    Application.CreateItem(olMailItem)

    Wenn Du Daten aus Excel in der Mail verwenden möchtest, solltest Du die Mail von Excel aus organisieren. Hierzu nachfolgend mal ein einfaches Beispiel.

    In Deinem Code setzt Du das HTML-Format für die Mail (.BodyFormat = olFormatHTML), füllst aber den Body und nicht den HTML-Body. Verwende .htmlbody= um eine HTML-Mail zu erzeugen. Die Formatvorgabe kann man sich dann auch sparen.
    HTML-Mails können super formatiert werden, es müssen dann aber auch HTML-Tags verwendet werden.
    Im u.a. Beispiel setzte ich auch gleich die Standardsignatur unten drunter. Das wollen die meisten ja auch.
    Viele retten diese erst mal in eine Variable. Das kann man sich jedoch sparen, wenn der HTML-Body in einem Rutsch gefüllt wird.

    Abschließend: Es gibt tausend Möglichkeiten von Text formatieren, Bilder/Bereiche einfügen, Anlagen dran hängen, Prioritäten setzen und, und...

    Visual Basic-Quellcode

    1. Sub SendMail()
    2. With CreateObject("Outlook.Application").CreateItem(0)
    3. .GetInspector.Display ' Signatur holen, Mail anzeigen
    4. .Subject = "Mein Betreff" ' Betreff
    5. .htmlBody = "Sehr geehrter Herr Mustermann,<br><br>" _
    6. & "die Maßnahme " & Range("A1").Value & " des Kunden " & Range("B1").Value _
    7. & " mit der Zeichnungsnummer " & Range("C3").Value _
    8. & "läuft zum 30.02.2023 aus.<br><br>" _
    9. & .htmlBody ' Bodytext incl. Signatur setzen
    10. .To = "Mustermann@web.de" ' Empfänger
    11. .Cc = ""
    12. End With
    13. End Sub


    Gruß
    Karl-Heinz

    Marcus Gräfe schrieb:

    Ich nehme stark an, dass man Outlook noch als Verweis im Projekt einrichten muss. Ist das geschehen?


    Nein das ist nicht geschehen.


    Wie rufst du den Code auf?


    Über Alt +F11


    Und: wo hast du den Code eingefügt?

    Unter VBA Projekt und dort unter "Diese Arbeitsmappe"


    Sub SendMail()
    With CreateObject("Outlook.Application").CreateItem(0)
    .GetInspector.Display ' Signatur holen, Mail anzeigen
    .Subject = "Mein Betreff" ' Betreff
    .htmlBody = "Sehr geehrter Herr Mustermann,<br><br>" _
    & "die Maßnahme " & Range("A1").Value & " des Kunden " & Range("B1").Value _
    & " mit der Zeichnungsnummer " & Range("C3").Value _
    & "läuft zum 30.02.2023 aus.<br><br>" _
    & .htmlBody ' Bodytext incl. Signatur setzen
    .To = "Mustermann@web.de" ' Empfänger
    .Cc = ""
    End With
    End Sub



    das hört sich doch schon mal ganz gut an. Nur bin ich ein Newbie. Ich gehe aber davon aus das die Grüne Schrift für mich die Tätigkeit darstellt die vorangegangen Zeile in meinen Wunsch zu editieren nur was mache ich in Zeile 3. Und dann habe ich noch das Problem das ich noch eine Regel brauche (zeitlich) wann die Mail abgesendet werden soll.


    Das ist doch schon recht kompliziert für mich..... Habe mir gedacht das es doch einfacher gehen muss. Da ich ja Outlook verwende habe ich mir überlegt ob ich nicht anhand einer Zeile ein Kalenderereignis erstellen kann??
    Mit der Frage "Wie rufst du den Code auf?" von @petaod war gemeint, wie du die Prozedur SendMail aufrufst. Die wird nicht wie von Zauberhand ausgeführt, nur weil der Quellcode irgendwo im Projekt steht. Es gibt nur 2 Möglichkeiten: manuelles Ereignis (z. B. Klick auf einen Button) oder automatisches Ereignis (z. B. Timer oder Laden des Dokuments).

    Marcus schrieb:

    die Grüne Schrift

    Das sind Kommentarzeilen. Die kommentieren einfach den Code zum besseren Verständnis. In Zeile 3 musst du nichts anpassen.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Am liebsten wäre es mir natürlich wenn es automatisch geht.

    ich glaube ich sollte wahrscheinlich erst mal einen Kurs besuchen^^

    Selbst einen Outlook Termin aus einer Excel Zelle zu generieren läuft über VBA. Ist ja ganz toll die ganzen Funktionen jedoch sollte man diese auch nutzen können.

    Marcus schrieb:

    Am liebsten wäre es mir natürlich wenn es automatisch geht.
    Welche Art von Automatismus hättest du gerne?

    Beim Öffnen des Excel-Worksheet?
    Beim Klick auf einen Button?
    Alle 5 Sekunden?
    Beim Drücken einer Tastenkombination?
    Beim Speichern des Worksheet?
    Sobald in einer Zelle ein bestimmter Inhalt eingetragen wird?
    Beim Doppelklick auf eine Zelle?

    Es ist immer ein Event notwendig, um eine Aktion auszulösen.
    Davon gibt es in Excel inflationär viele, die du abfangen kannst.
    Aber ohne Event geht erst mal gar nichts.
    Wäre ja auch schlimm, wenn plötzlich wahllos aller Code ausgeführt würde, der sich irgendwo im Projekt befindet.

    Marcus schrieb:

    ich glaube ich sollte wahrscheinlich erst mal einen Kurs besuchen
    Du kannst dir für den Anfang auch erst mal ein Video-Tutorial reinziehen.
    So was zum Beispiel (zufällig gegoogelt, es gibt auch genügend andere).

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()