vba - 如何通过 VBA/DASL 在 Outlook 中搜索约会?
问题描述
我正在尝试循环浏览当天的特定约会并将其详细信息显示在 msgbox 中。
我发现了 DASL 过滤器查询。
但是,它只会显示它找到的第一个约会。FindNext 方法永远不会进入下一个约会,即使它来自我在网上找到的一个非常相似的示例。
当我直接在 Outlook 中设置相同的 DASL 过滤器时,它会按预期显示约会。
这是我当前的子:
Sub GetAppointments()
Dim sFilter As String
Dim oExplorer As Outlook.Explorer
Dim oFolder As Outlook.Folder
Dim oAppointment As Outlook.AppointmentItem
sFilter = "@SQL=" & _
"%today(""urn:schemas:calendar:dtstart"")% AND " & _
"%today(""urn:schemas:calendar:dtend"")% AND " & _
"""urn:schemas-microsoft-com:office:office#Keywords"" LIKE '%Meeting%'"
Set oExplorer = Application.ActiveExplorer
Set oFolder = oExplorer.CurrentFolder
Set oAppointment = oFolder.Items.Find(sFilter)
While TypeName(oAppointment) <> "Nothing"
MsgBox oAppointment.Subject & vbCr & _
oAppointment.Start & vbCr & _
oAppointment.End
Set oAppointment = oFolder.Items.FindNext
Wend
End Sub
解决方案
如果要获得更多结果,则需要处理相同的 Items 集合:
Dim appItems as Outlook.Items
Set appItems = oFolder.Items
Set oAppointment = appItems.Find(sFilter)
While TypeName(oAppointment) <> "Nothing"
MsgBox oAppointment.Subject & vbCr & _
oAppointment.Start & vbCr & _
oAppointment.End
Set oAppointment = appItems.FindNext
Wend
当您从文件夹中询问 Items 属性时,将返回一个新的 Items 实例,因此进一步的FindNext
调用没有任何意义。
在以下文章中阅读有关Find
/方法的更多信息:FindNext
此外,您可能希望包括重复出现,在这种情况下,您需要在集合上设置相应的属性Items
:
Dim appItems as Outlook.Items
Set appItems = oFolder.Items
appItems.Sort "[Start]"
appItems.IncludeRecurrences = True
Set oAppointment = appItems.Find(sFilter)
While TypeName(oAppointment) <> "Nothing"
MsgBox oAppointment.Subject & vbCr & _
oAppointment.Start & vbCr & _
oAppointment.End
Set oAppointment = appItems.FindNext
Wend
该属性返回一个布尔值,指示集合True
是否Items
应包含重复模式。
此属性仅在Items
集合包含约会且未按任何属性排序(Start
按升序排列)时才有效。默认值为False
。当您要检索给定日期的所有约会时使用此属性,其中经常性约会通常不会出现,因为它们与任何特定日期无关。如果您需要对包含重复约会的约会项目进行排序和筛选,则必须按以下顺序进行:按升序对项目进行排序,设置IncludeRecurrences
为True
,然后筛选项目。
推荐阅读
- r - Shiny R- 为什么我的输出数据表中不显示 formatStyle() 更改?
- python - 如果发生概率 P(X>0) 已知,则计算泊松分布中 λ 的更好方法
- reactjs - Material UI 5.0:当自动完成值为空时,每个项目都被选中
- r - 仅按 R 月标记周日期
- tensorflow - 如何确保预测时间图像输入与训练时间图像输入在同一范围内?
- python - 用真值替换日期列中的未命名值
- url - 使用 requests 库查看 url 是否正常工作,但得到意外结果?
- abp - 单一应用程序中模块之间相互通信的权限操作
- javascript - 如何将数组数组拆分为更小的部分
- database - 我如何在自己的数据库中使用 firebase 验证