【发布时间】:2011-08-03 02:37:21
【问题描述】:
我正在尝试以编程方式(使用 VBA)访问其他人与我共享的日历。它们列在我的 Outlook 中的“人员日历”下。我已经在网上搜索过这个,所有的建议都只是让我感到困惑。如何从“人民的日历”中获取共享给我的所有日历的列表,然后是一个特定的日历?
【问题讨论】:
我正在尝试以编程方式(使用 VBA)访问其他人与我共享的日历。它们列在我的 Outlook 中的“人员日历”下。我已经在网上搜索过这个,所有的建议都只是让我感到困惑。如何从“人民的日历”中获取共享给我的所有日历的列表,然后是一个特定的日历?
【问题讨论】:
查看以下代码的返回值。它按姓名搜索人,就像您在新电子邮件中键入收件人时一样,然后抓取该人的共享日历并枚举所有共享约会。
Dim _namespace As Outlook.NameSpace
Dim _recipient As Outlook.Recipient
Dim calendarFolder As Outlook.Folder
Set _namespace = Application.GetNamespace("MAPI")
Set _recipient = _namespace.CreateRecipient(name)
_recipient.Resolve
If _recipient.Resolved Then
Set calendarFolder = _namespace.GetSharedDefaultFolder(_recipient, olFolderCalendar)
'This would display the calendar on the screen:
'calendarFolder.Display
Dim oItems As Outlook.Items
Set oItems = calendarFolder.Items
'oItems is now a set of all appointments in that person's calendar
'Play on
End if
【讨论】:
_recipient 更改为 recipient)。在我删除它们之后,它就可以工作了。
我认为这更接近了。它来自 Sue Mosher 出色的 Microsoft Outlook 2007 Programming: Jumpstart for Power Users and Administrators。我希望她不会介意。
Sub ShowOtherUserCalFolders()
Dim objOL As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim objExpCal As Outlook.Explorer
Dim objNavMod As Outlook.CalendarModule
Dim objNavGroup As Outlook.NavigationGroup
Dim objNavFolder As Outlook.NavigationFolder
Dim objFolder As Outlook.Folder
Dim colExpl As Outlook.Explorers
Dim objExpl As Outlook.Explorer
Set objOL = Application
Set objNS = objOL.Session
Set colExpl = objOL.Explorers
Set objExpCal = _
objNS.GetDefaultFolder(olFolderCalendar).GetExplorer
Set objNavMod = objExpCal.NavigationPane.Modules. _
GetNavigationModule(olModuleCalendar)
Set objNavGroup = objNavMod.NavigationGroups. _
GetDefaultNavigationGroup(olPeopleFoldersGroup)
For Each objNavFolder In objNavGroup.NavigationFolders
Set objFolder = objNavFolder.Folder
Set objExpl = _
colExpl.Add(objFolder, olFolderDisplayNormal)
objExpl.Activate
objExpl.WindowState = olMaximized
objExpl.WindowState = olMinimized
Next
Set objOL = Nothing
Set objNS = Nothing
Set objNavMod = Nothing
Set objNavGroup = Nothing
Set objNavFolder = Nothing
Set objFolder = Nothing
Set colExpl = Nothing
Set objExpl = Nothing
End Sub
【讨论】:
只是一个建议,以帮助可能尝试使用此处发布的 ShowOtherUserCalFolders() 代码的人。此代码将创建多个隐藏的 Outlook 实例,如果多次运行这些实例最终可能会使您的机器陷入困境。您可以调用当前打开的应用程序,而不是创建新的 Outlook.application(Outlook 必须打开才能工作)。
为此,将Dim objOL As Outlook.Application 替换为Dim objOL as Object,将Set objOL = Application 替换为Set myOlApp = GetObject(, "Outlook.Application")
还要确保关闭 objExpCal Explorer,因为这也会创建一个隐藏的 Outlook 实例,请将 objExpCal.Close 添加到代码末尾。
【讨论】: