【问题标题】:VBA: Outlook calendar - omit single (deleted) recurring eventVBA:Outlook 日历 - 省略单个(已删除)重复事件
【发布时间】:2015-05-22 17:20:20
【问题描述】:

从另一个问题继续: VBA:阅读 Outlook 日历 - 不阅读定期约会?

从 Outlook 日历中,我正在阅读/解析/排序工作周以创建摘要。我有一个以前的问题,没有读取定期约会 - 现在已排序。

现在 - 如果我在工作周内删除了重复性事件,比如由于假期,它仍会显示在我的摘要中。我无法找出对象中的任何参数来测试它是否从本周被删除。 推荐?

Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")
Set olFolder = olNS.GetDefaultFolder(olFolderCalendar)
Set olColItems = olFolder.Items

sFilter = "[START] >= '" & sDateStart & "' And [End] <= '" & sDateEnd & "'"
Set olColFilteredItems = olColItems.Restrict(sFilter)

For Each oItem In olColFilteredItems
    aImport(iCount, 1) = oItem.Subject
    aImport(iCount, 2) = oItem.Start
    aImport(iCount, 3) = oItem.End
    aImport(iCount, 4) = oItem.Location
Next oItem    

亲切的问候, 最大

【问题讨论】:

  • 你现在用什么代码?如何删除约会项目?
  • 道歉 - 糟糕的解释。我更新了原始帖子。重复事件已从 Outlook 日历中删除。所以它明显地从工作周中删除了。我对工作周的阅读仍然捕捉到已删除的事件,因为它仍在重复发生。干杯,

标签: vba outlook recurring


【解决方案1】:

您需要设置IncludeRecurrences property。不使用 Restrict,而是按 Start 属性排序并将 IncludeRecurrences 属性设置为 true。

【讨论】:

  • 我很困惑。使用上述方法,我的定期约会看起来很好。使用 IncludeRecurrences 属性是否提供了另一种检查约会是否已从日历中删除的方法? IE:存在定期约会,我将其从本周的日历中删除,因为我错过了会议(下周我将参加),但代码仍将定期约会计为本周存在。
  • 让我们正确使用术语。首先,除非您修改实例,否则重复实例实际上并不存在(想想没有结束日期的约会);在那一刻创建了异常 - 它作为附件存储在主约会上。如果删除重复实例,存储在主约会上的重复 blob 会被修改以记录重复模式中存在漏洞。如果对集合进行排序并将 IncludeRecurrences 设置为 true,OOM 会扩展重复模式并创建假 AppointmentItem 对象实际不存在的。
【解决方案2】:

Dmitry 是对的,要从满足预定义条件的文件夹中检索所有 Outlook 约会项目,您需要按升序排列 sort 并将 IncludeRecurrences 设置为 true。如果您在使用 Restrict 方法之前不这样做,您将不会赶上定期约会!

更多信息请参见How To: Use Restrict method in Outlook to get calendar items(包括示例代码)。

【讨论】:

  • 哈。非常感谢。在我的大脑进入线索之前,我重新阅读了 Dmitry 的评论大约 10 次。上面的链接也确实有帮助。这就是全部:
【解决方案3】:

哈。非常感谢。在迷雾散去之前,我重读了德米特里的评论大约 10 次。上面的链接也确实有帮助。这就是全部:

Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")
Set olFolder = olNS.GetDefaultFolder(olFolderCalendar)
Set olColItems = olFolder.Items

olColItems.IncludeRecurrences = True    '<-- these two lines here fix my issue
olColItems.Sort ("[Start]")             '<--

sFilter = "[START] >= '" & sDateStart & "' And [End] <= '" & sDateEnd & "'"
Set olColFilteredItems = olColItems.Restrict(sFilter)

For Each oItem In olColFilteredItems
    aImport(iCount, 1) = oItem.Subject
    aImport(iCount, 2) = oItem.Start
    aImport(iCount, 3) = oItem.End
    aImport(iCount, 4) = oItem.Location
Next oItem

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多