Kako rekurzivno preći stablo mape u Outlooku putem VBA

Podijeli sada:

Ako postoje podfascikle unutar glavnog foldera Inbox ili Sent Items, vrlo je koristan savjet kako ih preći na rekurzivan i efikasan način, koristeći VBA. Ovaj kritični dio se može ponovo koristiti u mnogim drugim VBA projektima.

Kritični problem prelaska preko foldera

Drvo foldera u OutlookuKorporativni i komercijalni korisnici Outlooka često imaju stotine podmapa ispod glavne mape pristigle pošte ili mape poslanih stavki, s relevantnim e-porukama u svakoj od njih. Kada se pojavi potreba za pregledavanjem svih tih mapa kako bi se izvršila neka radnja na e-porukama koje se u njima nalaze, pisanje različitih VBA skripti za različite mape postaje noćna mora. Zamislite da imate petsto mapa ispod glavne mape pristigle pošte i zahtjev za VBA skriptom za svaku od njih. Korisnik će morati napisati petsto jedinstvenih skripti za svaku od tih mapa, sa sličnom funkcionalnošću. Da stvar bude gora, ako se pojavi potreba za nekim izmjenama, svih petsto skripti će se morati ažurirati. Srećom, postoji metodologija programiranja poznata kao rekurzija, koja rješava naš problem kao povjetarac. Ideja rekurzije je da funkcija više puta poziva samu sebe i prolazi kroz isti obrazac iznova i iznova, kako bi obradila sve stavke, istom logikom. Ispod je primjer skripte koji počinje od glavne mape pristigle pošte i prolazi kroz sve podmape i stavke u svakoj od tih mapa.

Outlook VBA skripta

Ispod je kompletna Outlook VBA skripta:

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

Kako pokrenuti skriptu

pritisnuti Alt + F11 Da biste otvorili Outlook VBA editor i zalijepili gornji kod u "ThisOutlookSession". Važno je znati da prije pokretanja ovog skripta, biblioteka objekata Microsoft Outlook XX treba biti dodana u reference projekta iz menija "Alati", gdje je XX verzija biblioteke.

Razumjeti skriptu

Funkcija rekurzije„ProcessCurrentFolder“ je rekurzivna funkcija koja poziva samu sebe ako se otkrije podmapa unutar trenutne mape. Nastavit će se pozivati ​​sve dok se sve mape, počevši od početne hijerarhije, ne skeniraju i obrade. Ovaj skript će raditi sa bilo kojom Outlook mapom. „olFolderInbox“ se može zamijeniti sa „olFolderSentMail“, „olFolderOutbox“ ili može biti bilo koja druga Outlook mapa koja nije zadana. Također je važno znati da nije potrebno izvršiti početni poziv iz korijenske mape pristigle ili odlazne pošte, već može početi raditi od bilo koje mape prema dolje. „For Each objMail In objParentFolder.Items“ je ključna linija koja će iterirati kroz sve stavke sadržane u trenutnoj mapi koja se skenira; stoga je to mjesto gdje korisnik treba staviti potreban kod za obradu stavki.

Oporavi se od katastrofe

Ako se suočite sa situacijom pada ili kvara Outlooka, nema potrebe da brinete o izgubljenim e-porukama, jer DataNumen će vam vratiti život u normalu popravljanje oštećenja Outlooka na efikasan način.

Uvod za autora:

Mary Underwood je stručnjakinja za oporavak podataka DataNumen, Inc., koji je svjetski lider u tehnologijama za oporavak podataka, uključujući oporavak dwg datoteka i rar softverski proizvodi za oporavak. Za više informacija posjetite www.datanumen.com

Podijeli sada:

Komentari su zatvoreni.