#vba #outlook
#vba #outlook
Вопрос:
Я извлекаю строки темы электронных писем из папок Outlook. Я сбрасываю переменную ‘Folder’ для каждой папки, из которой мне нужны объекты.
Все работает, за исключением одного экземпляра, где папка является папкой поиска.
Похоже, что есть функция SearchFolders, которую я могу изменить как переменную, но я не знаю, как установить для нее конкретную папку.
Я могу установить обычные папки и вложенные папки с помощью чего-то вроде:
Set myFolder = myNamespace.Folders("fake@email.com").Folders("Head folder").Folders("subfolder")
Нужно ли затемнять «Папки поиска»? Как мне задать папку поиска в качестве переменной?
Комментарии:
1. Папки поиска представлены тем же объектом MAPIFolder, что и обычные папки. Вы получаете конкретную ошибку?
2. Ошибка времени выполнения ‘-2147221233 (8004010f)’: попытка выполнить операцию завершилась неудачей. Не удалось найти объект.
3. Эта ошибка MAPI_E_NOT_FOUND, что означает, что папка с указанным именем не существует.
4. Моя текущая ссылка — MyNamespace. Папки («моя электронная почта»). Папки («Search Folders»). Папки («Получил это, восстановится») . Даже при повторном просмотре не похоже, что в моем написании что-то не так, и этот шаблон работает до тех пор, пока вложенная папка, к которой я обращаюсь, не находится в папке поиска. Вы уверены, что нет разницы между ссылками на папки поиска и непоисковые?
5. «Папки поиска» отсутствуют в папке MAPIFolder. Коллекция папок, это просто Outlook показывает это там.
Ответ №1:
Sub FindSearchFolderByName()
Dim objStores As Stores
Dim objStore As Store
Dim objSearchFolders As folders
Dim objSearchFolder As Folder
Dim fldrName As String
Dim bFound As Boolean
Dim myFolder As Folder
fldrName = "Unread Mail"
Debug.Print
Debug.Print "Searching for " amp; fldrName
Set objStores = Session.Stores
For Each objStore In objStores
Debug.Print
Debug.Print "objStore: " amp; objStore
bFound = False
Set objSearchFolders = objStore.GetSearchFolders
For Each objSearchFolder In objSearchFolders
Debug.Print " objSearchFolder: " amp; objSearchFolder
If objSearchFolder.Name = fldrName Then
Debug.Print " Found in " amp; objStore
bFound = True
Set myFolder = objSearchFolder
Set ActiveExplorer.CurrentFolder = myFolder
End If
If bFound = True Then Exit For
Next
If bFound = False Then Debug.Print " Not found in " amp; objStore
Next
End Sub
Ответ №2:
Для доступа к папкам поиска используйте Store.GetSearchFolders()
— это возвращает Folders
коллекцию со всеми папками поиска в хранилище (включая папки поиска, невидимые конечному пользователю).
Комментарии:
1. Как мне использовать ее для этого? Я нашел пример, который выводит пути к папкам, но мне нужно задать один конкретный путь, чтобы указать циклу для извлечения из каждого электронного письма в одной папке.
2. Всякий раз, когда вы сталкиваетесь с папкой с именем «SearchFolders», вам нужно использовать Store. GetSearchFolders() вместо предположения, что «SearchFolders» — это реальное имя папки.