此Outlook VBA代码搜索我的Outlook子文件夹中的所有电子邮件,然后提取"受试者"日期"创建时间";,以及";身体;的电子邮件转换为Excel文件。
我如何实现一些在某个日期(例如2022年10月1日(后查看电子邮件的代码?
我当前的代码:
Sub List_Email_Info()
'Create excel object variables
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim i As Long 'Row Tracker
Dim arrHeader As Variant
'Create outlook object variables
Dim olNS As NameSpace
Dim olInboxFolder As MAPIFolder
Dim olItems As Items
Dim olMailItem As MailItem
'store header names
arrHeader = Array("Date Created", "Subject", "Sender's Name", "Body")
'Create excel object's isntance
Set xlApp = CreateObject("excel.Application")
xlApp.Visible = True
Set xlWB = xlApp.Workbooks.Add
'Set outlook variables
Set olNS = GetNamespace("MAPI")
Set olInboxFolder = olNS.GetDefaultFolder(olFolderInbox).Folders("Law360 Alerts")
Set olItems = olInboxFolder.Items
'Assign role value to i variable
i = 1
On Error Resume Next
xlWB.Worksheets(1).Range("A1").Resize(1, UBound(arrHeader) + 1).Value = arrHeader
'iteriate each item from the olItems object
For Each olMailItem In olItems
xlWB.Worksheets(1).Cells(i + 1, "A").Value = olItems(i).CreationTime
xlWB.Worksheets(1).Cells(i + 1, "B").Value = olItems(i).Subject
xlWB.Worksheets(1).Cells(i + 1, "C").Value = olItems(i).SenderName
xlWB.Worksheets(1).Cells(i + 1, "D").Value = olItems(i).Body
i = i + 1
Next olMailItem
'Autofit columns
xlWB.Worksheets(1).Cells.EntireColumn.AutoFit
'Display a messagebox when complete
MsgBox "Export Complete.", vbInformation
'Empty out the objects
Set xlWB = Nothing
Set xlApp = Nothing
Set olItems = Nothing
Set olInboxFolder = Nothing
Set olNS = Nothing
End Sub
遍历文件夹中的所有项目并不是一个好主意:
'iteriate each item from the olItems object
For Each olMailItem In olItems
如何实现一些只会在特定日期后查看电子邮件的代码(例如,2022年1月10日(。
您需要使用Items
类的Find
/FindNext
或Restrict
方法,该方法只允许获取与搜索条件相对应的项目。以下是一个可能的搜索标准示例:
'All three filters shown below will return the same results
'This filter uses DASL date macro for today
strFilter = "%today(" _
& AddQuotes("urn:schemas:httpmail:datereceived") & ")%"
或
'This filter uses urn:schemas:httpmail namespace
strFilter = AddQuotes("urn:schemas:httpmail:datereceived") _
& " > '" & datStartUTC & "' AND " _
& AddQuotes("urn:schemas:httpmail:datereceived") _
& " < '" & datEndUTC & "'"
Outlook根据Windows控制面板中"区域和语言选项"小程序中的时间格式、短日期格式和长日期格式设置来评估日期-时间值。特别是,Outlook根据指定的时间格式计算时间,不包含秒。如果在日期时间比较字符串中指定秒,则筛选器将不会按预期操作。
尽管日期和时间通常以日期格式存储,但使用Jet和DAV搜索和定位(DASL(语法的筛选器要求将日期-时间值转换为字符串表示。在Jet语法中,日期时间比较字符串应该用双引号或单引号括起来。在DASL语法中,日期时间比较字符串应该用单引号括起来。
若要确保日期时间比较字符串的格式符合Microsoft Outlook的要求,请使用Visual Basic for ApplicationsFormat
函数(或您的编程语言中的等效函数(。
有关详细信息,请参阅使用日期时间比较筛选项目。
在我为技术博客撰写的文章中阅读更多关于Find
/FindNext
和Restrict
方法的信息
- 如何:使用Find和FindNext方法从文件夹中检索Outlook邮件项目(C#、VB.NET(
- 如何:使用Restrict方法从文件夹中检索Outlook邮件项目
如果您需要在多个文件夹中搜索项目,可以考虑使用Application
类的AdvancedSearch
方法,请参阅Outlook中以编程方式进行的高级搜索:C#、VB.NET.