2016-10-31 2 views
0

Ich habe eine Suche, die nach Unterordnern des Posteingangs auf Betreffzeile sucht. Ich versuche, die letzte Mail zurückzukehren und haben den Code unter Verwendung von:VBA Outlook - Sortierung nach Datum Confusion

Items.Sort "[ReceivedTime]", True 

Ich habe auch versucht Creation und Senton zwischen den Klammern. Aber die Suche liefert die gesuchten E-Mails mit der gleichen Betreffzeile in der folgenden Reihenfolge:

9/23/2016 9:31 AM

10/19/2016 12:57 PM

9/29/2016 10.54

Mein Code: Dim Fldr Wie Outlook.MAPIFolder Dim Elemente als Outlook.Items Dim olMail As Variant

Set oOLapp = CreateObject("Outlook.application") 
Set olNs = oOLapp.GetNamespace("MAPI") 

For step = 1 To MaxCount 
    Set Fldr = olNs.GetDefaultFolder(olFolderInbox) 

    For Each Fldr in Fldr.Folders 
     Set Items = Fldr.Items 
     Items.Sort "[ReceivedTime]", True 

      For Each olMail in Items 
       If InStr(olMail.Subject, "Text" & Cstr(step)) 
        olMail.Display Then 
        Set Msg = oOLapp.CreateItem(olMailItem) 
        .Attachments.Add olMail, olEmbeddeditem 
        Set Msg = Nothing 
       End If 
      Next 
    Next 
Next 

Ich möchte nur eine neueste Instanz der Mail mit der gesuchten Betreffzeile. Irgendwelche Ideen, warum es die früheste Post zurückbringt und dann die neueste?


Ich habe auch versucht, den Code unten, wo die meisten Leute scheinen den meisten Erfolg zu haben, wenn die aktuellste Code wiederzufinden versucht, aber ich erhalte eine Error404 besagt, dass „Array-Index außerhalb der Grenzen“.

For step = 1 To MaxCount 
    Set Fldr = olNs.GetDefaultFolder(olFolderInbox) 

    For i = Fldr.Folders.Count To 1 Step -1 
     Set Fldr = Fldr.Folders(i) 

      For a = Fldr.Items.Count To 1 Step - 1 
       Set olMail = Fldr.Items(a) 

       //Search and attachment code. See previous code 

      Next 
    Next 
Next 

ERGEBNIS:

Mein Code die E-Mail in der angegebenen Reihenfolge zieht basierend auf den Ordner, die er in sieht also die Mail mit den frühesten Zeitstempel in einen Ordner ging, die vor der erschien. andere Mail, deshalb hat mein Code immer den frühesten statt den letzten gezogen.

+1

Bitte zeigen Sie Ihren vollständigen Code. Rufen Sie MAPIFolder.Items nur einmal ab und zwischenspeichern Sie es für alle Aufrufe? Oder rufen Sie jedes Mal MAPIFolder.Items auf? –

+0

@DmitryStreblechenko Ich habe meinen Code jetzt in meinen Beitrag aufgenommen. – Joshua

+0

Mit welchem ​​Code werden die Elemente protokolliert? Sind Sie sicher, dass die ReceivedTime-Eigenschaft protokolliert wird? –

Antwort

0

Ich hatte kein Problem beim Ausführen des folgenden Skripts in OutlookSpy (klicken Sie auf Skript, fügen Sie das Skript, klicken Sie auf Ausführen) - alle Nachrichten sind in der erwarteten Reihenfolge - von älteren zu neuesten. Wolltest du neu nach alt sortieren?

set folder = Application.ActiveExplorer.CurrentFolder 
set items = folder.Items 
items.Sort "[ReceivedTime]", False 
For Each msg in items 
    Debug.Print msg.ReceivedTime & " " & msg.Subject 
next 
+0

Ja, ich wollte neu nach alt sortieren.Ich würde nur den Booleschen Wert in der Sortierfunktion zu True ändern. Meistens funktioniert es so, wie es soll, aber manchmal passiert es so, wie es in meinem Post gezeigt wird. Ich versuche nur herauszufinden, warum das so ist. – Joshua

+0

Und in dem Fall, wenn die Reihenfolge falsch ist, zeigt das obige Skript das gleiche falsche Verhalten? –

+0

Welche Dims verwenden Sie? Weil, wenn ich versuche, Msg.Subject zum Suchen zu verwenden, gibt es mir eine Laufzeitfehlermeldung "438", die besagt, dass "Objekt diese Eigenschaft oder Methode nicht unterstützt" – Joshua