我正在尝试从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点之后收到的电子邮件。
我将日历中的工作时间设置更改为午夜到午夜(无工作时间),然后代码将所有电子邮件恢复到指定日期。但是,我不能在没有工作时间的情况下离开我的日历。有没有办法改变默认行为以忽略工作时间?
答案 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") & "'"