Durchsuchen des Kalenders nach Terminen, die teilweise oder vollständig in einem festgelegten Zeitraum liegen

In diesem Thema wird ein Codebeispiel in Visual Basic für Applikationen (VBA) gezeigt, das eine Jet-Abfrage verwendet, um im Standardkalenderordner nach Terminen zu suchen, die in einem festgelegten Zeitraum mit einer bestimmten Start- und Endzeit vorkommen. Die Abfrage gibt Termine zurück, die vollständig in diesem Zeitraum liegen und mit oder nach der Startzeit beginnen sowie mit oder vor der Endzeit enden.

Die Abfrage gibt außerdem Termine zurück, die mit dem Zeitraum überlappen, einschließlich solcher, die vor dem Anfang des Zeitraums beginnen, aber innerhalb des Zeitraums enden, solcher, die innerhalb des Zeitraums beginnen, aber nach dem Ende des Zeitraums enden, sowie solcher, die vor der Startzeit beginnen und nach der Endzeit enden und somit den gesamten Zeitraum überlappen. Die zurückgegebenen Ergebnisse umfassen auch Terminserien.

Möglicherweise denken Sie, dass die richtige Herangehensweise darin besteht, Termine abzufragen, die mit oder nach dem Startdatum beginnen und mit oder vor dem Enddatum enden. Hierzu wird folgende Abfrage verwendet:

[Start] >= myStart AND [End] <= myEnd

Um jedoch zuverlässig alle Termine zu finden, die vollständig innerhalb des Zeitraums stattfinden und sich mit dem Zeitraum überlappen, müssen Sie eine Abfrage verwenden, die nach Terminen sucht, die am oder vor der Endzeit des Zeitraums beginnen und an oder nach der Startzeit des Zeitraums enden. Hierzu wird folgende Abfrage verwendet:

[Start] <= myEnd AND [End] >= myStart

Die Berücksichtigung der Termine, die mit dem festgelegten Zeitraum überlappen, ist nützlich, wenn Sie alle in diesem Zeitraum liegenden Termine im Kalender löschen möchten. In diesem Fall ist die Abfrage von ausschließlich Terminen, die innerhalb dieses festgelegten Zeitraums beginnen und enden, nicht ausreichend.

Die FindApptsInTimeFrame Funktion im Codebeispiel definiert zunächst den Zeitraum für die Abfrage, wobei die Startzeit ( myStart) als 12:00 Uhr am aktuellen Systemdatum und die Endzeit fünf myEndTage nach der Startzeit zugewiesen wird. Die Funktion ruft alle Elemente im Standardkalenderordner ab.

Um wiederkehrende Termine in die Abfrage einzuschließen, legt sie Items.IncludeRecurrences auf True fest und sortiert die Elemente dann nach der AppointmentItem.Start-Eigenschaft . Anschließend wird die Abfrage für alle Termine erstellt, die mit oder vor myEndbeginnen und auf oder nach myStartenden. Anschließend wird die Abfrage mithilfe der Items.Restrict-Methode auf Elemente im Standardkalenderordner angewendet und dann die Startzeit aller zurückgegebenen Termine ausgegeben.

Sub FindApptsInTimeFrame()
    Dim myStart As Date
    Dim myEnd As Date
    Dim oCalendar As Outlook.folder
    Dim oItems As Outlook.items
    Dim oResItems As Outlook.items
    Dim oAppt As Outlook.AppointmentItem
    Dim strRestriction As String
     
    myStart = Date
    myEnd = DateAdd("d", 5, myStart)
    Debug.Print "Start:", myStart
    Debug.Print "End:", myEnd
     
    Set oCalendar = Application.session.GetDefaultFolder(olFolderCalendar)
    Set oItems = oCalendar.items
     
    oItems.IncludeRecurrences = True
    oItems.Sort "[Start]"
     
    strRestriction = "[Start] <= '" & Format$(myEnd, "mm/dd/yyyy hh:mm AMPM") _
    & "' AND [End] >= '" & Format(myStart, "mm/dd/yyyy hh:mm AMPM") & "'"
    Debug.Print strRestriction
     
    'Restrict the Items collection
    Set oResItems = oItems.Restrict(strRestriction)
     
    For Each oAppt In oResItems
        Debug.Print oAppt.Start, oAppt.Subject
    Next
End Sub

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.