Outlook VBA在同一主题的邮件的子文件夹中移动邮件

时间:2015-10-21 16:18:41

标签: vba outlook

我想做以下事情:

如果收到新邮件,则应检查邮件主题,如果任何子文件夹中已存在相同主题,则邮件应移至同一子文件夹。如果找不到相同的邮件,它将保留在正常的收件箱文件夹中。 这样的目标文件夹与邮件没有逻辑连接,因此不会像邮件或邮件发件人那样调用它。它只是一个文件夹,其中包含一个或相同主题的邮件。

我通过浏览这个论坛来管理 - 识别事件,邮件主题并执行实际操作。 我没有管理的是:

1。创建搜索逻辑以查找任何文件夹中具有相同主题的现有邮件

2.返回找到的文件夹以将其用作目标目的地。

这是它到现在为止的样子,它设法显示一条消息......

Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
     Dim olApp As Outlook.Application
     Dim objNS As Outlook.NameSpace
     Set olApp = Outlook.Application
     Set objNS = olApp.GetNamespace("MAPI")
     Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
    On Error GoTo ErrorHandler
    Dim Msg As Outlook.MailItem
    Dim MoveToFolder As Outlook.MAPIFolder
    If TypeName(Item) = "MailItem" Then
     Set Msg = Item

     MsgBox "Here the folder must be found for '" & Msg.Subject & "'."

     'Msg.Move MoveToFolder
    End If
    ProgramExit:
    Exit Sub
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit
End Sub

顶部:是否有一种特定的智能方法可以在其他事件上执行相同操作,例如“SentMails”?

非常感谢任何支持。

拉​​尔夫

1 个答案:

答案 0 :(得分:0)

您可以使用Application类的AdvancedSearch方法,该方法根据指定的DAV搜索和定位(DASL)搜索字符串执行搜索。您可以在Advanced search in Outlook programmatically: C#, VB.NET文章中详细了解该方法。因此,您可以找到具有相同主题的项目,然后获取其Parent属性值,该值代表存储它们的文件夹。

 Public blnSearchComp As Boolean

 Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
  Debug.Print "The AdvancedSearchComplete Event fired"
  If SearchObject.Tag = "Test" Then
    m_SearchComplete = True
  End If
 End Sub

 Sub TestAdvancedSearchComplete()
  Dim sch As Outlook.Search
  Dim rsts As Outlook.Results
  Dim i As Integer
  blnSearchComp = False
  Const strF As String = "urn:schemas:mailheader:subject = 'Test'"
  Const strS As String = "Inbox"   
  Set sch = Application.AdvancedSearch(strS, strF, “Test”) 
  While blnSearchComp = False
    DoEvents
  Wend 
  Set rsts = sch.Results
  For i = 1 To rsts.Count
    Debug.Print rsts.Item(i).SenderName
  Next
 End Sub
  

是否有特定的智能方法可以在其他事件上执行相同操作,例如"已发送邮件"?

您可以考虑处理Application类的ItemSend事件,该事件在用户通过Inspector发送Microsoft Outlook项目时触发(在检查器关闭之前,但在用户单击“发送”按钮之后)或者Outlook项目的发送方法。在事件处理程序中,您可以设置SaveSentMessageFolder属性,该属性允许设置一个Folder对象,该对象表示在发送后将保存电子邮件副本的文件夹。