• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 328
  • Last Modified:

How do I reference a calendar other than the default calendar?

I am exporting the events from one day into a table in a Word document. I have not found a way to reference a calendar at the root of a mailbox besides the default calendar. Every method I find online doesn't quite work. Here are the lines that I think need to be changed:

Set wrdDoc = wrdApp.Documents.Add
Set MyOutlookNS = GetNamespace("MAPI")
Set myItems = MyOutlookNS.GetDefaultFolder(olFolderCalendar).Items

i know this code is not documented well, somewhat messy, and it is probably not wise to put so much code under a button click. The only part that is really of concern for this question is the beginning from the Dim statements through the Set statements.

Private Sub CommandButton1_Click()

Dim MyOutlookNS As Outlook.NameSpace
Dim targetDate As Date
Dim comparisonDate As Date
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim myItems As Outlook.Items
Dim myRange As Range
Dim X, Y As Integer

Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Add
Set MyOutlookNS = GetNamespace("MAPI")
Set myItems = MyOutlookNS.GetDefaultFolder(olFolderCalendar).Items
Set myRange = wrdDoc.Content

targetDate = Now

myItems.Sort "[Start]", False

   wrdDoc.Paragraphs.SpaceAfterAuto = 0
   wrdDoc.Paragraphs.Format.SpaceAfter = 0
   wrdDoc.Paragraphs.LineSpacingRule = wdLineSpaceSingle
With myRange

   .ParagraphFormat.Alignment = wdAlignParagraphLeft
   .Font.Size = 24
   .Font.Bold = True
   .InsertAfter targetDate & vbCrLf

   .Collapse wdCollapseEnd
   .Tables.Add myRange, 1, 2
   .Tables(1).TopPadding = 0
   .Tables(1).BottomPadding = 0
   .Tables(1).LeftPadding = 0
   .Tables(1).RightPadding = 0
   .Tables(1).Spacing = 0

X = 1
Y = 1

For Each MyAppt In myItems
   comparisonDate = MyAppt.Start
   If Mid(comparisonDate, 1, 9) = Mid(targetDate, 1, 9) Then
       .Tables(1).Cell(X, Y).Range.Text = Format(MyAppt.Start, "Medium Time") & " - " & Format(MyAppt.End, "Medium Time")
       .Font.Bold = True
       .Tables(1).Cell(X, Y + 1).Range.Text = MyAppt.Subject & " - " & MyAppt.Location & vbCrLf & MyAppt.Body

       X = X + 1

   End If
End With

wrdApp.Visible = True

End Sub

Open in new window

  • 2
2 Solutions
As you stated, there is very little documentation out there.  I managed to find the following instructions from Sue Mosher [MVP-Outlook].  Hope it helps.

To create a new item in a non-default folder programmatically, use the =
Add method on the target folder's Items collection:

Set newItem =3D targetFolder.Items.Add("IPM.Post.YourFormName")

The message class parameter is optional.=20

To create an item in another person's Calendar folder in an Exchange =
mailbox, use Namespace.GetSharedDefaultFolder to get the target =
MAPIFolder. Otherwise, you can use the code at =
http://www.outlookcode.com/d/code/getfolder.htm to walk the folder =
hierarchy and return the MAPIFolder corresponding to a given path =
This link has code snippets with explanations that should help clarify things, but you have to read it in its entirety:
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now