Программного обеспечения:

  • Microsoft Windows 10 Home, версия 1803 (сборка 17134.523)
  • Microsoft Office профессиональный плюс 2016
  • Microsoft Outlook 2016, версия 1812 (сборка 11126.20266)

Настройка Outlook (почтовые адреса анонимны):

  • Outlook подключен к почтовым ящикам «Master@provider1.net», «Business@provider2.net», «Private@provider2.net» и к архиву "Архив".
  • Почтовые ящики используют IMAP/SMTP. Связанные OST-файлы доступны локально. Архив представляет собой локальный файл PST-данных.
  • Почтовый ящик «Master@provider1.net» был первым, который был подключен к Outlook, затем почтовые ящики «Private@provider2.net» и «Business@provider2.net» и, наконец, архив "Архив".
  • Панель навигации Outlook отображает почтовые ящики и архив в последовательности «Master@provider1.net», "Архив", «Business@provider2.net», Private@provider2.net, то есть изначально подключенный почтовый ящик вверху, затем архив и другие почтовые ящики в алфавитном порядке.
  • Почтовый ящик «Master@provider1.net» настроен как "стандартный почтовый ящик" в настройках почтового ящика Outlook.

Тестовое задание: отобразить все элементы, содержащиеся в соответствующем почтовом ящике или архиве, в папке поиска с именем «TEST», созданной с использованием VBA.

Код VBA:

Sub CreateSearchFolders_TEST()
  Dim MyFolder As Folder
  Dim MyScope  As String
  Dim MySearch As Search

  For Each MyFolder In Application.GetNamespace("MAPI").Folders
      Debug.Print MyFolder.Name
  Next

  Set MyFolder =   Application.GetNamespace("MAPI").GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks).Parent
  MyScope = "'" & MyFolder.FolderPath & "'"

 'MyScope = "'\\Master@provider1.net'"
 'MyScope = "'\\Business@provider2.net'"
 'MyScope = "'\\Private@provider2.net'"
 'MyScope = "'\\Archive'"
 'MyScope = "'\\Archive\Input','\\Archive\Sent'"

  Set MySearch = Application.AdvancedSearch _
  (Scope:=MyScope, Filter:="", SearchSubFolders:=True, Tag:="MySearchFolder")
  MySearch.Save ("TEST")

End Sub

Выводы:

  • Во-первых, цикл FOR перечисляет почтовые ящики «Business $ provider2.net», «Master@provider1.net», «Private@provider2.net» в алфавитном порядке и, наконец, "Архив".
  • Приведенный выше VBA-код создает нужную папку поиска "TEST" в «Master@provider1.net», то есть, как и ожидалось.
  • Код также работает, если строка

    MyScope = "'" & MyFolder.FolderPath & "'"
    

    закомментировано и строка

    'MyScope = "'\\Master@provider1.net'"
    

    активируется вместо

  • Однако, если одна строка из строк

    'MyScope = "'\\Business@provider2.net'"
    'MyScope = "'\\Private@provider2.net'"
    'MyScope = "'\\Archive'"
    

    вместо этого активируется, выполнение останавливается на линии

    MySearch.Save ("TEST")
    

    со следующим сообщением об ошибке:

    Ошибка времени выполнения -2147221241 (80040107)': не удалось выполнить процедуру. Объект не найден.

  • Если линия

    'MyScope = "'\\Archive\Input','\\Archive\Sent'"
    

    вместо этого активируется, код работает, но просто возвращает содержимое подпапок "Input" и "Sent" - как и ожидалось.

  • Если в этой строке заменить "Архив", например, на «Частный $ provider2.net», код также работает с этим почтовым ящиком, но, как ожидается, выдает содержимое только указанных подпапок "Вход" и "Отправлено".

Очевидно, что существует разница между отдельными почтовыми ящиками, а также между почтовыми ящиками и архивами. Один почтовый ящик является привилегированным. Предварительное объявление других почтовых ящиков как «стандартного почтового ящика» в настройках почтового ящика outlook не меняет результат выполнения кода.

Где я могу найти документацию об этой разнице?

В чем причина этой разницы?

Что нужно изменить в коде, чтобы он работал со всеми почтовыми ящиками и архивами?

Простое использование MyScope, предоставляющее все папки, содержащиеся в почтовом ящике или архиве, не решает проблему. Папка поиска, созданная таким образом, выдаст неполные результаты или даже потерпит неудачу при добавлении, удалении или переименовании папок в дальнейшем.

0