Hvordan krysse et mappetre rekursivt i Outlook via VBA

Hvis det er undermapper i hovedinnboksen eller mappen Sendte elementer, er det et veldig nyttig tips hvordan du kan gå gjennom dem på en rekursiv og effektiv måte ved å bruke VBA. Denne kritiske delen kan gjenbrukes i mange andre VBA-prosjekter.

Det kritiske problemet med å krysse mapper

Mappetre i OutlookBedrifts- og kommersielle brukere av Outlook ender ofte opp med hundrevis av undermapper under hovedinnboksen eller mappen for sendte elementer, med relevante e-poster i hver av disse. Når det oppstår behov for å gå gjennom alle disse mappene for å utføre en handling på e-postene i dem, blir det et mareritt å skrive forskjellige VBA-skript for forskjellige mapper. Tenk deg å ha fem hundre mapper under hovedinnboksmappen og et VBA-skriptkrav for hver av disse. Brukeren må skrive fem hundre unike skript for hver av disse mappene, med lignende funksjonalitet. For å gjøre det verre, hvis det oppstår behov for å gjøre noen endringer, må alle fem hundre skript oppdateres. Heldigvis finnes det en programmeringsmetode kjent som rekursjon, som løser problemet vårt som en lek. Ideen bak rekursjon er at en funksjon gjentatte ganger kaller seg selv og går gjennom det samme mønsteret igjen og igjen, for å behandle alle elementene, med samme logikk. Nedenfor er et eksempelskript som starter fra hovedinnboksmappen og iterererer gjennom alle undermappene og elementene i hver av disse mappene.

Outlook VBA-skript

Nedenfor er det komplette Outlook VBA-skriptet:

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

Hvordan kjøre skriptet

Press Alt + F11 for å åpne Outlook VBA-editoren og lime inn koden ovenfor i «ThisOutlookSession». Det er viktig å vite at før du kjører dette skriptet, bør Microsoft Outlook XX-objektbiblioteket legges til prosjektreferansene fra «Verktøy»-menyene, der XX er bibliotekversjonen.

Forstå manuset

Rekursjonsfunksjon«ProcessCurrentFolder» er den rekursive funksjonen som kaller seg selv hvis en undermappe oppdages i gjeldende mappe. Den vil fortsette å kalle seg selv med mindre alle mappene fra det opprinnelige hierarkiet skannes og behandles. Dette skriptet vil fungere med alle Outlook-mapper. «olFolderInbox» kan erstattes med «olFolderSentMail», «olFolderOutbox», eller kan være en hvilken som helst annen Outlook-mappe enn standardmappen. Det er også viktig å vite at det ikke er nødvendig å gjøre det første kallet fra rotmappen for innboks eller utboks, men at det kan begynne å arbeide fra en hvilken som helst mappe og nedover. «For Each objMail In objParentFolder.Items» er nøkkellinjen som itererer gjennom alle elementene i den gjeldende mappen som skannes. Derfor er det der brukeren må legge inn den nødvendige koden for å behandle elementene.

Kom deg etter katastrofe

Hvis du står overfor en situasjon med Outlook-krasj eller -feil, trenger du ikke å bekymre deg for tapte e-poster, ettersom DataNumen skal bringe livet ditt tilbake til det normale ved fikse korrupsjon i Outlook på en effektiv måte.

Forfatterintroduksjon:

Mary Underwood er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert dwg-gjenoppretting og rar programvare for gjenoppretting. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.