VBA,Outlook,看到'人们的日历
我打算以编程方式(使用VBA)访问其他人与我共享的日历。他们被列在我的展望“人民日历”下。我已经在网上搜索了这一点,所有的建议都只是让我感到困惑。我如何获得所有共享给我的日历的列表,然后从“人员日历”中选择一个特定的日历?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
我觉得这个更接近了。它来自Sue Mosher出色的Microsoft Outlook 2007编程:为超级用户和管理员提供的Jumpstart。我希望她不介意。
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 Object
和Set objOL = Application
取代Dim objOL As Outlook.Application
与Set myOlApp = GetObject(, "Outlook.Application")
另外,还要确保你关闭objExpCal Explorer作为这也将创造前景的一个隐藏的实例,添加objExpCal.Close
你的代码的末尾。
因为代码将在Outlook中运行,所以代码挂钩到Outlook的现有实例中,而不是创建新代码。代码ForEachLoop绝不会创建多个Outlook实例。 Outlook是一个单一实例类。有关详细说明,请参阅http://*.com/questions/6481398/vba-determining-whether-an-existing-outlook-instance-is-open。 – JimmyPena 2011-11-21 21:09:54
谢谢。我总是在'GetSharedDefaultFolder'调用中遇到'操作失败'。我使用的'姓名'是与我分享日历的人。我忽略了什么? – ForEachLoop 2011-04-12 15:22:14
确保您传递了GetSharedDefaultFolder已解析的Outlook.Recipient对象,而不仅仅是一个“名称”字符串。 – Alain 2011-04-12 16:54:53
除非'_recipient.Resolved'成功,否则我无法访问GetSharedDefaultFolder,是否正确?一种观察是,在Outlook 2007中,“人员日历”在文件夹列表视图中不显示为共享文件夹。那是问题吗? – ForEachLoop 2011-04-12 17:29:57