On my blog and on various messageboards such as VBA Express, I find myself using the same event code repeatedly. So here is the stock event code I use when someone asks "How do I do X automatically?"
This code is perfect for questions like
- How do I move messages automatically depending on the sender or subject?
- How do save new attachments to different folders?
- How do I open or print attachments depending on the time of day?
There are many other conditions as well, such as
- message importance
- the number or type of attachments
- specific words contained in the body
- whether you were CC'd or BCC'd
You can customize your event to handle any of these conditions and more.
All you need to do is cut and paste the code below into your ThisOutlookSession module in Outlook's VBIDE. (Press Alt+F11 to get there from Outlook.) Then customize to your liking. See the comments for the spots that you need to edit.
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
' (1) default Inbox
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
On Error Goto ErrorHandler
Dim Msg As Outlook.MailItem
' (2) only act if it's a MailItem
If TypeName(item) = "MailItem" Then
Set Msg = item
' (3) do something here
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
You'll need to edit three spots:
- The folder you want to monitor for new messages;
- olFolderDeletedItems – Deleted Items
- olFolderOutbox – Outbox
- olFolderSentMail – Sent Mail
- (olFolderInbox – Inbox)
- olFolderCalendar – Calendar
- olFolderContacts – Contacts
- olFolderJournal – Journal
- olFolderNotes – Notes
- olFolderTasks – Tasks
- olFolderDrafts – Drafts
- The type of item you want to watch for (message, meeting request, task);
- "MailItem"
- "MeetingItem"
- "TaskRequestItem"
- Email messages
- Meeting requests
- Delegated/Assigned Tasks
- The action you want to take when a matching item comes into the specified folder.
-
If you want a default folder, replace olFolderInbox with one of the olDefaultFolders Constants:
For a non-default folder, you'll need to walk down the folder hierarchy and set a reference as follows:
' set a reference to Inbox\MyItems folder
Set Items = objNS.Folders("Inbox").Folders("My Items").Items
Or
' set a reference to Inbox\MyItems folder
Set Items = objNS.GetDefaultFolder(olFolderInbox).Folders("My Items").Items
which corresponds to
There are other types of items as well, such as TaskRequestAcceptItem (when someone accepts your task), or PostItem, which can also be added to any folder, and ReportItem, which is a system-generated delivery report. I've chosen to focus on the most common ones, however, but feel free to request additional samples using these objects.
This is left to your imagination. You can move messages to a folder, forward them to another recipient, or save attachments and run a macro on them. My blog has additional samples you can apply using this stock code.
