Поделиться через


Поиск встреч, тема которых содержит определенное слово, из определенного диапазона дат в календаре

В этой статье представлен пример кода на языке Visual Basic для приложений (VBA), находящий встречи в календаре по умолчанию, которые происходят только в течение следующих 30 дней и содержат слово "team" в теме. Возвращенные результаты включают повторяющиеся встречи.

Функция FindAppts в примере кода выполняет поиск с помощью двух разных запросов: сначала выполняется поиск встреч, включая повторяющиеся встречи, которые начинаются и заканчиваются в диапазоне дат, а затем выполняется поиск встреч, соответствующих критериям диапазона дат, для которых в теме есть команда. Ниже приведено описание этих шагов:

  1. FindAppts First определяет период времени для запроса, назначая время начала , myStartкак 12:00 утра на текущую системную дату, и время окончания , myEndкак тридцать дней после времени начала.

  2. Функция получает все элементы в папке календаря, используемого по умолчанию.

  3. Чтобы включить все элементы встречи строго в диапазон дат, включая повторяющиеся встречи, он устанавливает для Items.IncludeRecurrencesзначение True , а затем сортирует элементы по свойству AppointmentItem.Start .

  4. Он создает первый запрос для всех встреч, которые начинаются с или после myStartи заканчиваются на или раньше myEnd. Это запрос Jet.

  5. Он применяет запрос к элементам в папке календаря по умолчанию с помощью метода Items.Restrict .

  6. Создается второй запрос для темы встречи, содержащей слово "team". Ключевое like слово используется для сопоставления подстроки в запросе ПОИСКА и поиска DASL (DASL).

  7. Применяется второй запрос к набору встреч, возвращенных в первом запросе, которые соответствуют условиям диапазона дат.

  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 и обратная связь.