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 myEnd
Tage 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 myEnd
beginnen und auf oder nach myStart
enden. 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.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für