VBA-通过邮箱排序并将重复主题移动到文件夹

时间:2015-03-18 04:13:03

标签: vba outlook pseudocode

我遇到了一个问题,我在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

2 个答案:

答案 0 :(得分:0)

首先,不要使用多点符号:inbox.items(i).move otherFolder - 每个inbox.items(i)都会返回一个全新的COM对象。

其次,使用Items.Find / FindNext或Items.Restrict来遍历文件夹中的所有项目。

答案 1 :(得分:0)

您需要使用Items类的Find / FindNextRestrict方法,而不是遍历文件夹中的所有项目。例如:

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方法的主要好处:

  • 搜索在另一个线程中执行。您不需要手动运行另一个线程,因为AdvancedSearch方法会在后台自动运行它。
  • 可以在任何位置搜索任何项目类型:邮件,约会,日历,备注等,即超出某个文件夹的范围。 Restrict和Find / FindNext方法可以应用于特定的Items集合(请参阅Outlook中Folder类的Items属性)。
  • 完全支持DASL查询(自定义属性也可用于搜索)。您可以在MSDN中的过滤文章中阅读有关此内容的更多信息。要提高搜索性能,如果为商店启用了即时搜索,则可以使用即时搜索关键字(请参阅Store类的IsInstantSearchEnabled属性)。
  • 您可以随时使用Search类的Stop方法停止搜索过程。