Share via


Rechercher dans le calendrier des rendez-vous dans une plage de dates qui contiennent un mot spécifique dans l’objet

Cette rubrique présente un exemple de code Visual Basic pour Applications (VBA) qui recherche dans le calendrier par défaut les rendez-vous qui ont lieu strictement dans les trente prochains jours et dont l’objet contient le mot « team ». Les résultats retournés incluent les rendez-vous périodiques.

La FindAppts fonction dans l’exemple de code effectue la recherche à l’aide de deux requêtes différentes, d’abord en recherchant les rendez-vous, y compris les rendez-vous récurrents qui commencent et se terminent dans la plage de dates, puis en recherchant parmi les rendez-vous qui répondent aux critères de plage de dates qui ont « équipe » dans l’objet. Voici une description des étapes nécessaires :

  1. FindAppts définit d’abord la période d’interrogation, en affectant l’heure de début, myStart, à 12h00 à la date actuelle du système, et l’heure de fin, myEnd, trente jours après l’heure de début.

  2. Elle obtient tous les éléments dans le dossier de calendrier par défaut.

  3. Pour inclure tous les éléments de rendez-vous strictement dans la plage de dates, y compris les rendez-vous récurrents, il définit Items.IncludeRecurrences sur True , puis trie les éléments par la propriété AppointmentItem.Start .

  4. Il génère la première requête pour tous les rendez-vous qui commencent le ou après myStartet se terminent sur ou avant myEnd. Il s’agit d’une requête Jet.

  5. Il applique la requête aux éléments du dossier calendrier par défaut, à l’aide de la méthode Items.Restrict .

  6. Elle construit la deuxième requête pour l’objet de rendez-vous contenant le mot « team ». Il utilise le mot clé pour la like correspondance des sous-chaînes dans une requête DASL (DAV Searching and Locating).

  7. Elle applique la deuxième requête à l’ensemble de rendez-vous qui répondent aux critères de date retourné par la première requête.

  8. Il trie et imprime l’heure de début de tous les rendez-vous finaux retournés.

Notez que si vous souhaitez inclure des éléments de rendez-vous qui se chevauchent et ne se trouvent pas strictement dans la plage de dates spécifique, vous devez remplacer la première requête par une requête dont les rendez-vous commencent le ou avant myEndet se terminent sur ou après myStart. Pour plus d’informations, voir Comment : Rechercher dans le Calendrier des rendez-vous qui ont lieu partiellement ou entièrement durant une période donnée.

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

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.