MyTetra Share
Делитесь знаниями!
Как узнать список папок Outlook
Время создания: 09.04.2020 20:21
Текстовые метки: VBA_Outlook
Раздел: !Закладки - VBA - Outlook
Запись: xintrea/mytetra_db_adgaver_new/master/base/1586452911gtvye5i03u/text.html на raw.githubusercontent.com

Как узнать список папок Outlook

Допустим, вы хотите собрать список папок в некий список. Казалось бы, узнать имена папок можно следующим образом:

Листинг 1.

sub Список_папок_почты()


Dim AllFolders As Folders


Set AllFolders = Application.GetNamespace("MAPI").Folders


MsgBox AllFolders.Count


For i = 1 To AllFolders.Count


MsgBox AllFolder.Item(i).Name


Next


Однако выясняется, что у вас имеется всего две папки с именами Personal Folders. Здесь полезно вспомнить, что папки OutLook имеют иерархическую структуру, такую же, как знакомая файловая система. Приведенная выше конструкция выдала нам имена стандартных папок самого верхнего уровня.

Чтобы получить информацию о папках второго уровня, нужно написать более сложный код:

Листинг 2.



Dim allFolders As Folders


Dim i%, j%


Set allFolders = Application.GetNamespace("MAPI").Folders


MsgBox "Число папок верхнего уровня = " & allFolders.Count


' обзор папок верхнего уровня


For i = 1 To allFolders.Count


MsgBox "Имя папки = " & _


allFolders.Item(i).Name & vbCrLf & _


" число вложенных папок = " & _


allFolders.Item(i).Folders.Count


' обзор папок второго уровня


For j = 1 To allFolders.Item(i).Folders.Count


MsgBox "Имена вложенной папки = " & _


allFolders.Item(i).Folders.Item(j).Name & vbCrLf & _


" число вложенных в нее папок = " & _


allFolders.Item(i).Folders.Item(j).Folders.Count


Next


Next

Однако понятно, что наращивание числа вложенных циклов для обзора иерархических структур является совершенно бесперспективным занятием. (В нашем примере одна из папок второго уровня — Contacts — имеет также вложенную папку.) Здесь требуется переходить к рекурсивным конструкциям, которые могут выглядеть примерно так:

Листинг 3.


sub Список_папок_почты()

Dim allFolders As Folders


Dim intLevel% ' номер уровня


intLevel = 0


Set allFolders = Application.GetNamespace("MAPI").Folders


Call FoldersViewRecurse(allFolders, intLevel, "MAPI")



Sub FoldersViewRecurse(allFolders As Folders, intLevel%, strName$)


Dim i%, FolderName$


Dim newFolders As Folders


' Вывод информации о папках данного узла иерархической структуры


Debug.Print "Уровень = "; intLevel; " Узел = "; _

strName$; Tab(45); " Вложенных папок = "; allFolders.Count


If allFolders.Count > 0 Then ' есть вложенные папки


For i = 1 To allFolders.Count ' обзор вложенных папок


FolderName$ = allFolders.Item(i).Name


Set newFolders = allFolders.Item(i).Folders


' рекурсивное обращение к самой себе:


Call FoldersViewRecurse(newFolders, intLevel + 1, FolderName$)


Next


End If


End Sub

end sub

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования