我正在尝试从Excel扫描共享收件箱,查找在某个日期收到的带有附件的电子邮件。目的是保存附件并将其导入运行代码的工作簿中。
这是我迄今为止从Outlook下载附件并在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点之后收到的电子邮件。
我将日历中的工作时间设置更改为午夜到午夜(无工作时间),然后代码会带回指定日期的所有电子邮件。然而,我不能让日历上没有工作时间。有没有办法将默认行为更改为忽略工作时间?
听起来你确实得到了GMT+当地时区偏移量。您的TZ是什么?
在解决了这个问题之后,我找到了一个解决方案。很明显。你不能只提供日期,你还需要提供时间,所以:
[...]
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") & "'"