VBA: Jahr aus Kalender auslesen ohne now()

Moderator: ModerationP

VBA: Jahr aus Kalender auslesen ohne now()

Beitragvon YviDee » 24. Jul 2018, 12:14

Hallo Zusammen,
ich möchte einen Geburtstagskalender in Outlook 365 erstellen, der auch das Alter angibt. Diesen, einigen sicherlich bekannten Code, habe ich gefunden und bereits ein bisschen bearbeitet. Jetzt berechnet er aber das Alter mit dem Enddatum der Systemzeit now(). Das hat aber zur Folge, dass wenn man in das nächste Jahr schaut, die Person gleich alt ist. Ich hätte deshalb gerne, dass er das Alter mit dem Datum des Kalendereintrages berechnet. Wer weiß wie?

Code: Alles auswählen
Sub AlterAnzeigen()
 
Dim myNameSpace As NameSpace
 
Dim Alter As String
Dim Zaehler
Dim GebJahr
 
Set myolApp = CreateObject("Outlook.Application")
Set myNameSpace = myolApp.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(olFolderCalendar).Folders("Geburtstage LF")
Set myitems = myFolder.Items
 
Zaehler = 0
 
'Suche nach dem Begriff "Geburtstag von" in allen Kalendereinträgen
For i = myitems.Count To 1 Step -1
    'Prüfung der Kalendereinträge auf den Text "Geburtstag von"
    'und Überprüfung ob es sich um ein ganztägiges Ereignis handelt
    If InStr(myitems(i).Subject, "Geburtstag von") _
    And myitems(i).AllDayEvent = True Then
      myitems(i).Display
      GebJahr = myitems(i).GetRecurrencePattern.PatternStartDate
      'KalJahr = myitems(i).GetRecurrencePattern.PatternEndDate 'Hier soll das Kalenderjahr gezogen werden
      Alter = DateDiff("yyyy", GebJahr, Now())                    'Hier wird das Alter errechnet
      myitems(i).Location = "( " + Alter + ")"
      myitems(i).Save
      myitems(i).Close 0
      Zaehler = Zaehler + 1    'Zähler für die Anzahl der geänderten Einträge
    End If
Next
 
MsgBox "Fertig!" & vbCrLf & Zaehler & " Geburtstagseinträge geändert.", vbInformation, "Geburtstage angepasst "
End Sub



Vielen Dank und Gruß
Office 365
YviDee
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3
Registriert: 24. Jul 2018, 12:06

Re: VBA: Jahr aus Kalender auslesen ohne now()

Beitragvon DerHoepp » 24. Jul 2018, 14:55

Moin,

Ein Blick in die Onlinehilfe verrät:
ein AppointmentItem hat eine .Start-Property. Die sollte auch bei AllDayEvent-Items gefüllt sein:
Code: Alles auswählen
Alter = DateDiff("yyyy", GebJahr, myitems(i).Start)                   


Aber änderst du bei wiederkehrenden Ereignissen nicht automatisch alle Items der Terminserie?

Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7137
Registriert: 14. Mai 2013, 11:08

Re: VBA: Jahr aus Kalender auslesen ohne now()

Beitragvon Michael Bauer » 25. Jul 2018, 05:59

Hallo,

wenn Du das "bearbeitet" hast und es vorher funktionierte, dann ist die Lösung ja naheliegend...

Der gezeigte Part berechnet nicht anhand des EndDatums, denn das ist ja auskommentiert. Start enthält die Startzeit des einzelnen Vorkommens, PatternStartDate das der Serie.
Michael Bauer
Add-Ins für Microsoft Outlook
Benutzeravatar
Michael Bauer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6333
Registriert: 03. Feb 2005, 15:07
Wohnort: Vollersode

Re: VBA: Jahr aus Kalender auslesen ohne now()

Beitragvon YviDee » 25. Jul 2018, 08:00

Ersteinmal vielen Dank für eure Antworten,
@ derHoepp
wenn ich das so eingebe dann ist als Alter = 0

@ Michael Bauer
es hat vorher nicht funktioniert. Ich hab lediglich den Folder
Code: Alles auswählen
Set myFolder = myNameSpace.GetDefaultFolder(olFolderCalendar).Folders("Geburtstage LF")

und die Anzeige
Code: Alles auswählen
myitems(i).Location = "(" + Alter + ")"
geändert. Das auskommentiert war ein Versuch, dann ist die Person aber über 2000 Jahre alt.

Momentan werden die Personen aus heutiger Sicht jedes Jahr gleich alt (Bezug Systemzeit)). Bin ich im richtigen Jahr werden sie auch älter, aber ich würde gerne heute sehen wie alt sie in ein paar Jahren sind. Und natürlich habe ich diverse Hilfeseiten und Foren durchkämt.
Office 365
YviDee
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3
Registriert: 24. Jul 2018, 12:06

Re: VBA: Jahr aus Kalender auslesen ohne now()

Beitragvon Michael Bauer » 25. Jul 2018, 11:16

Das liegt daran, wie Serienelemente verwaltet werden. Wirklich gespeichert wird nur ein Element, das ist die Serie. Vom Start abgesehen sind alle Daten für alle Vorkommen gleich. Die Vorkommen werden erst zur Anzeige berechnet. Andernfalls müßten bei einer Endlosserie endlos viele Einträge im Kalender gespeichert werden.

Du kannst jedes einzelne Vorkommen über RecurrencePattern.GetOccurrence(datum) abrufen und ändern; das erzeugt dann eine Ausnahme und wird gespeichert. Dann mußt Du Dir nur noch überlegen, wie weit das in die Zukunft reichen soll: Endlosserie = endlos viele Vorkommen
Michael Bauer
Add-Ins für Microsoft Outlook
Benutzeravatar
Michael Bauer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6333
Registriert: 03. Feb 2005, 15:07
Wohnort: Vollersode

Re: VBA: Jahr aus Kalender auslesen ohne now()

Beitragvon YviDee » 25. Jul 2018, 12:09

Aha, verstehe. Vielen Dank!
Dann werde ich wohl dabei bleiben.
Office 365
YviDee
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3
Registriert: 24. Jul 2018, 12:06


Zurück zu Outlook Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste