在行事曆中搜尋在指定期間內部分或完全發生的約會
這個主題會說明一個 Visual Basic for Applications (VBA) 程式碼範例,範例中會使用 Jet 查詢來搜尋預設的行事曆,找出在特定開始時間和特定結束時間 (即指定期間) 內發生的約會。 此查詢會傳回完全在指定期間內發生,亦即於開始時間當時或之後開始,並於結束時間當時或之前結束的約會。
此查詢也會傳回與期間重疊的約會,包括在指定期間開始之前即開始但在指定期間結束、在指定期間開始但在指定期間結束之後才結束,以及在開始時間之前即開始並在結束時間之後才結束 (亦即與整個指定期間重疊的約會)。 傳回的結果會包含週期性約會。
您可能會認為在開始日期或開始日期之後,以及結束日期或結束日期之前,查詢約會應該是方法。 若要如此,就要使用下列查詢:
[Start] >= myStart AND [End] <= myEnd
不過,若要可靠地尋找所有完全在該期間內發生的約會 ,以及 與時段重迭的約會,您必須使用查詢來尋找在該期間結束時間開始或之前的約會,並在該期間的開始時間或之後結束。 若要如此,就要使用下列查詢:
[Start] <= myEnd AND [End] >= myStart
如果想要清除行事曆中,於指定期間內發生的所有約會,就需要找出與指定期間重疊的約會。 在這種情況下,只查詢在指定期間內開始及結束的約會是不夠的。
程式 FindApptsInTimeFrame
代碼範例中的 函式會先定義要查詢的時間週期,並將開始時間 myStart
指派為目前系統日期的上午 12:00,以及結束時間 myEnd
,在開始時間後五天。 它還會取得預設行事曆資料夾中所有的項目。
若要在查詢中包含週期性約會,它會將 Items.IncludeRecurrences 設定為 True ,然後依 AppointmentItem.Start 屬性排序專案。 然後,它會針對在 或 之前 myEnd
開始,並在 或之後 myStart
結束的所有約會,建置查詢。 然後使用 Items.Restrict 方法,將查詢套用至預設行事曆資料夾中的專案,然後列印所有傳回約會的開始時間。
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
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應