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

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

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

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

Дерево папок в OutlookКорпоративные и коммерческие пользователи Outlook часто имеют сотни подпапок в своей основной папке «Входящие» или «Отправленные», с соответствующими электронными письмами в каждой из них. Когда возникает необходимость просмотреть все эти папки, чтобы выполнить какие-либо действия с электронными письмами, содержащимися в них, становится кошмаром писать разные сценарии VBA для разных папок. Представьте, что у вас есть пятьсот папок под основной папкой «Входящие» и требование сценария VBA для каждой из них. Для каждой из этих папок пользователю придется написать пятьсот уникальных скриптов с аналогичным функционалом. Что еще хуже, если возникнет необходимость внести какие-либо изменения, все пятьсот скриптов потребуются для обновления. К счастью, существует методология программирования, известная как рекурсия, которая решает нашу проблему с легкостью. Идея рекурсии заключается в том, что функция многократно вызывает сама себя и повторяет один и тот же шаблон снова и снова, чтобы обработать все элементы с одной и той же логикой. Ниже приведен пример сценария, которыйtarts из основной папки «Входящие» и перебирает все подпапки и элементы в каждой из этих папок.

Скрипт 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

Как запустить скрипт

Press Alt + F11 чтобы открыть редактор Outlook VBA и вставить приведенный выше код в «ThisOutlookSession». Важно знать, что перед запуском этого скрипта Microsoft Outlook XX Object library следует добавить к ссылкам на проект из меню «Инструменты», где XX — это библиотекаrarу версия.

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

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

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

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

Об авторе:

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

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

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