我遇到了一个问题,我在Outlook 2013中编写一个通过收件箱的宏,每当遇到重复的主题行时,它会将2封电子邮件移动到另一个文件夹。
这些“重复”在主题行中略有不同,差异是“新”前缀和“封闭”前缀。
我对如何实现这一目标有了一个总体的想法,但我确信会有更清洁,更有效的方法,因为有50个不同的主题行(不包括前缀)。
目前我的想法是有类似下面的内容:
for i = 1 to inbox.items.count
if inbox.items(i) = "new - example subject 1" then
for x = 1 to inbox.items.count
if inbox.items(x) = "closed - example subject 1" then
inbox.items(x).unread = false
inbox.items(x).move otherFolder
inbox.items(i).unread = false
inbox.items(i).move otherFolder
exit for
end if
next x
end if
if inbox.items(i) = "new - example subject 2" then
for x = 1 to inbox.items.count
if inbox.items(x) = "closed - example subject 2" then
inbox.items(x).unread = false
inbox.items(x).move otherFolder
inbox.items(i).unread = false
inbox.items(i).move otherFolder
exit for
end if
next x
end if
'repeating 50 times'
next i
答案 0 :(得分:0)
首先,不要使用多点符号:inbox.items(i).move otherFolder
- 每个inbox.items(i)
都会返回一个全新的COM对象。
其次,使用Items.Find / FindNext或Items.Restrict来遍历文件夹中的所有项目。
答案 1 :(得分:0)
您需要使用Items类的Find / FindNext或Restrict方法,而不是遍历文件夹中的所有项目。例如:
Sub DemoFindNext()
Dim myNameSpace As Outlook.NameSpace
Dim tdystart As Date
Dim tdyend As Date
Dim myAppointments As Outlook.Items
Dim currentAppointment As Outlook.AppointmentItem
Set myNameSpace = Application.GetNamespace("MAPI")
tdystart = VBA.Format(Now, "Short Date")
tdyend = VBA.Format(Now + 1, "Short Date")
Set myAppointments = myNameSpace.GetDefaultFolder(olFolderCalendar).Items
Set currentAppointment = myAppointments.Find("[Start] >= """ & tdystart & """ and [Start] <= """ & tdyend & """")
While TypeName(currentAppointment) <> "Nothing"
MsgBox currentAppointment.Subject
Set currentAppointment = myAppointments.FindNext
Wend
End Sub
有关更多信息和示例代码,请参阅以下文章:
另外,您可能会发现Application类的AdvancedSearch方法很有帮助。下面列出了使用AdvancedSearch方法的主要好处: