Automatically selecting folders and deleting messages in Outlook VBA

Outlook version
Outlook 2016 32 bit
Email Account
Exchange Server 2013
#1
Hello, I need a little Outlook VBA help please...I manually select a subfolder from a main folder that I created (not inbox, sent, delete, etc.) in my left-hand folder pane in Outlook and run this code to delete email messages contained in the folder. However, I have about 50 folders that I need to do this to. Can someone tell me how to change this code so it will automatically "scroll" through 50 subfolders and delete the emails in each of those folders one folder at a time? I would like to manually select the main folder and run code to automatically select each subfolder under it and then delete email messages in those folders.

Sub DeleteEmails()
Dim objOL As Outlook.Application
Dim objMsg As Outlook.MailItem 'Object
Dim objAttachments As Outlook.Attachments
Dim objSelection As Outlook.Selection
Dim i As Long
Dim lngCount As Long
Dim strFile As String
Dim strFolderpath As String
Dim strDeletedFiles As String
Dim subfolder As Outlook.Folder
Dim subfolders As Outlook.folders
Dim folders As Outlook.folders
Dim namespace As Outlook.namespace

' Set Outlook Application object.
Set objOL = CreateObject("Outlook.Application")
' Get the collection of selected objects.
Set namespace = objOL.GetNamespace("MAPI")
Set Folder = Application.ActiveExplorer.CurrentFolder

On Error Resume Next

If Not Folder.Item(i) Is Nothing Then
For Each objMsg In Folder.Items
objMsg.Deleted
Next objMsg
End If


End Sub
 
Outlook version
Outlook 2016 32 bit
Email Account
Exchange Server 2013
#3
Thx Michael. I changed my code a little and this worked. But for some reason using the "For Each objMsg In subfolder.Items" function did not delete all the email message in a particular folder. There appeared to be a network latency issue. Once I added an external For loop counter and set it to keep trying for 10 iterations, all emails in each folder were deleted as expected...weird. One issue with this is that it makes the code take a lot longer to run. Any advice on this?

One other question. How do I tell VBA to choose a particular folder that is not the inbox? The way the code works now, I have to manually select the main folder and then run the code and the code uses "Set Folder = Application.ActiveExplorer.CurrentFolder". The code then selects each subfolder and deletes the emails from each subfolder. I would like for the code to automatically select the main folder.

Sub DeleteEmails()
Dim objOL As Outlook.Application
Dim objMsg As Outlook.MailItem 'Object
Dim objAttachments As Outlook.Attachments
Dim objSelection As Outlook.Selection
Dim i As Long
Dim lngCount As Long
Dim strFile As String
Dim strFolderpath As String
Dim strDeletedFiles As String
Dim subfolder As Outlook.Folder
Dim subfolders As Outlook.folders
Dim folders As Outlook.folders
Dim namespace As Outlook.namespace

' Instantiate an Outlook Application object.
Set objOL = CreateObject("Outlook.Application")
' Get the collection of selected objects.
Set namespace = objOL.GetNamespace("MAPI")
Set Folder = Application.ActiveExplorer.CurrentFolder
Set subfolders = Folder.folders

For Each subfolder In subfolders
On Error Resume Next
For i = 1 To 10 'have to use this bc of network latency issues with server. code may not delete all mail items if this is not used.
If Not subfolder.Item(i) Is Nothing Then
For Each objMsg In subfolder.Items
objMsg.Delete
Next objMsg
End If
Next i
Next

End Sub
 

Michael Bauer

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
#4
In order to delete items from a a collection you need to loop backwards through it. For Each doesn't work in that case. Here's a sample:
Empty a Folder - VBOffice

You can reference any folder this way:
set folder=application.session.folders("name")
set folder=folder.folders("name")
etc.
 
Outlook version
Outlook 2016 32 bit
Email Account
Exchange Server 2013
#5
Thx Michael, however when I try to execute the "set folder=application.session.folders("name")" line of code I get the following error mess. Any Idea why this would be happening?

upload_2016-10-13_8-20-59.png
 
Outlook version
Outlook 2016 32 bit
Email Account
Exchange Server 2013
#7
LOL...I did replace "name" with my folder name. Actually several different ones. I still got the object not found error message. Could it have something to do with my email being through an MS exchange sever?
 

Michael Bauer

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
#8
No, it's just a matter of using the correct name. The first line points to a top folder like Peronal Folders, the second one then points to a subfolder of it. Select the top folder, then type this into the immediate window in the VBA environment, and press enter:
?application.activeexplorer.currentfolder.name

It prints the name that you need to use.
 

Similar threads

Top