次の方法で共有


ある期間内の予定のうちで件名に特定の語を含むものを予定表で検索する

このトピックでは、厳密に今後 30 日以内に発生し、件名に "team" という語を含む予定を既定の予定表で検索する Visual Basic for Applications (VBA) の例を示します。 返される結果には、定期的な予定が含まれます。

コード サンプルの関数は FindAppts 、2 つの異なるクエリを使用して検索を実行します。最初に、日付範囲内で開始および終了する定期的な予定を含む予定を検索してから、件名に "team" を持つ日付範囲の条件を満たす予定を検索します。 この手順の概要を次に示します。

  1. FindAppts 最初にクエリを実行する期間を定義し、 myStart開始時刻を現在のシステム日付の午前 12:00 に、終了時刻 myEndを開始時刻の 30 日後として割り当てます。

  2. 既定の予定表フォルダー内のすべてのアイテムを取得します。

  3. 定期的な予定を含む日付範囲内のすべての予定アイテムを厳密に含めるために、 Items.IncludeRecurrencesTrue に設定し、 AppointmentItem.Start プロパティで項目を並べ替えます。

  4. 以降で開始し、 の前後で myStart終了するすべての予定に対する最初のクエリが myEnd作成されます。 このクエリは Jet クエリです。

  5. Items.Restrict メソッドを使用して、既定の予定表フォルダー内のアイテムにクエリを適用します。

  6. 件名に "team" という語が含まれている予定を抽出する 2 つ目のクエリを作成します。 DAV 検索と検索 (DASL) クエリで部分文字列の一致に キーワードを使用 like します。

  7. 最初のクエリから返された、期間の抽出基準に一致する一連の予定に対して、2 つ目のクエリを適用します。

  8. 最終的に返されたすべての予定の開始時刻を並べ替えて出力します。

重複する予定アイテムを含め、特定の日付の範囲内に厳密に収まらない場合は、最初のクエリを、予定が で始まるか、 myEnd前に始まり、 の後で終わるクエリに myStart変更する必要があることに注意してください。 詳細については、「方法: 特定の期間に部分的または全体的に発生する予定を予定表で検索する」を参照してください。

Sub FindAppts()

    Dim myStart As Date
    Dim myEnd As Date
    Dim oCalendar As Outlook.folder
    Dim oItems As Outlook.items
    Dim oItemsInDateRange As Outlook.items
    Dim oFinalItems As Outlook.items
    Dim oAppt As Outlook.AppointmentItem
    Dim strRestriction As String

    myStart = Date
    myEnd = DateAdd("d", 30, myStart)

    Debug.Print "Start:", myStart
    Debug.Print "End:", myEnd
          
    'Construct filter for the next 30-day date range
    strRestriction = "[Start] >= '" & _
    Format$(myStart, "mm/dd/yyyy hh:mm AMPM") _
    & "' AND [End] <= '" & _
    Format$(myEnd, "mm/dd/yyyy hh:mm AMPM") & "'"
    'Check the restriction string
    Debug.Print strRestriction
    Set oCalendar = Application.session.GetDefaultFolder(olFolderCalendar)
    Set oItems = oCalendar.items
    oItems.IncludeRecurrences = True
    oItems.Sort "[Start]"
    'Restrict the Items collection for the 30-day date range
    Set oItemsInDateRange = oItems.Restrict(strRestriction)
    'Construct filter for Subject containing 'team'
    Const PropTag  As String = "https://schemas.microsoft.com/mapi/proptag/"
    strRestriction = "@SQL=" & Chr(34) & PropTag _
        & "0x0037001E" & Chr(34) & " like '%team%'"
    'Restrict the last set of filtered items for the subject
    Set oFinalItems = oItemsInDateRange.Restrict(strRestriction)
    'Sort and Debug.Print final results
    oFinalItems.Sort "[Start]"
    For Each oAppt In oFinalItems
        Debug.Print oAppt.Start, oAppt.Subject
    Next
End Sub

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。