Перспектива VBA перемещение почты в подкаталоге, который HODS почты того же тема


0

Я хотел бы сделать следующее:

По случаю получения новой почты предмет почты должен быть проверен, и если тот же объект существует уже в любой подпапке почта должна быть перемещена в ту же самую подпапку. Если одна и та же почта не может быть найдена, она останется в обычной папке «Входящие». Целевая папка как таковая не имеет логического соединения с почтой, поэтому она не называется как почта или почтовый отправитель или что-то в этом роде. Это только папка, в которой хранится одна или другая почта с тем же предметом.

Мне удалось - просмотрев этот форум - определить событие, тему письма и выполнить фактический ход. То, что я не успел это:

1. создать логику поиска, чтобы найти уже существующие письма с той же темой в любой папке

2.to вернуть найденную папку, чтобы использовать его в качестве целевого назначения.

Вот как это выглядит до сих пор, и ему удается показать сообщение ...

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 "?

Большое спасибо за любую поддержку.

Ralf

0

Вы можете использовать AdvancedSearch метод класса Application, который выполняет поиск на основе определенного 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 

Есть ли конкретный умный способ сделать то же самое и на других мероприятиях, как, например «SentMails»?

Вы можете рассмотреть обработку события ItemSend класса приложений, которые обжигали всякий раз, когда пункт Microsoft Outlook, необходимо либо пользователь через инспектор (до того, как инспектор закрыт, но после того, как пользователь нажимает на кнопку Отправить) или при отправке метода для элемента Outlook. В обработчике событий вы можете установить свойство SaveSentMessageFolder, которое позволяет установить объект Folder, который представляет папку, в которой копия сообщения электронной почты будет сохранена после отправки.

  0

Большое спасибо! После некоторых изменений и твиков он делает то, что я за ним. Ты определенно подтолкнул меня в правильном направлении! 22 окт. 152015-10-22 10:04:32