2016-03-31 8 views
1

Ich versuche, eine Such- und Verschiebungsfunktion in MS Outlook zu implementieren. Die Suche ist in Ordnung, es funktioniert wie Charme. Aber ich kann nur die Move-Funktion finden, um die Nachricht in einen Outlook-Ordner zu verschieben.Wie funktioniert die Funktion "Nachrichten immer in dieser Konversation verschieben" von VBA in MS Outlook?

Ich benutze die Nachrichten Immer in dieser Konversation Nachrichten manuell verschieben. Jetzt möchte ich es aus Makro verwenden. Gibt es eine Möglichkeit, diese Funktion von VBA aus zu verwenden?

Hier ist die aktuelle Implementierung bietet aber mit einfachen Verschieben Funktion:

Private Sub btn_Click() 
    Dim currentMail As Object 
    Dim F As Outlook.MAPIFolder 
    Dim Msg$ 
    Set currentMail = Application.ActiveWindow 
    If TypeOf currentMail Is Outlook.Inspector Then 
     Set currentMail = obj.CurrentItem 
    Else 
     Set currentMail = obj.Selection(1) 
    End If 

    currentMail.Move Folder 
End Sub 
+0

Nicht der Frage, die Sie gestellt haben, aber das könnte nützlich sein. Setzen Sie 'Option Explicit' oben im Modul. Sie könnten in die VBE-Tools | Optionen | Editor und markieren Sie 'Variable Deklaration erforderlich'. http://StackOverflow.com/a/8216322/1571407 – niton

Antwort

1

Dies ist, was Sie wollen

Dim currentMail As MailItem 
Dim conv As Conversation 
Dim myFolder As Folder 'you have to set it to your target folder 

Set conv = currentMail.GetConversation 
conv.SetAlwaysMoveToFolder myFolder, myFolder.Store 
+0

Wow, es funktioniert perfekt! :) Vielen Dank, ich habe seit einem Jahr darauf gewartet. Du hast mich sehr glücklich gemacht :) – bdevay

+0

Ich bin froh, dass ich helfen konnte !! (Das ist meine erste akzeptierte Antwort!) – Dimas

1

Nicht sicher, ob dies ist, was Ihr fragen, aber hier ist, wie Outlook-Nachrichten in einigen Gesprächen Unter Ordner zu verschieben.

aktualisieren SubFolder = Inbox.Folders("Temp") Temp-Ordner

-Code werden alle Meldungen in derselben Konversation in Ihrem Outlook suchen und es dann zu Temp-Ordner verschieben

Option Explicit 
Sub MoveConv() 
    Dim olNs As NameSpace 
    Dim Inbox As Outlook.MAPIFolder 
    Dim SubFolder As Outlook.MAPIFolder 
    Dim SelectedItem As Object 
    Dim Item As Outlook.MailItem ' Mail Item 
    Dim Folder As Outlook.MAPIFolder ' Current Item's Folder 
    Dim Conversation As Outlook.Conversation ' Get the conversation 
    Dim ItemsTable As Outlook.Table ' Conversation table object 
    Dim MailItem As Object 

    Set olNs = Application.GetNamespace("MAPI") 
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox) 

' On Error GoTo MsgErr 
' // Must Selected Item. 
    Set SelectedItem = Application.ActiveExplorer.Selection.Item(1) 

' // If Item = a MailItem. 
    If TypeOf SelectedItem Is Outlook.MailItem Then 
     Set Item = SelectedItem 
     Set Conversation = Item.GetConversation 

     If Not IsNull(Conversation) Then 
      Set ItemsTable = Conversation.GetTable 

      For Each MailItem In Conversation.GetRootItems ' Items in the conversation. 
       If TypeOf MailItem Is Outlook.MailItem Then 
        Set Item = MailItem 
        Set Folder = Item.Parent 
        Set SubFolder = Inbox.Folders("Temp") ' Move to Temp Folder 
        Debug.Print Item.ConversationID & " In Folder " & Folder.Name 
        GetConv Item, Conversation 
        Item.Move SubFolder 
       End If 
      Next 
     End If 
    End If 

MsgErr_Exit: 
    Set olNs = Nothing 
    Set Inbox = Nothing 
    Set Item = Nothing 
    Set SelectedItem = Nothing 
    Set MailItem = Nothing 
    Exit Sub 

'// Error information 
MsgErr: 
    MsgBox "Err." _ 
     & vbCrLf & "Error Number: " & Err.Number _ 
     & vbCrLf & "Error Description: " & Err.Description _ 
     , vbCritical, "Error!" 
    Resume MsgErr_Exit 
End Sub 

Function GetConv(Item As Object, Conversation As Outlook.Conversation) 
    Dim Items As Outlook.SimpleItems 
    Dim MailItem As Object 
    Dim Folder As Outlook.Folder 
    Dim olNs As NameSpace 
    Dim Inbox As Outlook.MAPIFolder 
    Dim SubFolder As Outlook.MAPIFolder 

    Set olNs = Application.GetNamespace("MAPI") 
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox) 
    Set Items = Conversation.GetChildren(Item) 

    If Items.Count > 0 Then 
     For Each MailItem In Items 
      If TypeOf MailItem Is Outlook.MailItem Then 
       Set Item = MailItem 
       Set Folder = Item.Parent 
       Set SubFolder = Inbox.Folders("Temp") 
       Debug.Print Item.ConversationID & " In Folder " & Folder.Name 
       Item.Move SubFolder 
      End If 
      GetConv Item, Conversation 
     Next 
    End If 
End Function 
+0

Hallo, es ist etwas ähnliches, aber nicht genau das, was ich suche. Wenn Sie die Funktion Nachrichten immer in dieser Konversation verschieben verwenden, müssen Sie den Zielordner nur einmal für die erste E-Mail festlegen. Die Nachrichten in der später empfangenen Konversation werden automatisch vom Outlook in den angegebenen Ordner verschoben. Mit Ihrer Lösung muss ich den Zielordner für jede neue E-Mail identifizieren. Allerdings werde ich meine aktuelle Implementierung zu dieser ändern, denn wenn ich bereits mehr E-Mails in der gleichen Konversation erhalten habe, ist diese Lösung etwas anspruchsvoller. Vielen Dank! – bdevay