Pesquise o calendário de compromissos dentro de um intervalo de datas que contenha uma palavra específica no assunto
Este tópico mostra um exemplo de código no Visual Basic for Applications (VBA) que localiza os compromissos no calendário padrão que ocorrem exatamente dentro de trinta dias corridos e que contêm a palavra "equipe" no assunto. Os resultados retornados incluem os compromissos recorrentes.
A FindAppts
função no exemplo de código realiza a pesquisa usando duas consultas diferentes, primeiro procurando compromissos, incluindo compromissos recorrentes que começam e terminam dentro do intervalo de datas e, em seguida, pesquisa entre compromissos que atendem aos critérios de intervalo de datas que têm "equipe" no assunto. A seguir está um esquema das etapas:
FindAppts
primeiro define o período de tempo para consulta, atribuindo a hora de início,myStart
, como 12:00 am na data do sistema atual, e a hora de término,myEnd
, como trinta dias após o horário de início.Essa função obtém todos os itens na pasta de calendário padrão.
Para incluir todos os itens de compromisso estritamente dentro do intervalo de datas, incluindo compromissos recorrentes, ele define Items.IncludeRecurrences como True e classifica os itens pela propriedade AppointmentItem.Start .
Ele cria a primeira consulta para todos os compromissos que começam em ou após
myStart
, e termina em ou antesmyEnd
. Essa consulta é uma consulta Jet.Ela aplica a consulta a itens na pasta de calendário padrão, usando o método Items.Restrict .
Ele cria a segunda consulta para o assunto de compromisso que contém a palavra "equipe". Ele usa a
like
palavra-chave para a correspondência de substring em uma consulta DASL (Pesquisa e Localização do DAV).Ela aplica a segunda consulta ao conjunto de compromissos que atendem aos critérios do intervalo de datas, retornados da primeira consulta.
Ele classifica e imprime a hora de início de todos os compromissos finais retornados.
Observe que, se você quiser incluir itens de compromisso que se sobrepõem e não se enquadram estritamente no intervalo de datas específico, você deverá alterar a primeira consulta para uma que tenha compromissos iniciados ou antes myEnd
de , e termine em ou após myStart
. Para obter mais informações, consulte Como pesquisar no calendário os compromissos que ocorrem parcialmente ou por completo em um dado período de tempo.
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
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.