このトピックでは、Jet クエリを使用して、特定の開始時刻から終了時刻までの期間に発生する予定を既定の予定表フォルダーで検索する Visual Basic for Applications (VBA) の例を示します。 このクエリは、この期間内に全体的に発生する予定、つまり、開始時刻以降に開始され、終了時刻以前に終了する予定を返します。
また、この期間と重なる予定、つまり、期間が始まる前に開始され期間内に終了する予定、期間内に開始され期間が終わってから終了する予定、および開始時刻前に開始され終了時刻より後に終了する (期間全体と重なる) 予定も返します。 返される結果には、定期的な予定が含まれます。
たとえば、開始日以降に開始され、終了日以前に終了する予定を照会するとします。 これは、次のようなクエリになります。
[Start] >= myStart AND [End] <= myEnd
ただし、期間内に完全に発生するすべての予定 と期間と 重複するすべての予定を確実に見つけるには、期間の終了時刻以前に開始し、期間の開始時刻以降に終了する予定を検索するクエリを使用する必要があります。 This would translate to the following query:
[Start] <= myEnd AND [End] >= myStart
特定の期間と重なる予定を考慮に入れるのは、その期間に発生するすべての予定を予定表から削除する場合に便利です。 この場合、特定の期間内に開始および終了する予定を照会するだけでは十分ではありません。
コード サンプルの関数は FindApptsInTimeFrame
、最初にクエリを実行する期間を定義し、 myStart
開始時刻を現在のシステム日付の午前 12 時 00 分として、終了時刻 myEnd
を開始時刻の 5 日後として割り当てます。 既定の予定表フォルダー内のすべてのアイテムを取得します。
クエリに定期的な予定を含めるために、 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 のサポートおよびフィードバックを参照してください。