Home > Mobile >  How to count emails in subfolders of a shared mailbox?
How to count emails in subfolders of a shared mailbox?

Time:02-15

I want to count the number of emails in seven subfolders of a shared mailbox.
I also want the date of the last email in these folders.

The shared mailbox looks like

>"Shared Mailbox Name"
>>Inbox
>>>Folder one
>>>>A
>>>>B
>>>>C
>>>Folder two
>>>>D
>>>>E
>>>>F
>>>>G

I want the result to show number of emails of all these folders together and not one by one. A, B, C, D, E, F, G.

I managed to get the number of emails for one folder at a time.

Sub CountItems()
    Dim objMainFolder As Outlook.folder
    Dim lItemsCount As Long
 
    'Select a folder
    Set objMainFolder = Outlook.Application.Session.PickFolder
 
    If objMainFolder Is Nothing Then
        MsgBox "You should select a valid folder!", vbExclamation   vbOKOnly, "Warning for Pick Folder"
    Else
        'Initialize the total count
        lItemsCount = 0
        Call LoopFolders(objMainFolder, lItemsCount)
    End If
 
    'Display a message for the total count

    MsgBox "There are " & lItemsCount & " items in the " & objMainFolder.Name & " folder Including its subfolders.", vbInformation, "Count Items"
End Sub

Sub LoopFolders(ByVal objCurrentFolder As Outlook.folder, lCurrentItemsCount As Long)
    Dim objSubfolder As Outlook.folder
 
    lCurrentItemsCount = lCurrentItemsCount   objCurrentFolder.Items.count
 
    'Process all folders and subfolders recursively
    If objCurrentFolder.Folders.count Then
        For Each objSubfolder In objCurrentFolder.Folders
            Call LoopFolders(objSubfolder, lCurrentItemsCount)
        Next
    End If
End Sub

CodePudding user response:

You can use the following code to get the latest item:

Sub Sample()
    Dim objNS As NameSpace
    Dim objFolder As MAPIFolder
    Dim myItems As Items
    Dim myItem As MailItem

    Set objNS = GetNamespace("MAPI")
    Set objFolder = objNS.GetDefaultFolder(olFolderInbox)

    Set myItems = objFolder.Items
    myItems.Sort "ReceivedTime", True

    If myItems.Count > 0 Then
        Set myItem = myItems.Item(1)

        Debug.Print myItem.ReceivedTime
    Else
        Msgbox "This folder doesn't have any emails/items"
    End If
End Sub

CodePudding user response:

Firstly, lCurrentItemsCount parameter must be declared ByRef to make it an in/out parameter.

To get the date of the latest email, retrieve the Items collection from MAPIFolder.Items, call Items.Sort to sort of the ReceivedTime property, then call Items.GetFirst to get back the MailItem object. Use MailItem.ReceivedTime property.

  • Related