Managing your calendar in Outlook can be extremely helpful. But what do you do if you need to print out a calendar page that shows information from multiple calendars in the Outlook system?
I have been a convert to using Microsoft Outlook’s calendars for many years. Since I’m in Outlook all day anyway, managing my email, the Calendar alerts tie in smoothly to that. It allows me to conveniently juggle my own schedule. In addition, and just as importantly, I can seamlessly integrate other peoples’ calendars in my display. In my case, I have a personal Outlook calendar with my own appointments and meetings. In addition, I have my display show a Google calendar of my boyfriend’s band, to know when their upcoming gigs are. I also show the Google calendar of the local art organization I manage, to keep track of their shows and events.
This is absolutely perfect for on-screen work. I can glance at that screen and see everything that is going on. However, when I try to print a monthly calendar to hang by my desk, the system breaks down. That’s because, for some completely unknown reason, YOU CAN ONLY PRINT ONE OUTLOOK CALENDAR AT A TIME.
I was absolutely sure the functionality of printing multiple calendars had to exist in Outlook. Nearly everyone I know who uses Outlook is managing multiple calendars. Why in the world would Outlook only allow you to print one single calendar onto a piece of paper?
Hopefully we can keep lobbying Microsoft to update Outlook to provide this functionality. In the meantime, here are some workarounds.
Print a Screenshot of your Outlook Calendar
Yes, this is ridiculous. But it is probably the easiest solution. Simply get your screen to look the way you want your printed version to look – week view, month view, or whatever. Then hit the PRINT SCREEN button on your keyboard. Open up Paint or Photoshop or Gimp and paste that image into a new file. Crop out the extra stuff. Print it. While this works, I do NOT like this solution because my printer isn’t great with colors (I need a new one) so the printout is hard to read.
Move All Appointments into One Calendar
This can be done with a macro or by hand, depending on how many appointments you have. If everything is in one calendar then it prints as usual. This is a royal pain but it clearly works and it prints just the way a standard calendar does.
Add-On Program from Microsoft – CalendarPrintAssistant.exe
This comes directly from Microsoft, and the latest release date I know of is December 2019. You have to add it on to Outlook. It then lets you have additional options for Calendar. Here is the direct link to Microsoft to learn more. Note this add-on only works with Microsoft Office 2007.
For-Pay Add-On Program from Outlook Calendar Print
This is a money-costing option. You buy the software for $49 and download it. This then lets you have a variety of options for printing from Outlook Calendar.
Writing a Macro for Microsoft Outlook 365
If you want to write a macro to automate activities in Microsoft Office 365, first you have to tweak your trust settings to allow that testing to happen. To do this:
In Microsoft Outlook, click on File -> Options. Choose Trust Center -> Trust Center Settings. In the “Macro Settings” area, set it to “Notifications for all macros”. Save, then restart Outlook.
Next, you need the developer tab visible to work with macros in Outlook. For this, in Microsoft Outlook, click on File -> Options. Choose Customize Ribbon. On the left drop-down, choose “Main Tab”. Add the “Developer” option and save. You can now work with macros.
To paste in a new macro, click on the Visual Basic for Applications (VBA) option. You’ll start out with a default project, probably Project1 on the left. RIGHT click on this and use Insert-Module. Paste in the macro code you found (or write it yourself if you’re enthusiastic!). Save it.
To run the macro, open up the Calendar view as always. In the lower right where you show which calendars to display, make sure there’s a check box by each calendar in your set. You probably already have that done. Now click on Developer – Macros – Project1.PrintCalendarsAsOne.
A brand new calendar should appear in that list called “Print”. That should have everything from your other selected calendars for the next 92 days. So you can print that calendar to show all your meetings.
Here is the macro I am currently using. Its aim is to populate a temporary “everything” calendar out for the subsequent two months. That way I can print paper copies of the next two monthly calendar sheets to hang by my desk. I like to always keep paper calendars for this month and the next two months by my desk, to see those three months at a glance.
As a final note, once you are sure your macro is running nicely, it’s a good idea to digitally sign it. Open up VBA again. The process is under Tools -> Digital Signature. If you need to set up a certificate on your machine, here is how:
Dim CalFolder As Outlook.Folder Dim printCal As Outlook.Folder ' Base code initially from: https://www.slipstick.com/outlook/combine-outlook-calendars-print-one/ ' Modified by Lisa Shea ' ' Run this macro Sub PrintCalendarsAsOne() Dim objPane As Outlook.NavigationPane Dim objModule As Outlook.CalendarModule Dim objGroup As Outlook.NavigationGroup Dim objNavFolder As Outlook.NavigationFolder Dim objCalendar As Folder Dim objFolder As Folder Dim objDeletedItems As Outlook.Folder Dim objDeleteFolders As Outlook.Folders Dim i As Integer Dim g As Integer On Error Resume Next Set objCalendar = Session.GetDefaultFolder(olFolderCalendar) Set printCal = objCalendar.Folders("Print") printCal.Delete Set objDeletedItems = Session.GetDefaultFolder(olFolderDeletedItems) Set objDeleteFolders = objDeletedItems.Folders objDeleteFolders.Item("Print").Delete Set printCal = objCalendar.Folders.Add("Print") Set Application.ActiveExplorer.CurrentFolder = objCalendar DoEvents Set objPane = Application.ActiveExplorer.NavigationPane Set objModule = objPane.Modules.GetNavigationModule(olModuleCalendar) With objModule.NavigationGroups For g = 1 To .Count Set objGroup = .Item(g) For i = 1 To objGroup.NavigationFolders.Count Set objNavFolder = objGroup.NavigationFolders.Item(i) If objNavFolder.IsSelected = True Then 'run macro to copy appt Set CalFolder = objNavFolder.Folder CopyAppttoPrint End If Next i Next g End With Set objPane = Nothing Set objModule = Nothing Set objGroup = Nothing Set objNavFolder = Nothing Set objCalendar = Nothing Set objFolder = Nothing End Sub Private Sub CopyAppttoPrint() Dim calItems As Outlook.Items Dim ResItems As Outlook.Items Dim sFilter As String Dim iNumRestricted As Integer Dim itm, newAppt As Object Set calItems = CalFolder.Items If CalFolder = printCal Then Exit Sub End If ' Sort all of the appointments based on the start time calItems.Sort "[Start]" calItems.IncludeRecurrences = True calName = CalFolder.Parent.Name ' to use category named for account & calendar name ' calName = CalFolder.Parent.Name & "-" & CalFolder.Name 'create the filter - this copies appointments today to 92 days from now sFilter = "[Start] >= '" & Date & "'" & " And [Start] < '" & Date + 92 & "'" ' Apply the filter Set ResItems = calItems.Restrict(sFilter) iNumRestricted = 0 'Loop through the items in the collection. For Each itm In ResItems iNumRestricted = iNumRestricted + 1 Set newAppt = printCal.Items.Add(olAppointmentItem) With newAppt .Subject = itm.Subject .Start = itm.Start .End = itm.End .ReminderSet = False .Categories = calName .Save End With Next ' Display the actual number of appointments created Debug.Print calName & " " & (iNumRestricted & " appointments were created") Set itm = Nothing Set newAppt = Nothing Set ResItems = Nothing Set calItems = Nothing Set CalFolder = Nothing End Sub