我正试图为与我公司的一个团队共享的共享邮箱创建一个票务系统。
我想提取在某一天收到的邮件信息。
我创建的日期筛选器:
Sub List_Email_Info()
Dim i As Long
Dim OlApp As Outlook.Application
Dim olNS As Namespace
Dim olInboxFolder As Outlook.Folder
Dim olItems As Items
Dim olMailItem As MailItem
Dim FilterString As String
Set ol = New Outlook.Application
Set olNS = ol.GetNamespace("MAPI")
Set olInboxFolder = olNS.Folders("xyz.europe@xyz.com").Folders("Inbox")
Set olItems = olInboxFolder.Items
FilterString = "[ReceivedTime] >= 30 - 08 - 2021"
i = 1
On Error Resume Next
For Each olMailItem In olItems.Restrict(FilterString)
Range("email_Date").Offset(i, 0).Value = olItems(i).ReceivedTime
Range("email_Subject").Offset(i, 0).Value = olItems(i).Subject
Range("email_Sender").Offset(i, 0).Value = olItems(i).SenderName
Range("email_Body").Offset(i, 0).Value = olItems(i).Body
i = i + 1
Next olMailItem
Sheets("Test").Cells.EntireColumn.AutoFit
MsgBox "Export complete.", vbInformation
Set xlWB = Nothing
Set xlApp = Nothing
Set olItems = Nothing
Set olInboxFolder = Nothing
Set olNS = Nothing
End Sub
发布于 2021-08-30 01:39:31
筛选日期必须是字符串:Items.Restrict方法(Outlook)。
然后根据错误和键入进行调整:
Sub List_Email_Info()
Dim i As Long
Dim OlApp As Outlook.Application
Dim olNS As Namespace
Dim olInboxFolder As Outlook.Folder
Dim olItems As Items
Dim olMailItem As MailItem
Dim FilterString As String
Set OlApp = New Outlook.Application
Set olNS = OlApp.GetNamespace("MAPI")
Set olInboxFolder = olNS.Folders("xyz.europe@xyz.com").Folders("Inbox") ' Localised.
Set olItems = olInboxFolder.Items
Const FilterDate As Date = #8/20/2021#
FilterString = "[ReceivedTime] >= '" & Format(FilterDate, "ddddd h:nn") & "'"
For Each olMailItem In olItems.Restrict(FilterString)
Range("email_Date").Offset(i, 0).Value = olMailItem.ReceivedTime
Range("email_Subject").Offset(i, 0).Value = olMailItem.Subject
Range("email_Sender").Offset(i, 0).Value = olMailItem.SenderName
Range("email_Body").Offset(i, 0).Value = olMailItem.Body
Next
Sheets("Test").Cells.EntireColumn.AutoFit
MsgBox "Export complete.", vbInformation
Set olItems = Nothing
Set olInboxFolder = Nothing
Set olNS = Nothing
Set OlApp = Nothing
End Sub
发布于 2021-08-30 05:30:00
Outlook根据Windows控制面板中的“区域和语言选项小程序”中的时间格式、短日期格式和长日期格式设置计算日期时间值。尤其是,Outlook根据指定的时间格式计算时间,而不是秒。如果在日期时间比较字符串中指定秒,则筛选器将不会按预期操作。
虽然日期和时间通常以日期格式存储,但使用Jet和DAV搜索和定位(DASL)语法的筛选器需要将日期时间值转换为字符串表示形式。在Jet语法中,日期时间比较字符串应该用双引号或单引号括起来.在DASL语法中,日期时间比较字符串应该用单引号括起来.
若要确保日期-时间比较字符串的格式符合Microsoft的要求,请使用格式函数(或其在编程语言中的等效功能)。下面的示例创建一个Jet过滤器,以查找当地时间下午3:30在2021年6月12日之前收到的所有项目。
criteria = "[ReceivedTime] < '" & Format("6/12/2021 3:30PM","General Date") & "'"
此外,还可以通过以下方式指定硬编码日期字符串:
FilterString = "[ReceivedTime] > `30/08/2021`"
https://stackoverflow.com/questions/68981383
复制