Kuidas Outlookis VBA kaudu kaustapuud rekursiivselt läbida

Kui sisendkausta või saadetud üksuste kaustas on alamkaustad, on väga kasulik näpunäide, kuidas neid VBA-ga rekursiivsel ja tõhusal viisil läbida. See kriitiline osa on paljudes teistes VBA projektides taaskasutatav.

Kaustade läbimise kriitiline probleem

Outlooki kaustapuuOutlooki äri- ja ärikasutajatel on sageli sadu alamkaustu oma peamise postkasti või saadetud kirjade kausta all, millest igaühes on asjakohased meilid. Kui tekib vajadus kõiki neid kaustu läbi vaadata, et seal olevate meilidega midagi teha, muutub erinevate VBA-skriptide kirjutamine erinevate kaustade jaoks õudusunenäoks. Kujutage ette, et peamise postkasti all on viissada kausta ja igaühe jaoks on vaja VBA-skripti. Kasutaja peab iga kausta jaoks kirjutama viissada unikaalset skripti sarnase funktsionaalsusega. Veelgi hullem on see, et kui tekib vajadus teha muudatusi, tuleb kõiki viissada skripti uuendada. Õnneks on olemas programmeerimismetoodika, mida tuntakse rekursioonina ja mis lahendab meie probleemi imelihtsalt. Rekursiooni idee seisneb selles, et funktsioon kutsub ennast korduvalt välja ja käib läbi sama mustri ikka ja jälle, et töödelda kõiki üksusi sama loogikaga. Allpool on näidisskript, mis algab peamisest postkastist ja käib läbi kõik alamkaustad ja üksused igas nendes kaustades.

Outlooki VBA skript

Allpool on täielik Outlook VBA skript:

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

Kuidas skripti käivitada

press Alt + F11 , et avada Outlooki VBA redaktor ja kleepida ülaltoodud kood jaotisse „ThisOutlookSession“. Oluline on teada, et enne selle skripti käivitamist tuleks Microsoft Outlooki XX objektiteek lisada projekti viidetele menüüst „Tööriistad“, kus XX on teegi versioon.

Mõistke skripti

Rekursiooni funktsioon„ProcessCurrentFolder” on rekursiivne funktsioon, mis kutsub ennast välja, kui praeguses kaustas avastatakse alamkaust. See kutsub ennast välja ikka ja jälle, kuni kõiki kaustu alates esialgsest hierarhiast pole skannitud ja töödeldud. See skript töötab mis tahes Outlooki kaustaga. „olFolderInbox” saab asendada „olFolderSentMail”, „olFolderOutbox” või mis tahes muu mitte-vaikimisi Outlooki kaustaga. Samuti on oluline teada, et esialgset kutset ei ole vaja teha juurkaustast sisendkaust või väljundkaust, vaid see võib alustada tööd mis tahes kaustast allapoole. „For Each objMail In objParentFolder.Items” on võtmerida, mis itereerib läbi kõik praeguses skannitavas kaustas olevad üksused; seega on see koht, kuhu kasutaja peab üksuste töötlemiseks vajaliku koodi sisestama.

Katastroofist taastumine

Kui teil on Outlooki krahh või rike, pole vaja kadunud meilide pärast muretseda, sest DataNumen toob teie elu tagasi normaalseks Outlooki korruptsiooni parandamine tõhusal viisil.

Autori sissejuhatus:

Mary Underwood on andmete taastamise ekspert DataNumen, Inc., mis on maailmas juhtiv andmete taastamise tehnoloogiate, sealhulgas dwg taastamine ja rar taastamistarkvara tooted. Lisateabe saamiseks külastage www.datanumenCom

Kommentaarid on suletud.