A few Outlook 2007 macros that I’m putting together during my lunch breaks in an attempt to make it easier to manage my e-mail in an effective fashion.
To use these, paste them into your macro editor and hang them off the Actions menu (if you only use a few) or create an “&X”1 menu (to be invoked using Alt+X) and group them all there.
To enable macros, visit Tools – Macro – Macro Security, change the default settings and restart Outlook.
Archive
Sub Archive()
Dim item As MailItem
fileFolderName = "Archive"
'First locate the actual folder and get its handle
Set myolApp = CreateObject("Outlook.Application")
Set myNamespace = myolApp.GetNamespace("MAPI")
Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox)
Set rootFolder = myInbox.Parent
Set subFolders = rootFolder.Folders
Set subFolder = subFolders.GetFirst
Do While Not subFolder Is Nothing
If subFolder.Name = fileFolderName Then
fileEntryID = subFolder.EntryID
Set fileFolder = myNamespace.GetFolderFromID(fileEntryID)
Exit Do
End If
Set subFolder = subFolders.GetNext
Loop
'Now move all selected items there
For Each item In Outlook.Application.ActiveExplorer.Selection
item.Move fileFolder
Next
End Sub
1 As usual in Windows, the ampersand denotes the accelerator key bound to the menu.
Task Report
The following script (that you can save to a .vbs file) generates a bare-bones HTML report from your current Tasks folder and prepares it for sending:
'Globals
Dim oOutlook
Dim oNamespace
Dim oFolder
Dim aItems
Dim oTask
Dim szBuffer
Dim aPriority
Dim aStatus
Dim aPriorityColors
Dim aStatusColors
aPriority = Array("Low", "Medium", "High")
aStatus = Array("Not Started", "In Progress", "Completed", "Waiting on someone else", "Deferred")
aPriorityColors = Array("none", "yellow", "red")
aStatusColors = Array("red", "green", "green", "yellow", "blue")
'Constants
Const olMailItem = 0
Const olTaskItem = 3
Const olFolderTasks = 13
'Create Outlook, Namespace, Folder Objects and Task Item
Set oOutlook = CreateObject("Outlook.application")
Set oNamespace = oOutlook.GetNameSpace("MAPI")
Set oFolder = oNamespace.GetDefaultFolder(olFolderTasks)
Set aItems = oFolder.Items
szBuffer = "<table border=""1"" style=""font-family: Calibri"">" & vbCrLf &"<tr><th>Project</th><th>Task</th><th>Priority</th><th>Status</th><th>Due Date</th><th>Status</th><th>Notes</th></tr>" & vbCrLf
'Build Table
nCount = 0
For Each oTask in aItems
'oTask has the following properties - http://msdn2.microsoft.com/en-us/library/aa211067(office.11).aspx
If oTask.Sensitivity=0 Then 'only non-private tasks
szBuffer = szBuffer & "<tr>"
szBuffer = szBuffer & "<td>" & oTask.BillingInformation & "</td>"
szBuffer = szBuffer & "<td>" & oTask.Subject & "</td>"
szBuffer = szBuffer & "<td>" & aPriority(oTask.Importance) & "</td>"
szBuffer = szBuffer & "<td style=""background-color: " & aStatusColors(oTask.Status) & """>" & aStatus(oTask.Status) & "</td>"
if oTask.DueDate = "1/1/4501" Then 'Outlook stupidity
szBuffer = szBuffer & "<td>None</td>"
else
szBuffer = szBuffer & "<td>" & oTask.DueDate & "</td>"
end if
szBuffer = szBuffer & "<td>" & oTask.PercentComplete & "</td>"
szBuffer = szBuffer & "<td>" & oTask.Body & "</td>"
szBuffer = szBuffer & "</tr>"
End If
Next
Set oMsg = oOutlook.CreateItem(olMailItem)
oMsg.To = "Big Brother"
oMsg.Subject = "Status Report - " & Date()
oMsg.Display
szBuffer = replace(szBuffer,vbCrLF,"<br>")
oMsg.HTMLBody = szBuffer
'Clean up
Set oFolder = Nothing
Set oNamespace = Nothing
set oOutlook = Nothing
set oMsg = Nothing