In Outlook, categories are a means of organizing items into logical groups. They’re very much like Gmail’s labels, with the added benefit that you can assign each category a color. Being able to color code items is fantastic. With a quick glance you can tell what category an item belongs to. There’s one hitch though. The colors are specific to each individual. In a shared calendar that can be an issue. A category I see as green you might see as orange. Sometimes businesses and organizations, possibly even families, need everyone to see things in the same color. Imagine a business with a shared project calendar. Critical due dates all belong to the “critical” category and should appear in red. While Sally has “critical” items set to red, John has them set to blue, while Tom and Anita haven’t defined a color for “critical”, causing them to appear in white. While Outlook does propagate category names to each person’s list of categories, it does not propagate the color associated with each category.
The solution, as you might have guessed, is to use a script to synchronize a set of category names and colors to all users. The script could go in Outlook, where it would run each time Outlook starts, or it could be an external script that’s part of a login script or scheduled to run at regular intervals using Windows Task Scheduler. I’ve taken the external approach, though I’ll be glad to add a version that runs from inside Outlook if anyone is interested. The biggest advantage of an external script is that it doesn’t have to be installed on all computers if it’s called from a login script. A version that runs inside of Outlook would have to be installed on each computer.
As with many solutions, the script is actually very simple. It starts be deleting all the corporate categories (i.e. the category names and colors being enforced across all computers) from the computer. Next, it opens a file containing the corporate category definitions, reads and adds them to Outlook. The definitions are stored in a plain-text file that’s kept on a share accessible by all computers. Here’s a sample showing what the file will look like.
'--> Enter one category per line. '--> You may enter category definitions in either of two formats. '--> Format 1 is name,color '--> Format 2 is name,color,shortcut '--> Blank lines and lines beginning with an apostrophe are ignored by the script. 'Category 1 has a name and a color Critical,1 'Category 2 has a name, a color, and a shortcut Tasks,2,1
To keep the corporate categories separate from the user’s personal categories, the script prefixes each category name with a code. By default the script uses “cc” (for corporate category), but you can change that as desired.
Outlook uses a numeric code to represent a category’s color and shortcut. See these pages for details.
Follow these instructions to add the code to Outlook.
- Open Notepad.
- Enter your category definitions. Use the sample file above as a guide.
- Save the file to a network share that everyone has access to. You can name the file anything you want.
- Close Notepad.
- Open Notepad.
- Copy the code below and paste it into Notepad.
- Edit the code per the comments I included in it.
- Save the file. Name it as you like, just be sure that the extension is .vbs.
- Test the script by double-clicking on it. It should add the categories you defined to Outlook on your computer.
- Include a command in your login script that calls this script. I can’t advise on how to do that as there are many different ways to implement a login script.
'--> On the next line edit the path to and name of the categories definition file. Const CORP_CAT_FILE = "\\Server\Share\CorpCat.txt" '--> On the next line edit the code that will be prefixed to all corporate categories to keep them separate from personal categories. Const CORP_CAT_PREFIX = "cc" Dim objFSO, objFil, arrTmp, varTmp, olkApp, olkSes, olkCat, intIdx, strBuf '--> Connect to Outlook Set olkApp = CreateObject("Outlook.Application") Set olkSes = olkApp.GetNamespace("MAPI") olkSes.Logon olkApp.DefaultProfileName '--> Clear the existing corporate categories For intIdx = olkSes.Categories.Count To 1 Step -1 If Left(olkSes.Categories.Item(intIdx), Len(CORP_CAT_PREFIX)) = CORP_CAT_PREFIX Then olkSes.Categories.Remove intIdx End If Next '--> Connect to the text file containing the categories Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFil = objFSO.OpenTextFile(CORP_CAT_FILE) '--> Read the categories from the file and add them to Outlook Do While Not objFil.AtEndOfStream strBuf = objFil.ReadLine If (Not Left(strBuf, 1) = "'") And (Not Left(strBuf, 1) = "") Then arrTmp = Split(strBuf, ",") Select Case UBound(arrTmp) Case 1 olkSes.Categories.Add CORP_CAT_PREFIX & arrTmp(0), arrTmp(1) Case 2 olkSes.Categories.Add CORP_CAT_PREFIX & arrTmp(0), arrTmp(1), arrTmp(2) End Select End If Loop '--> Close the text file objFil.Close '--> Disconnect from Outlook olkSes.Logoff '--> Destroy all objects Set olkSes = Nothing Set olkApp = Nothing Set objFil = Nothing Set objFSO = Nothing