VBA Datum vergleichen und neu speichern?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich hab dir mal kurz was zusammengebastelt. Den Code musst du bei "Diese Arbeitsmappe" einfügen.

Private Sub Workbook_Open()
Dim aktuelleZelle As Range
Dim olApp As Outlook.Application
Dim olApt As Outlook.AppointmentItem
Dim i As Integer

If MsgBox("Sollen jetzt neue Erinnerungen in Outlook generiert werden?", vbYesNo) = vbYes Then
    For Each aktuelleZelle In Sheets("Tabelle1").Range("A15:A90")
        If IsDate(aktuelleZelle.Value) Then
            If aktuelleZelle.Value < Date - (5 * 7) Then
                ' Reminder in Outlook erstellen
                Set olApp = GetObject(, "Outlook.Application")
                
                Set olApt = olApp.CreateItem(olAppointmentItem)
                olApt.Start = aktuelleZelle.Value + (6 * 7)
                olApt.AllDayEvent = True
                olApt.ReminderSet = True
                olApt.Subject = "Älter als 5 Wochen"
                olApt.Save
            End If
        End If
    Next aktuelleZelle
End If
End Sub

Du solltest in der Excel aber evtl. noch eine Spalte anlegen, in der steht, welche Termine schon in Outlook eingetragen sind, sonst legt dir die Prozedur jedes mal alle Termine neu an, die älter als 5 Wochen sind.

Statt dem Range("A15:A90") kannst du auch einen benannten Bereich in der Tabelle definieren, den du dann nach Lust und Laune größer oder kleiner ziehen kannst.


Blacckoutbash 
Fragesteller
 22.07.2019, 10:10

Hallo, wow erstmal vielen Dank für deine Antwort. Das mit einer neuen Spalte wird leider nicht klappen denn die Tabelle wird aus dem SAP jedesmal überschrieben somit müsste man das jedesmal manuell machen, gibts da keine Block lösung, dass wenn schon ein Eintrag ist, diese nicht erneut eingetragen wird?

1
daCypher  22.07.2019, 10:13
@Blacckoutbash

Das macht die Sache auf jeden Fall komplizierter. Gibt's da vielleicht eine eindeutige Nummer, die man in die Erinnerung reinschreiben kann? Dann könnte man alle Erinnerungen aus Outlook auslesen und nur die Erinnerungen von den Nummern erstellen, die in Outlook nicht gefunden werden.

2
Blacckoutbash 
Fragesteller
 22.07.2019, 10:23
@daCypher

Vielen Dank hat geklappt, jedoch bekomme ich den Fehler Index out of Range bzw Index außerhalb des gültigen Bereichs, woran kann das liegen?

1
daCypher  22.07.2019, 10:25
@Blacckoutbash

Ja, es muss bei DieseArbeitsmappe rein, damit es beim Öffnen der Arbeitsmappe automatisch aufgerufen wird. Wenn du es in ein Modul rein machst, ist es einfach nur ein Makro, was "Workbook_open" heißt, aber was du dann manuell starten müsstest.

Bitteschön :)

2
Iamiam  22.07.2019, 23:50
@daCypher

Erst mal DH für den Lösungsweg!

ich denke, xl unterstützt immer noch Auto_Open-Makros, die sich dann selbst starten. Kanns aber in meinem Uralt-xl nicht nachprüfen.

1
daCypher  23.07.2019, 08:48
@Iamiam

Kann gut sein, dass es da noch einen zweiten Weg über irgendwelche Optionen gibt. Ich hab jetzt die Variante genommen, die ich kenne. Wenn man halt in "DieseArbeitsmappe" eine Prozedur namens Workbook_Open() anlegt, dann wird es beim Öffnen der der Excel-Datei automatisch gestartet

2
daCypher  23.07.2019, 08:53
@Blacckoutbash

Wo kommt denn der Fehler "Index out of Range"? Das bedeutet normalerweise, dass du versuchst, auf ein Listenelement oder ein Tabellenelement zuzugreifen, was es nicht gibt. Also z.B. wenn du eine Liste mit 7 Einträgen hast und versuchst, auf das achte zuzugreifen, oder wenn du versuchst, auf die Zelle "A0" zuzugreifen oder sowas. Denk auch dran, dass VBA (und auch die meisten anderen Programmiersprachen) in der Regel bei 0 anfangen zu zählen. Also wenn du eine Liste mit 7 Elementen hast, sind sie von 0 - 6 nummeriert und es gibt kein Element mit der Nummer 7.

1
Blacckoutbash 
Fragesteller
 22.07.2019, 10:15

Ich bekomme leider auch den Fehler Benutzerdefinierter Typ nicht definiert bei "Dim olApp As Outlook.Application" aber vielen vielen Dank du hast mich gerettet, ich war schon am Zweifeln und durch googlen habe ich mich immer mehr verwirrt. Aber dass das jedesmal erneut eingetragen wird ist denke ich nicht so schlimm, denn es wird nur einmal im Monat ausgeführt somit sollte das kein Problem sein.

1
daCypher  22.07.2019, 10:17
@Blacckoutbash

Achso, stimmt, hab ich vergessen. Du musst im VBA-Editor unter Extras > Verweise noch die "Microsoft Outlook 14.0 Object Library" (bzw. statt 14.0 halt das, was da ist) anhaken, damit Excel die Outlook Objekte findet.

2
Blacckoutbash 
Fragesteller
 22.07.2019, 10:34
@daCypher

Vielen Dank hat geklappt, jedoch bekomme ich den Fehler Index out of Range bzw Index außerhalb des gültigen Bereichs, woran kann das liegen? Fehler tritt beim Debuggern nach For Each aktuelleZelle.... auf.

1

Nicht getestet, einfach mal so niedergeschrieben aus dem Kopf:

Private Sub Workbook_Open()
  Const start = 1      ' indidiuell anpassen
  Const ende = 1000    ' indidiuell anpassen
  Const spalte = 2     ' indidiuell anpassen
  Dim l as Long
  Dim actDate as Date, warnDate as Date, setDate as Date
  Dim chDate as Date
  actDate = Date
  warnDate = actDate + 35 ' Heute + 5 Wochen
  For l = start to ende
      chDate = Cells(l,spalte).Value
      If chDate > warnDate Then
            setDate =  chDate - 7 ' Die Woche vorab
           setDate_in_Outlook setDate ' siehe unten
      End If
  Next l
End Sub

Die Sub "setDate_in_Outlook" mit dem Parameter setDate kannst Du Dir hieraus abkupfern:

https://www.stallwanger.net/wordpress/outlook-vba-termin-automatisch-erstellen-aus-excel-daten/

Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich