• Outlook User
  • New Outlook app
  • Outlook.com
  • Outlook Mac
  • Outlook & iCloud
  • Developer
  • Microsoft 365 Admin
    • Common Problems
    • Microsoft 365
    • Outlook BCM
    • Utilities & Addins

Use a Macro to Assign Messages in a Shared Mailbox

Slipstick Systems

› Developer › Code Samples › Use a Macro to Assign Messages in a Shared Mailbox

Last reviewed on July 26, 2021     48 Comments

Many organizations use shared Exchange mailboxes for support and general information email addresses and assign the responsibility to answer the inquiries to a small group of users. To help even the workload, some managers want to assign the messages to users as they arrive, round-robin style, so each user gets the same number of messages.

assign messages to people

It's actually fairly easy to do: count the messages and use Select Case to assign a message to a person.

In these examples, I'm using an ItemAdd macro because it can watch any folder in your profile for new messages, whereas a rule only watches your account's Inbox. Outlook needs to be open to use a macro and if you are moving messages to folders in other mailboxes, the mailboxes need to be in your profile (as a shared mailbox is fine). Because the Inbox is not the default Inbox in your profile, you'll need to use the GetFolderPath macro at the end of this page.

These macros start when Outlook starts; to kickstart the macros during testing, click in the Application_Startup macro and click Run.

To watch a folder in the default mailbox in a profile, use the following line in the Application Startup macro.
Set olInboxItems = objNS.GetDefaultFolder(olFolderInbox).Items

Step 1

At the top of ThisOutlookSession, add this code and add the GetFolderPath function (found at the end of this article) to a new Module. Note: if you are watching for new messages in your default mailbox and are not moving the messages to folders in another mailbox or data file, you don't need the GetFolderPath function.

Dim i As Long
Private WithEvents olInboxItems As Items
 
Private Sub Application_Startup()
  Dim objNS As NameSpace
  Set objNS = Application.Session
  Set olInboxItems = GetFolderPath("Shared mailbox name\Inbox").Items
Set objNS = Nothing
End Sub

Step 2

Next, copy one of the ItemAdd macros below and paste it under the End Sub line in the Application_Startup macro.

Assign Categories | Move Messages to Folders
Move Messages to Other Mailboxes | Forward Messages

 

Assign Categories "Round Robin" style

Use the name of the mailbox as it appears in your folder list.

Private Sub olInboxItems_ItemAdd(ByVal Item As Object)
    Dim strCat As String
    
    If Item.Class = olMail Then
     
    Select Case i
     Case 0
          strCat = "Case 0"
     Case 1
          strCat = "Case 1"
     Case 2
          strCat = "Case 2"
     Case 3
          strCat = "Case 3"
     Case 4
          strCat = "Case 4"
    End Select
        
    Item.categories = strCat
            Item.Save
        Err.Clear
     End If
     i = i + 1
     Debug.Print i
     If i = 5 Then i = 0
 End Sub

 

Move Messages to Folders

In this example, I'm moving messages to a folder in the mailbox that is under the Inbox. (The messages in this screenshot were assigned the Case 0 category using the previous macro.)

Sort messages to folders

If the folder is at the same level as the Inbox, use this line instead:
Set objDestFolder = Session.GetDefaultFolder(olFolderInbox).Parent.Folders(moveFolder)

Private Sub olInboxItems_ItemAdd(ByVal Item As Object)

    Dim objDestFolder As Outlook.MAPIFolder
    Dim moveFolder As String
    
    If Item.Class = olMail Then
     
    Select Case i
     Case 0
          moveFolder = "Folder01"
     Case 1
          moveFolder = "Folder05"
     Case 2
          moveFolder = "Folder10"
     Case 3
          moveFolder = "Folder12"
     Case 4
          moveFolder = "Folder14"
    End Select
    
Set objDestFolder = Session.GetDefaultFolder(olFolderInbox).Folders(moveFolder)
  Item.Move objDestFolder
        End If
        
        Err.Clear
          
     i = i + 1
     Debug.Print i
     If i = 5 Then i = 0
 Set objDestFolder = Nothing
 End Sub

 

Move messages based on sender name

The modification is in response to the question in this Microsoft Community thread, Microsoft Community thread, where the messages are assigned by the sender's name.

We need to get the first letter of the sender's name. The select case statements check to see which case is true and moves the message to a folder. The Case Else handles all messages that do not match the other case statements.

I'm using UCase function to force capitalize the letters, otherwise, someone with a lowercase display name would end up in the Else folder. If you prefer, you can force the sender names to lower case using Left(LCase(Item.SenderName), 1), but must also enter the letters in each case statement in lower case.

Private WithEvents olInboxItems As Items
 
Private Sub Application_Startup()
  Dim objNS As NameSpace
  Set objNS = Application.Session
  'Set olInboxItems = GetFolderPath("Shared mailbox name\Inbox").Items
  Set olInboxItems = objNS.GetDefaultFolder(olFolderInbox).Items
Set objNS = Nothing
End Sub

Sub olInboxItems_ItemAdd(ByVal Item As Object)

    Dim objDestFolder As Outlook.MAPIFolder
    Dim moveFolder As String
    
   If Item.Class = olMail Then
    
     Debug.Print Item.SenderName, Left(Item.SenderName, 1)
     
    Select Case Left(UCase(Item.SenderName), 1)
    
     Case "A", "B", "C"
          moveFolder = "Folder01"
     Case "D", "E", "F"
          moveFolder = "Folder02"
     Case "G", "H", "I"
          moveFolder = "Folder03"
     Case Else ' letters not listed above
          moveFolder = "Folder04"
     
    End Select
    
Set objDestFolder = Session.GetDefaultFolder(olFolderInbox).Folders(moveFolder)
  Item.Move objDestFolder
        End If
        
        Err.Clear
           
Set objDestFolder = Nothing
 End Sub

 

Move Messages to Other Mailboxes

In this example, I'm moving messages to each person's Inbox. To do this, I need the mailboxes in my profile as secondary mailboxes.

Private Sub olInboxItems_ItemAdd(ByVal Item As Object)

    Dim objDestFolder As Outlook.MAPIFolder
    Dim moveFolder As String
    
    If Item.Class = olMail Then
     
    Select Case i
     Case 0
          moveFolder = "Mary Contrary\Inbox"
     Case 1
          moveFolder = "Diane Poremsky\Inbox"
     Case 2
          moveFolder = "John Smith\Inbox"
     Case 3
          moveFolder = "Mark Jackson\Inbox"
     Case 4
          moveFolder = "Sue Ellen\Inbox"
    End Select

Set objDestFolder = GetFolderPath(moveFolder)
   Item.Move objDestFolder
        End If

        Err.Clear
          
     i = i + 1
     Debug.Print i
     If i = 5 Then i = 0
 Set objDestFolder = Nothing
 End Sub

 

Forward Messages

If you prefer to forward messages, you'll use this code. The address in the sendTo variable can either be the users Exchange alias or their SMTP email address. Change oForward.Display to oForward.Send to send the messages automatically.

Private Sub olInboxItems_ItemAdd(ByVal Item As Object)

    Dim sendTo As String
    Dim oForward As MailItem
    Dim recip As Recipient
    If Item.Class = olMail Then
     
    Select Case i
     Case 0
          sendTo = "billys"
     Case 1
          sendTo = "johnj"
     Case 2
          sendTo = "dianep"
     Case 3
          sendTo = "maryc"
     Case 4
          sendTo = "henryp@mydomain.com"
    End Select
    
    Set oForward = Item.Forward
    Set recip = oForward.recipients.Add(sendTo)
        recip.Resolve
        oForward.Display 'send

        End If
        
        Err.Clear
          
     i = i + 1
     Debug.Print i
     If i = 5 Then i = 0

  Set recip = nothing
 End Sub

 

GetFolderPath Function

You need to use this function if the mailbox you are watching or that you are moving messages into is not the default mailbox in the profile.

' Use the GetFolderPath function to find a folder in non-default mailboxes
Function GetFolderPath(ByVal FolderPath As String) As Outlook.folder
    Dim oFolder As Outlook.folder
    Dim FoldersArray As Variant
    Dim i As Integer
         
    On Error GoTo GetFolderPath_Error
    If Left(FolderPath, 2) = "\\" Then
        FolderPath = Right(FolderPath, Len(FolderPath) - 2)
    End If
    'Convert folderpath to array
    FoldersArray = Split(FolderPath, "\")
    Set oFolder = Application.Session.Folders.Item(FoldersArray(0))
    If Not oFolder Is Nothing Then
        For i = 1 To UBound(FoldersArray, 1)
            Dim SubFolders As Outlook.Folders
            Set SubFolders = oFolder.Folders
            Set oFolder = SubFolders.Item(FoldersArray(i))
            If oFolder Is Nothing Then
                Set GetFolderPath = Nothing
            End If
        Next
    End If
    'Return the oFolder
    Set GetFolderPath = oFolder
    Exit Function
         
GetFolderPath_Error:
    Set GetFolderPath = Nothing
    Exit Function
End Function

How to use these Macros

First: You will need macro security set to low during testing.

To check your macro security in Outlook 2010 or 2013, go to File, Options, Trust Center and open Trust Center Settings, and change the Macro Settings. In Outlook 2007 and older, it’s at Tools, Macro Security.

After you test the macro and see that it works, you can either leave macro security set to low or sign the macro.

Open the VBA Editor by pressing Alt+F11 on your keyboard.

To use the macro code in ThisOutlookSession:

  1. Expand Project1 and double click on ThisOutlookSession.
  2. Copy then paste the macro into ThisOutlookSession. (Click within the code, Select All using Ctrl+A, Ctrl+C to copy, Ctrl+V to paste.)
  3. Right-click on Project1 and choose New > Module
  4. Paste GetFolderPath in this Module

More information as well as screenshots are at How to use the VBA Editor

Use a Macro to Assign Messages in a Shared Mailbox was last modified: July 26th, 2021 by Diane Poremsky

Related Posts:

  • Use a VBA macro to monitor a folder in a secondary mailbox for new mes
    Monitor secondary mailbox folder for new messages
  • Macro to Move Aged Email Messages
  • Assign Categories to Messages using Contact Category
  • Macro to Move or Copy an Outlook message to another folder

About Diane Poremsky

A Microsoft Outlook Most Valuable Professional (MVP) since 1999, Diane is the author of several books, including Outlook 2013 Absolute Beginners Book. She also created video training CDs and online training classes for Microsoft Outlook. You can find her helping people online in Outlook Forums as well as in the Microsoft Answers and TechNet forums.

Subscribe
Notify of
48 Comments
newest
oldest most voted
Inline Feedbacks
View all comments

Brett
March 29, 2021 5:44 pm

Hey Diane, I know this is an old thread, but I was going to see if you could help me. I am using a large combination of your code in two shared inboxes i manage at my job. The issue i am running into is trying to combine multiple round robin statements. So if the subject line has the word "Withdrawal" in it, then assign it to these three people. If the subject has the word deposit in it, assign it to these three people. The issue i am running into is in the below code, when it sees an e-mail with the subject "Withdrawal" it assigns it round robin correctly, but then the one below it, "Deposit" it always assigns it to the first person and the counter does not increase. I have tried everything and can not figure out how to make both counters work. Is there any insight you can give me? If InStr(1, UCase(Item.Subject), UCase("Withdrawal")) Or InStr(1, UCase(Item.Body), UCase("Withdrawal")) <> 0 Then    Select Case a    Case 0      strCat = "Case 0"    Case 1      strCat = "Case 1"        End Select         Item.Categories = strCat       Item.Save     Err.Clear    End If    a = a + 1    Debug.Print a    If… Read more »

0
0
Reply
Diane Poremsky
Author
Reply to  Brett
March 29, 2021 9:35 pm

it looks right... so  Debug.Print b always puts a 0 in the immediate window?

0
0
Reply
Mariah
July 27, 2020 11:13 am

Could you post code to run this with a button on all emails in a shared inbox?

I also keep getting an error at line:
Set objDestFolder = Session.GetDefaultFolder(olFolderInbox).Folders(moveFolder)

I tried using the other code for this line and it also fails. My folders are on the same level as the inbox.

0
0
Reply
Tyler
June 29, 2020 10:11 am

Hi,
This macro works perfectly. How would you modify the macro to skip a folder if you do not want to assign to them or if it is not there without manually changing the macro. I am looking to have a sub folder of "Do Not Assign" that management can move folders into and out of with the code still running and assigning emails to folders under the main inbox folder.

0
0
Reply
Tyler
June 10, 2020 4:53 pm

Hi,
This macro works perfectly. How would you modify the macro to skip a folder if you do not want to assign to them or if it is not there without manually changing the macro.

0
0
Reply
Cristina
April 30, 2019 2:45 pm

Hi,
I would like to combine 3 of the macros, first to categorize and then to forward the categorized e-mail and then move it to a specified folder. Could you please tell me how to do it?
Thanks,
Cristina

0
0
Reply
Diane Poremsky
Author
Reply to  Cristina
April 30, 2019 4:40 pm

I'm assuming if category 1, then folder 1, and user 1.... you'd merge the select cases and the same with the actions -
Select Case i
Case 0
strCat = "Case 0"
movedFolder = "Folder1"
sendTo = "Billy"
Case 1
......

End Select

Item.categories = strCat
Item.Save

Set oForward = Item.Forward
Set recip = oForward.recipients.Add(sendTo)
recip.Resolve
oForward.Display 'send

Set objDestFolder = GetFolderPath(moveFolder)
Item.Move objDestFolder

End If

0
0
Reply
Kauê
August 29, 2018 12:28 pm

Hi Diane, I saw you answered my question in the other post. Thanks for try to help me. I'm sorry for my ignorance, I did not know until recently that there was programming in Outlook, I'm new to it. All I needed was that: When a new email arrives in the shared box, check if the sender is on the Global Contact List, if so, categorize as "Diamond Consultant", if not, classify as "Other Emails". Is there a practical way to do this? I tried accessing the generic email as JMaster and creating the rule but I could not figure out how to access the email key, it asks for a password and no one could tell me what it was, ie it will have to be by macro. The shared email is platform.comercial@diamond.com.br Rule to categorize as Consultant: The sender must be in the "Global Contact List". So categorize as a Consultant Diamond and the color of the category is dark blue. If it does not fit the rule does not do anything, or else, could classify as "Other Emails" and the category color is red. Please please please, help-me to do this. I'm from Brazil, and no Brazilian… Read more »

0
0
Reply
ABI JACOB
June 5, 2018 8:10 am

Hello Thanks for the Macro i used the same it works till the assiging the case post that its stuck at "Set objDesFolder = Application.Session.GetDefaultFolder(olFolderInbox).Parent.Folders(moveFolder)" the error i get is Object not found. I put the below code in This outlook session. Dim i As Long Private WithEvents olInboxItems As Items Private Sub Application_Startup() Dim objNS As NameSpace Set objNS = Application.Session Set olInboxItems = GetFolderPath("gl testing\Inbox").Items Set objNS = Nothing End Sub Private Sub olInboxItems_ItemAdd(ByVal Item As Object) Dim strCat As String If Item.Class = olMail Then Select Case i Case 0 strCat = "Case 0" Case 1 strCat = "Case 1" Case 2 strCat = "Case 2" Case 3 strCat = "Case 3" Case 4 strCat = "Case 4" End Select Item.Categories = strCat Item.Save Err.Clear End If i = i + 1 Debug.Print i If i = 5 Then i = 0 Dim objDestFolder As Outlook.MAPIFolder Dim moveFolder As String If Item.Class = olMail Then Select Case i Case 0 moveFolder = "AV" Case 1 moveFolder = "AJ" Case 2 moveFolder = "AK" Case 3 moveFolder = "BB" Case 4 moveFolder = "SS" End Select Set objDesFolder = Application.Session.GetDefaultFolder(olFolderInbox).Parent.Folders(moveFolder) Item.Move objDestFolder End If Set objDestFolder = Nothing… Read more »

0
0
Reply
Diane Poremsky
Author
Reply to  ABI JACOB
June 7, 2018 12:31 am

>> "Set objDesFolder = Application.Session.GetDefaultFolder(olFolderInbox).Parent.Folders(moveFolder)"
>> the error i get is Object not found.

each moveFolder is at the same level as the Inbox? That is where Outlook expects them. They also need to exist, outlook won't create them.

0
-1
Reply
ABI JACOB
Reply to  Diane Poremsky
June 8, 2018 12:46 am

Hello Diane, Thanks for the response, The folder is under Inbox. and are already existing.

Please see attached screenshot,

Thanks
Abi Jacob

Capture.JPG
0
0
Reply
Joemar Coral
May 16, 2018 9:17 am

Hi Diane,

I'm creating a Macro to batch assign mail messages in the mailbox to different users. The code you mentioned is for Application start up. Can I use a command button to assign and categorise the mail messages to the users and transfer the outlook data to excel for monitoring?

0
0
Reply
Diane Poremsky
Author
Reply to  Joemar Coral
June 7, 2018 12:38 am

Yes, you can. The macor needs just a little tweaking. I have a stub macro that could do it with no changes to theat code, but it only runs on the selected message. If you want to run it on all messages in a folder, it needs a little more tweaking.

At the simplest, you just need to change the item, dim the item, and set the item - this will run only on the selected item:
Private Sub AssignMessages()
Dim Item as Mailitem
Dim objDestFolder As Outlook.MAPIFolder
Dim moveFolder As String

Set Item = Application.ActiveExplorer.Selection.Item(1)
Dim objDestFolder As Outlook.MAPIFolder
-- snip--

0
0
Reply

Visit Slipstick Forums.
What's New at Slipstick.com

Latest EMO: Vol. 30 Issue 31

Subscribe to Exchange Messaging Outlook






Support Services

Do you need help setting up Outlook, moving your email to a new computer, migrating or configuring Office 365, or just need some one-on-one assistance?

Our Sponsors

CompanionLink
ReliefJet
  • Popular
  • Latest
  • Week Month All
  • Jetpack plugin with Stats module needs to be enabled.
  • Move Deleted Items to Another Folder Automatically
  • Open Outlook Templates using PowerShell
  • Count and List Folders in Classic Outlook
  • Google Workspace and Outlook with POP Mail
  • Import EML Files into New Outlook
  • Opening PST files in New Outlook
  • New Outlook: Show To, CC, BCC in Replies
  • Insert Word Document into Email using VBA
  • Delete Empty Folders using PowerShell
  • Warn Before Deleting a Contact
Ajax spinner

Recent Bugs List

Microsoft keeps a running list of issues affecting recently released updates at Fixes or workarounds for recent issues in classic Outlook (Windows).

For new Outlook for Windows: Fixes or workarounds for recent issues in new Outlook for Windows .

Outlook for Mac Recent issues: Fixes or workarounds for recent issues in Outlook for Mac

Outlook.com Recent issues: Fixes or workarounds for recent issues on Outlook.com

Office Update History

Update history for supported Office versions is at Update history for Office

Outlook Suggestions and Feedback

Outlook Feedback covers Outlook as an email client, including Outlook Android, iOS, Mac, and Windows clients, as well as the browser extension (PWA) and Outlook on the web.

Outlook (new) Feedback. Use this for feedback and suggestions for Outlook (new).

Use Outlook.com Feedback for suggestions or feedback about Outlook.com accounts.

Other Microsoft 365 applications and services




New Outlook Articles

Move Deleted Items to Another Folder Automatically

Open Outlook Templates using PowerShell

Count and List Folders in Classic Outlook

Google Workspace and Outlook with POP Mail

Import EML Files into New Outlook

Opening PST files in New Outlook

New Outlook: Show To, CC, BCC in Replies

Insert Word Document into Email using VBA

Delete Empty Folders using PowerShell

Warn Before Deleting a Contact

Newest Code Samples

Open Outlook Templates using PowerShell

Count and List Folders in Classic Outlook

Insert Word Document into Email using VBA

Warn Before Deleting a Contact

Use PowerShell to Delete Attachments

Remove RE:, FWD:, and Other Prefixes from Subject Line

Change the Mailing Address Using PowerShell

Categorize @Mentioned Messages

Send an Email When You Open Outlook

Delete Old Calendar Events using VBA

VBA Basics

How to use the VBA Editor

Work with open item or selected item

Working with All Items in a Folder or Selected Items

VBA and non-default Outlook Folders

Backup and save your Outlook VBA macros

Get text using Left, Right, Mid, Len, InStr

Using Arrays in Outlook macros

Use RegEx to extract message text

Paste clipboard contents

Windows Folder Picker

Custom Forms

Designing Microsoft Outlook Forms

Set a custom form as default

Developer Resources

Developer Resources

Developer Tools

VBOffice.net samples

SlovakTech.com

Outlook MVP David Lee

Repair PST

Convert an OST to PST

Repair damaged PST file

Repair large PST File

Remove password from PST

Merge Two Data Files

Sync & Share Outlook Data

  • Share Calendar & Contacts
  • Synchronize two computers
  • Sync Calendar and Contacts Using Outlook.com
  • Sync Outlook & Android Devices
  • Sync Google Calendar with Outlook
  • Access Folders in Other Users Mailboxes

Diane Poremsky [Outlook MVP]

Make a donation

Mail Tools

Sending and Retrieval Tools

Mass Mail Tools

Compose Tools

Duplicate Remover Tools

Mail Tools for Outlook

Online Services

Calendar Tools

Schedule Management

Calendar Printing Tools

Calendar Reminder Tools

Calendar Dates & Data

Time and Billing Tools

Meeting Productivity Tools

Duplicate Remover Tools

Productivity

Productivity Tools

Automatic Message Processing Tools

Special Function Automatic Processing Tools

Housekeeping and Message Management

Task Tools

Project and Business Management Tools

Choosing the Folder to Save a Sent Message In

Run Rules on messages after reading

Help & Suggestions

Submit Outlook Feature Requests

Slipstick Support Services

Buy Microsoft 365 Office Software and Services

Visit Slipstick Forums.

What's New at Slipstick.com

Home | Outlook User | Exchange Administrator | Office 365 | Outlook.com | Outlook Developer
Outlook for Mac | Common Problems | Utilities & Addins | Tutorials
Outlook & iCloud Issues | Outlook Apps
EMO Archives | About Slipstick | Slipstick Forums
Submit New or Updated Outlook and Exchange Server Utilities

Send comments using our Feedback page
Copyright © 2025 Slipstick Systems. All rights reserved.
Slipstick Systems is not affiliated with Microsoft Corporation.

:wpds_smile::wpds_grin::wpds_wink::wpds_mrgreen::wpds_neutral::wpds_twisted::wpds_arrow::wpds_shock::wpds_unamused::wpds_cool::wpds_evil::wpds_oops::wpds_razz::wpds_roll::wpds_cry::wpds_eek::wpds_lol::wpds_mad::wpds_sad::wpds_exclamation::wpds_question::wpds_idea::wpds_hmm::wpds_beg::wpds_whew::wpds_chuckle::wpds_silly::wpds_envy::wpds_shutmouth:
wpDiscuz

Sign up for Exchange Messaging Outlook

Our weekly Outlook & Exchange newsletter (bi-weekly during the summer)






Please note: If you subscribed to Exchange Messaging Outlook before August 2019, please re-subscribe.

Never see this message again.

You are going to send email to

Move Comment