Как да прекосявате дърво на папки рекурсивно в 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 За да отворите редактора на Outlook VBA и да поставите горния код в „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

Споделете сега:

Коментарите са забранени.