Sådan gennemgår du et mappetræ rekursivt i Outlook via VBA

Hvis der er undermapper i hovedmappen Indbakke eller Sendte emner, er det et meget nyttigt tip, hvordan man går hen til at krydse dem på en rekursiv og effektiv måde ved hjælp af VBA. Dette kritiske stykke kan genbruges i mange andre VBA-projekter.

Det kritiske problem ved at krydse mapper

Mappetræ i OutlookVirksomheds- og kommercielle brugere af Outlook ender ofte med at have hundredvis af undermapper under deres primære indbakke eller mappe med sendte elementer, med relevante e-mails i hver af disse. Når der er behov for at gennemgå alle disse mapper for at udføre en handling på de e-mails, der er indeholdt i dem, bliver det et mareridt at skrive forskellige VBA-scripts til forskellige mapper. Forestil dig at have fem hundrede mapper under den primære indbakkemappe og et VBA-scriptkrav til hver af disse. Brugeren skal skrive fem hundrede unikke scripts til hver af disse mapper med lignende funktionalitet. For at gøre det værre, hvis der er behov for at foretage nogle ændringer, skal alle fem hundrede scripts opdateres. Heldigvis findes der en programmeringsmetode kendt som rekursion, som løser vores problem som en leg. Ideen bag rekursion er, at en funktion gentagne gange kalder sig selv og gennemgår det samme mønster igen og igen for at behandle alle elementerne med den samme logik. Nedenfor er et eksempelscript, der starter fra den primære indbakkemappe og iterererer gennem alle undermapper og elementer i hver af disse mapper.

Outlook VBA-script

Nedenfor er det komplette Outlook VBA-script:

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

Sådan køres scriptet

Presse Alt + F11 for at åbne Outlook VBA-editoren og indsætte ovenstående kode i "ThisOutlookSession". Det er vigtigt at vide, at før dette script køres, skal Microsoft Outlook XX-objektbiblioteket tilføjes til projektreferencerne fra menuerne "Værktøjer", hvor XX er biblioteksversionen.

Forstå scriptet

Rekursionsfunktion"ProcessCurrentFolder" er den rekursive funktion, der kalder sig selv, hvis en undermappe opdages i den aktuelle mappe. Den vil fortsætte med at kalde sig selv, medmindre alle mapper startende fra det oprindelige hierarki scannes og behandles. Dette script fungerer med enhver Outlook-mappe. "olFolderInbox" kan erstattes med "olFolderSentMail", "olFolderOutbox" eller kan være enhver anden ikke-standard Outlook-mappe. Det er også vigtigt at vide, at det ikke er nødvendigt at foretage det første kald fra rodmappen i indbakken eller udbakken, men at det kan starte fra enhver mappe og nedad. "For Each objMail In objParentFolder.Items" er nøglelinjen, der itererer gennem alle elementerne i den aktuelle mappe, der scannes; derfor er det det sted, hvor brugeren skal indsætte den nødvendige kode for at behandle elementerne.

Gendan efter katastrofe

Hvis du står over for en situation med Outlook-nedbrud eller -fejl, er der ingen grund til at bekymre sig om mistede e-mails, da DataNumen skal bringer dit liv tilbage til det normale ved rettelse af korruption i Outlook på en effektiv måde.

Forfatter Introduktion:

Mary Underwood er ekspert i datagendannelse i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder dwg-gendannelse og rar produkter til gendannelsessoftware. For mere information besøg www.datanumen.com

Kommentarer er lukket.