Если в основной папке «Входящие» или «Отправленные» есть подпапки, очень полезным советом будет то, как рекурсивно и эффективно перемещаться по ним с помощью VBA. Эту важную часть можно повторно использовать во многих других проектах VBA.
Критическая проблема обхода папок
У корпоративных и коммерческих пользователей Outlook часто оказывается сотни подпапок в основной папке «Входящие» или «Отправленные», в каждой из которых находятся соответствующие электронные письма. Когда возникает необходимость пройтись по всем этим папкам, чтобы выполнить какое-либо действие с содержащимися в них письмами, написание различных скриптов VBA для разных папок превращается в настоящий кошмар. Представьте, что у вас есть пятьсот папок в основной папке «Входящие», и для каждой из них требуется скрипт VBA. Пользователю придется написать пятьсот уникальных скриптов для каждой из этих папок с аналогичной функциональностью. Хуже того, если потребуется внести какие-либо изменения, все пятьсот скриптов придется обновить. К счастью, существует метод программирования, известный как рекурсия, который решает нашу проблему очень легко. Идея рекурсии заключается в том, что функция многократно вызывает саму себя и проходит один и тот же шаблон снова и снова, чтобы обработать все элементы с той же логикой. Ниже приведен пример скрипта, который начинается с основной папки «Входящие» и перебирает все подпапки и элементы в каждой из этих папок.
Скрипт Outlook VBA
Ниже приведен полный сценарий Outlook VBA:
Private Sub Main()
Dim objNameSpace As Outlook.NameSpace
Dim objMainFolder As Outlook.Folder
Set objNameSpace = Application.GetNamespace("MAPI")
Set objMainFolder = objNameSpace.GetDefaultFolder(olFolderInbox)
Call ProcessCurrentFolder(objMainFolder)
End Sub
Private Sub ProcessCurrentFolder(ByVal objParentFolder As Outlook.MAPIFolder)
Dim objCurFolder As Outlook.MAPIFolder
Dim objMail As Outlook.MailItem
On Error Resume Next
' Process each items in the folder
For Each objMail In objParentFolder.Items
' Do your task here ...
Next
' Process the subfolders in the folder recursively
If (objParentFolder.Folders.Count > 0) Then
For Each objCurFolder In objParentFolder.Folders
Call ProcessCurrentFolder(objCurFolder)
Next
End If
End Sub
Как запустить скрипт
Штамповочный пресс Alt + F11 Откройте редактор VBA для Outlook и вставьте приведенный выше код в поле «ThisOutlookSession». Важно знать, что перед запуском этого скрипта необходимо добавить библиотеку объектов Microsoft Outlook XX в ссылки проекта через меню «Инструменты», где XX — это версия библиотеки.
Понять сценарий

Восстановление после катастрофы
Если вы столкнулись со сбоем или ошибкой в работе Outlook, не стоит беспокоиться о потерянных письмах, поскольку DataNumen вернет вашу жизнь в нормальное русло исправление повреждения Outlook эффективным способом.
Об авторе:
Мэри Андервуд — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая восстановление dwg и rar программные продукты для восстановления. Для получения дополнительной информации посетите www.datanumen.com