[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 325
  • 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:

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

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