Excel VBA Outlook - 主题包含未找到回复电子邮件
Excel VBA Outlook - Subject Contains Is Not Finding Reply Emails
如何将以下 Excel VBA 代码发送到 return 所有主题包含 'Timesheet 06/19/20' 的电子邮件?
下面的代码执行 return“Timesheet 06/19/20 - Name (EmpId)”。但是,它不会 RETURN“[外部] 回复:时间表 06/19/20 - 名称 (EmpId)”。我做错了什么?
Public Function Test()
Dim Folder As Outlook.Folder, MailItems As Outlook.Items, MailItem As Outlook.MailItem
Dim Filter As String
Filter = "@SQL=urn:schemas:httpmail:subject" & "" & " ci_phrasematch 'Timesheet 06/19/20'"
Set Folder = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set MailItems = Folder.Items.Restrict(Filter)
For Each MailItem In MailItems
Debug.Print MailItem.Subject
Next MailItem
End Function
请注意,如果我将过滤器更改为搜索“[EXTERNAL] RE: Timesheet 06/19/20”,它会找到电子邮件。显然这对我的解决方案不起作用,因为我需要搜索“Timesheet 06/19/20”以容纳原始邮件、转发邮件和回复邮件。
感谢您的帮助!
不知道为什么,但是一封主题为“无法投递:时间表 06/19/20 - 名称 (EmpId)”的电子邮件引发了错误,导致代码提前退出 for 循环。下面的代码修复了被抛出的错误。
也许有人可以解释为什么上面的主题更喜欢循环的索引计数?
Public Function Test()
Dim Folder As Outlook.Folder, MailItems As Outlook.Items, MailItem As Outlook.MailItem
Dim Filter As String, idx As Long
Filter = "@SQL=urn:schemas:httpmail:subject" & "" & " ci_phrasematch 'Timesheet 06/19/20'"
Set Folder = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set MailItems = Folder.Items.Restrict(Filter)
For idx = 1 To MailItems.Count
Debug.Print MailItems(idx).Subject
Next idx
End Function
您需要记住,Items
集合可能包含不同类型的项目,而不仅仅是邮件项目。因此,最好将项目定义为对象并在运行时检查项目的类型,然后再访问任何 属性 或特定于特定项目类型的方法。例如:
Public Function Test()
Dim Folder As Outlook.Folder, MailItems As Outlook.Items, item As Object
Dim Filter As String
Filter = "@SQL=urn:schemas:httpmail:subject" & "" & " ci_phrasematch 'Timesheet 06/19/20'"
Set Folder = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set MailItems = Folder.Items.Restrict(Filter)
For Each item In MailItems
Debug.Print TypeName(item)
Next item
End Function
阅读 How To: Use Restrict method to retrieve Outlook mail items from a folder 文章中有关 Restrict
方法的更多信息。
如何将以下 Excel VBA 代码发送到 return 所有主题包含 'Timesheet 06/19/20' 的电子邮件?
下面的代码执行 return“Timesheet 06/19/20 - Name (EmpId)”。但是,它不会 RETURN“[外部] 回复:时间表 06/19/20 - 名称 (EmpId)”。我做错了什么?
Public Function Test()
Dim Folder As Outlook.Folder, MailItems As Outlook.Items, MailItem As Outlook.MailItem
Dim Filter As String
Filter = "@SQL=urn:schemas:httpmail:subject" & "" & " ci_phrasematch 'Timesheet 06/19/20'"
Set Folder = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set MailItems = Folder.Items.Restrict(Filter)
For Each MailItem In MailItems
Debug.Print MailItem.Subject
Next MailItem
End Function
请注意,如果我将过滤器更改为搜索“[EXTERNAL] RE: Timesheet 06/19/20”,它会找到电子邮件。显然这对我的解决方案不起作用,因为我需要搜索“Timesheet 06/19/20”以容纳原始邮件、转发邮件和回复邮件。
感谢您的帮助!
不知道为什么,但是一封主题为“无法投递:时间表 06/19/20 - 名称 (EmpId)”的电子邮件引发了错误,导致代码提前退出 for 循环。下面的代码修复了被抛出的错误。
也许有人可以解释为什么上面的主题更喜欢循环的索引计数?
Public Function Test()
Dim Folder As Outlook.Folder, MailItems As Outlook.Items, MailItem As Outlook.MailItem
Dim Filter As String, idx As Long
Filter = "@SQL=urn:schemas:httpmail:subject" & "" & " ci_phrasematch 'Timesheet 06/19/20'"
Set Folder = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set MailItems = Folder.Items.Restrict(Filter)
For idx = 1 To MailItems.Count
Debug.Print MailItems(idx).Subject
Next idx
End Function
您需要记住,Items
集合可能包含不同类型的项目,而不仅仅是邮件项目。因此,最好将项目定义为对象并在运行时检查项目的类型,然后再访问任何 属性 或特定于特定项目类型的方法。例如:
Public Function Test()
Dim Folder As Outlook.Folder, MailItems As Outlook.Items, item As Object
Dim Filter As String
Filter = "@SQL=urn:schemas:httpmail:subject" & "" & " ci_phrasematch 'Timesheet 06/19/20'"
Set Folder = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set MailItems = Folder.Items.Restrict(Filter)
For Each item In MailItems
Debug.Print TypeName(item)
Next item
End Function
阅读 How To: Use Restrict method to retrieve Outlook mail items from a folder 文章中有关 Restrict
方法的更多信息。