Как рекурсивно перемещаться по дереву папок в Outlook через VBA

Поделись сейчас:

Если в основной папке «Входящие» или «Отправленные» есть подпапки, очень полезным советом будет то, как рекурсивно и эффективно перемещаться по ним с помощью VBA. Эту важную часть можно повторно использовать во многих других проектах VBA.

Критическая проблема обхода папок

Дерево папок в OutlookУ корпоративных и коммерческих пользователей 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 — это версия библиотеки.

Понять сценарий

Функция рекурсииФункция “ProcessCurrentFolder” — это рекурсивная функция, которая вызывает саму себя, если в текущей папке обнаружена подпапка. Она будет вызывать себя снова и снова до тех пор, пока не будут просканированы и обработаны все папки, начиная с начальной иерархии. Этот скрипт будет работать с любой папкой Outlook. “olFolderInbox” можно заменить на “olFolderSentMail”, “olFolderOutbox” или любую другую папку Outlook, отличную от папки по умолчанию. Важно также знать, что не обязательно начинать вызов из корневой папки входящих или исходящих сообщений, скрипт может начать работу с любой папки ниже. Ключевая строка — “For Each objMail In objParentFolder.Items”, которая будет перебирать все элементы, содержащиеся в текущей сканируемой папке; поэтому именно здесь пользователь должен разместить необходимый код для обработки элементов.

Восстановление после катастрофы

Если вы столкнулись со сбоем или ошибкой в ​​работе Outlook, не стоит беспокоиться о потерянных письмах, поскольку DataNumen вернет вашу жизнь в нормальное русло исправление повреждения Outlook эффективным способом.

Об авторе:

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

Поделись сейчас:

Комментарии закрыты.