VBA Code to Sort Outlook Emails by Date
In Outlook app, when you are viewing the mails in any folder, You have option to Sort them based on Received date/time, Sender, Subject etc.,
But in Outlook VBA code, when we retrieve emails, we may not be sure on which order the emails are being retrieved. To ensure that it is sorted based on certain criteria, we have to explicitly mention the criteria & order (ascending or descending).
Let see how to do this in a VBA code.
Outlook Macro to Sort Emails by Date
Lets assume that you would like to read the latest emails in the Inbox first. To do this, the emails should be sort by date in descending order.
The following code just does that. It sorts all the emails in a specific folder by date (received time).
Function Sort_Inbox_By_Date()
'Define
Dim objInboxFolder As Folder
Dim objMailItem As MailItem
Dim objItems As Items
Dim objItem As Object
Dim itmCount As Double
'Init
Set objInboxFolder = Application.GetNamespace("MAPI").PickFolder
'Sort
Set objItems = objInboxFolder.Items
objItems.Sort "[ReceivedTime]", True
'Loop thru each Item after Sort
itmCount = 0
For Each objItem In objItems
If TypeName(objItem) = "MailItem" Then
itmCount = itmCount + 1
Set objMailItem = objItem
Debug.Print itmCount & ": " & objMailItem.ReceivedTime & " - " & " - " & objMailItem.SenderEmailAddress
End If
Next
'Done
MsgBox "Sort completed"
End Function
Now, lets see how this works. Before sorting the results would look like this and after soring the same code reads the first mail in different order like in this image.
There are two parameters to this .Sort function. It is the email field that we would like to perform sort on.
In this case we are sorting based on received time. And the next one is the descending field. It is an optional field and is set to False by default. So, if you dont mention anything the emails will be sorted by older emails first.
Here are some additional reference.
- Email object parameters & explanation from Official website.