日历设置会干扰[dateReceived]过滤器

时间:2015-12-10 16:38:03

标签: vba outlook-vba

我正在尝试从Excel扫描共享收件箱,以查找在特定日期收到的带附件的电子邮件。目的是保存附件并将它们导入到运行代码的工作簿中。

这是我到目前为止改编自Download attachment from Outlook and Open in Excel以扫描收件箱并在其找到的电子邮件上打印一些信息的代码

Sub extractEmailDetails()
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object, oOlInp As Object
    Dim oOlItm As Object
    Dim strDateFrom As String, strDateTo As String

    Dim searchDate As Date

    searchDate = #12/9/2015# 'mm/dd/yyyy
    strDateFrom = "'" & Format(searchDate, "dd/mm/yyyy") & "'"
    strDateTo = "'" & Format(searchDate + 1, "dd/mm/yyyy") & "'"

    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInp = oOlns.Folders("SHR-Cust Ops MI Team Inbox")
    Set oOlInb = oOlInp.Folders("Inbox")

    '~~> Store the relevant info in the variables
    For Each oOlItm In oOlInb.Items.Restrict("[attachment] = True AND [receivedTime] > " & strDateFrom & " AND [receivedTime] < " & strDateTo)
        Debug.Print oOlItm.ReceivedTime & " " & oOlItm.Subject
    Next

End Sub

当我搜索12月8日时,它只返回上午8点之后收到的电子邮件。

我将日历中的工作时间设置更改为午夜到午夜(无工作时间),然后代码将所有电子邮件恢复到指定日期。但是,我不能在没有工作时间的情况下离开我的日历。有没有办法改变默认行为以忽略工作时间?

2 个答案:

答案 0 :(得分:0)

听起来好像你正在获得GMT +你当地的时区偏移量。 你的TZ是什么?

答案 1 :(得分:0)

稍微弄清楚这一点之后,我找到了解决方案。一个非常明显的一个。您不能只提供日期,还需要提供时间,所以:

[...]
strDateFrom = "'" & Format(searchDate, "dd/mm/yyyy") & "'"
strDateTo = "'" & Format(searchDate + 1, "dd/mm/yyyy") & "'"

变为

[...]
strDateFrom = "'" & Format(searchDate, "dd/mm/yyyy hh:mm") & "'"
strDateTo = "'" & Format(searchDate + 1, "dd/mm/yyyy hh:mm") & "'"