【问题标题】:Access Get subfolder of shared folder meetings访问获取共享文件夹会议的子文件夹
【发布时间】:2016-08-29 06:03:36
【问题描述】:

我有下面的代码,可以让我从共享子日历中检索会议,但它不起作用。

如果我只尝试访问主共享日历,它可以完美运行,但不适用于子日历..

有人能指点我正确的方式吗?

Public Sub getCalendarData(calendar_name As String, sDate As Date, eDate As Date, Optional recurItem As Boolean = True)
    On Error GoTo ErrorHandler

    Dim oOL As Outlook.Application
    Dim oNS As Outlook.Folder
    Dim oAppointments As Outlook.AppointmentItem
    Dim oAppointmentItem As Outlook.AppointmentItem
    Dim strFilter As String
    Dim ItemsCal As Outlook.Items
    Dim olFolder As Outlook.Folder
    Dim fldCalendar As Outlook.Folder
    Dim iCalendar As Integer
    Dim nmsNameSpace As Outlook.Namespace
    Dim objDummy As Outlook.MailItem
    Dim objRecip As Outlook.Recipient

    'Set objects

    Set oOL = CreateObject("Outlook.Application")
    Set nmsNameSpace = oOL.GetNamespace("MAPI")

    Set objDummy = oOL.CreateItem(olMailItem)

    Set objRecip = nmsNameSpace.CreateRecipient("shared calendar name")
    objRecip.Resolve

    'Set filter to grab items by date range
    strFilter = "[Start] >= " _
    & "'" & sDate & "'" _
    & " AND [End] <= " _
    & "'" & eDate & "'"

    With ItemsCal
        .Sort "[Start]"
        .IncludeRecurrences = recurItem
    End With

    If objRecip.Resolved Then
        On Error Resume Next
        Set fldCalendar = nmsNameSpace.GetSharedDefaultFolder(objRecip, olFolderCalendar).Folders("sub_calendar_name")

        If Not fldCalendar Is Nothing Then
            Set ItemsCal = fldCalendar.Items
            If Not ItemsCal Is Nothing Then
                For Each oAppointmentItem In ItemsCal.Restrict(strFilter)
                    Set objItem = oAppointmentItem
                    With oAppointmentItem
                        iCalendar = getSegmentIDByName(calendar_name)
                        meeting_id = insertAppointment(iCalendar, .Start, .End, scrubData(.Subject), scrubData(.Location), Format(.Start, "Long Time"), .duration, .Body)
                        Call GetAttendeeList(meeting_id, objItem, .Recipients)
                    End With
                Next
            End If
        End If
    End If

    'Garbage cleanup
    Set oAppointmentItem = Nothing
    Set oAppoinments = Nothing
    Set oNS = Nothing
    Set oOL = Nothing

Exit Sub
ErrorHandler:
    'MsgBox "Error: " & Err & " | " & Error(Err)
    'Whenever error occurs, skip to next
    Resume Next
End Sub

问题是fldCalendar 总是返回nothing 而我不知道出了什么问题..

谢谢!

【问题讨论】:

    标签: ms-access outlook vba


    【解决方案1】:

    请记住,在缓存模式下,当您从另一个邮箱访问默认文件夹时,您不会访问整个邮箱 - 文件夹(但不是其子文件夹)缓存在您的主 OST 文件中。

    您可以将整个邮箱添加为委托存储(Exchange 帐户属性对话框的“高级”选项卡),然后从 Store.RootFolder 向下钻取到该文件夹​​(从 Namespace.Stores 集合中检索存储)。

    如果使用Redemption 是一个选项,RDOSession 的版本。GetSharedDefaultFolder(或RDOSession.GetSharedMailbox)返回一个活动文件夹(RDOFolder),而不是它的缓存版本,所以你将能够访问子文件夹。

    【讨论】:

    • 感谢您的快速回答。所以我应该使用类似 Store.RootFolder.Folders(''calendar_name') 的东西?或者如何检索该文件夹中的会议?
    • 完全正确 - Store.RootFolders.Folders("Calendar").Folders("Sub Folder name") 或 Store.GetDefaultFolder(olFolderCalendar).Folders("Sub Folder name") 会起作用.
    • Dim rootFolder As Outlook.Stores Set rootFolder = nmsNameSpace.Stores Set fldCalendar = rootFolder.RootFolders.Folders("Calendar").Folders("Sub Folder name") 但是,我将失去与共享默认文件夹的连接..
    • “但是,我将失去与共享默认文件夹的连接。”到底是什么意思?
    • 同样,如果您使用缓存模式,文件夹(不包括子文件夹)将在 OST 文件中。要么使用在线(相对于缓存)模式,要么使用 Redemption(不缓存文件夹)。
    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2016-07-31
    • 1970-01-01
    相关资源
    最近更新 更多