Как вы устанавливаете переменную папки для ‘папки поиска’?

#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» — это реальное имя папки.