Ако в основната папка „Входящи“ или „Изпратени елементи“ има подпапки, много полезен съвет е как да ги извършите по рекурсивен и ефективен начин, като използвате 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 За да отворите редактора на Outlook VBA и да поставите горния код в „ThisOutlookSession“. Важно е да знаете, че преди да изпълните този скрипт, към референциите на проекта от менютата „Инструменти“ трябва да се добави библиотеката с обекти Microsoft Outlook XX, където XX е версията на библиотеката.
Разберете скрипта

Възстановяване от бедствие
Ако се сблъскате със ситуация на срив или неуспех на Outlook, няма нужда да се притеснявате за загубените имейли, тъй като... DataNumen ще върне живота ви към нормалното от коригиране на корупцията в Outlook по ефективен начин.
Въведение на автора:
Мери Ъндърууд е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително възстановяване на dwg файлове и rar софтуерни продукти за възстановяване. За повече информация посетете WWW.datanumen.com