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.
What??
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.
https://www.microsoft.com/en-us/download/details.aspx?id=16645
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.
Outlook Calendar Print website.
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:
Microsoft Official Page on Self-Signed Projects
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
Leave a Reply