Outlook VBA работает с папкой общего хранилища

Я пытаюсь добавить события в календарь Outlook в общедоступном магазине (например, в магазине PF, который не принадлежит какому-либо конкретному пользователю)

Как ссылаться на эту папку (календарь), чтобы иметь возможность работать с элементами в ней?

Перечисление по пути (и приведенному ниже коду) занимает около двух минут, чтобы пройти путь вниз по нужной мне папке, а затем я не могу установить ссылку на него в исходной подпрограмме.

Перечисление адаптировано из MSDN здесь.

Public Function EnumerateFoldersInStores(ByVal searchFolder As String) As Outlook.Folder
    Dim colStores As Outlook.Stores
    Dim oStore As Outlook.Store
    Dim oRoot As Outlook.Folder

    On Error Resume Next
    Set EnumerateFoldersInStores = Nothing
    Set colStores = Application.Session.Stores

    For Each oStore In colStores
        Set oRoot = oStore.GetRootFolder

        If oRoot.Name = searchFolder Then
            Debug.Print (oRoot.FolderPath)
            Set EnumerateFoldersInStores = EnumerateFolders(oRoot)
        End If
    Next
End Function

Private Function EnumerateFolders(ByVal oFolder As Outlook.Folder) As Outlook.Folder
    Dim folders As Outlook.folders
    Dim Folder As Outlook.Folder
    Dim foldercount As Integer

    On Error Resume Next

    Set folders = oFolder.folders
    foldercount = folders.Count

    'Check if there are any folders below oFolder
    If foldercount Then
        For Each Folder In folders
            Select Case Folder.Name
            Case "All Public Folders"
                Debug.Print (Folder.FolderPath)
                EnumerateFolders Folder
            Case "Sub-Location"
                Debug.Print (Folder.FolderPath)
                EnumerateFolders Folder
            Case "Department"
                Debug.Print (Folder.FolderPath)
                EnumerateFolders Folder
            Case "Division"
                Debug.Print (Folder.FolderPath)
                EnumerateFolders Folder
            Case "Work-Group"
                Debug.Print (Folder.FolderPath)
                EnumerateFolders Folder
            Case "Planning-Calendar"
                ' This is the folder I want to work with
                Debug.Print (Folder.FolderPath)
                Stop
                Set EnumerateFolders = Folder
            End Select
        Next
    End If
End Function

Полный путь: \\Public Folders - [email protected]\All Public Folders\Sub-Location\Department\Division\Work-Group\Planning-Calendar


person Zephyr Mays    schedule 04.01.2018    source источник


Ответы (1)


Для ссылки на общую папку: \ Public Folders - [email protected] \ All Public Folders \ Sub-Location \ Department \ Division \ Work-Group \ Planning-Calendar

Set PbFldr = GetNamespace("MAPI").GetDefaultFolder(olPublicFoldersAllPublicFolders)
Set PbFldr = PbFldr.Folders("Sub-Location")
Set PbFldr = PbFldr.Folders("Department")
Set PbFldr = PbFldr.Folders("Division")
Set PbFldr = PbFldr.Folders("Work-Group")
Set PbFldr = PbFldr.Folders("Planning-Calendar")
person niton    schedule 04.01.2018
comment
Это прекрасно работает! Можно ли создать глобальную ссылку на эту папку один раз при открытии Outlook, чтобы она была сразу доступна при запуске других маркеров? - person Zephyr Mays; 04.01.2018
comment
Попробуйте объявить в качестве глобальной переменной в стандартном модуле ссылку в application_startup в ThisOutlookSession. Если есть проблема, создайте новый вопрос. - person niton; 04.01.2018