VBA,Outlook,看到'人们的日历

时间:2011-04-11 14:06:52

标签: vba calendar outlook-vba

我正在以编程方式(使用VBA)访问其他人与我共享的日历。它们列在我的Outlook“人物日历”下。我在网上搜索过这个,所有的建议都没有让我感到困惑。如何从“人物日历”中获取与我共享的所有日历列表,以及特定日历中的一个日历?

3 个答案:

答案 0 :(得分:2)

从以下代码中查看返回的值。它按名称搜索某个人,与您在新电子邮件中键入收件人时相同,然后抓取该人员共享日历并枚举所有共享约会。

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

答案 1 :(得分:0)

我认为这更接近了。它来自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

答案 2 :(得分:-1)

建议帮助那些可能尝试使用此处发布的ShowOtherUserCalFolders()代码的人。此代码将创建多个隐藏的outlook实例,如果多次运行,最终可能会使您的计算机陷入困境。您可以调用当前打开的Outlook(应用程序,而不是创建新的Outlook.application)(必须打开Outlook才能使其工作)。

要执行此操作,请将Dim objOL As Outlook.Application替换为Dim objOL as Object,将Set objOL = Application替换为Set myOlApp = GetObject(, "Outlook.Application")

还要确保关闭objExpCal资源管理器,因为这也会创建一个隐藏的outlook实例,将objExpCal.Close添加到代码的末尾。