выберите почтовую папку Outlook, используя Outlook VBA - PullRequest
0 голосов
/ 29 мая 2018

Я создал подпрограмму VBA для вывода списка всех подпапок с текстом «NNN» в имени в списке в пользовательской форме - у меня есть множество подпапок, поэтому поиск нужной папки является временемпотребляя.Эта процедура работает отлично.

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

У меня есть фрагмент, который делает это:

Public Sub GetItemsFolderPath()
  Dim obj As Object
  Dim F As Outlook.MAPIFolder
  Dim Msg$
  Set obj = Application.ActiveWindow
  If TypeOf obj Is Outlook.Inspector Then
    Set obj = obj.CurrentItem
  Else
   Set obj = obj.Selection(1)
  End If
  Set F = obj.Parent
  Msg = "The path is: " & F.FolderPath & vbCrLf
  Msg = Msg & "Switch to the folder?"
  If MsgBox(Msg, vbYesNo) = vbYes Then
   Set Application.ActiveExplorer.CurrentFolder = F
  End If
End Sub

Однако, если я попытаюсь заменить «F» на путь к папке, который является просто строкой, произойдет сбой.Итак, мой вопрос, как я могу выбрать папку, используя только строку для пути к папке, например "paul@anymail.com \ Inbox \ 03_Group Finance \ 00_Organization Chart"

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Метод, описанный Сэмом, сделает то, что вы хотите.Есть небольшая проблема с кодом.Индекс начинает далеко вдоль пути.4 должно быть 2, если исходная ссылка на Входящие.

Function FolderFromPath(FolderPath As String) As Folder

    Dim F As Folder
    Dim arrFolders() As String
    Dim i As Long

    arrFolders = Split(FolderPath, "\")

    ' Initial reference is to the mailbox - array element 0
    Set F = Session.Folders(arrFolders(0))

    ' The next folder is array element 1
    For i = LBound(arrFolders) + 1 To UBound(arrFolders)
        Set F = F.Folders(arrFolders(i))
    Next

    Set FolderFromPath = F

 End Function


Public Sub GetItemsFolderPath_Test()

    Dim FPath As String

    FPath = "paul@anymail.com\Inbox\03_Group Finance\00_Organization Chart"

    Set ActiveExplorer.CurrentFolder = FolderFromPath(FPath)

End Sub
0 голосов
/ 29 мая 2018

Я попробовал эту маленькую простую вещь, чтобы вернуть папку из пути:

Function FolderFromPath(FolderPath As String) As Folder
    Dim F As Folder
    Dim arrFolders() As String
    Dim i As Integer
    Set myNamespace = Application.GetNamespace("MAPI")

    Set F = myNamespace.GetDefaultFolder(olFolderInbox)
    arrFolders = Split(FolderPath, "\")
    For i = 4 To UBound(arrFolders)
        Set F = F.Folders(arrFolders(i))
    Next
    Set FolderFromPath = F
 End Function

Она начинается с вашего почтового ящика (что, возможно, не то, что вам нужно), а затем разбивает путь и переходит вкаждая папка в пути.

Обновление после комментария Я забыл показать, как его использовать.Вы можете сделать это так:

Path = "\\first.last@company.com\Inbox\Folder1\Folder2"
Set Application.ActiveExplorer.CurrentFolder = FolderFromPath(Path)
...