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 å ha hundrevis av undermapper under hovedinnboksen eller mappen for sendte elementer, med relevante e-poster i hver av disse. Når det kommer et behov for å gå gjennom alle disse mappene for å utføre en handling på e-postene i disse, blir det et mareritt å skrive forskjellige VBA-skript for forskjellige mapper. Tenk deg å ha fem hundre mapper under hovedinnboksen 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 er behov for å gjøre noen modifikasjoner, vil alle fem hundre skript bli pålagt å bli oppdatert. Heldigvis finnes det en programmeringsmetodikk kjent som rekursjon, som løser problemet vårt som en lek. Ideen med rekursjon er at en funksjon gjentatte ganger skal kalle seg selv og gå gjennom det samme mønsteret igjen og igjen, for å behandle alle elementene, med samme logikk. Nedenfor er et eksempelskript som starts fra hovedinnboksen og går 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 lim inn koden ovenfor i "ThisOutlookSession". Det er viktig å vite at før du kjører dette skriptet, skal Microsoft Outlook XX Object library skal legges til prosjektreferansene fra "Verktøy"-menyene, der XX er library versjon.

Forstå manuset

Rekursjonsfunksjon"ProcessCurrentFolder" er den rekursive funksjonen, som kaller seg selv, hvis en undermappe blir oppdaget i gjeldende mappe. Det vil fortsette å huske seg selv med mindre alle mappene ertarting fra initial hierarchy 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 ikke-standard Outlook-mappe. Det er også viktig å vite at det ikke er nødvendig å foreta det første anropet fra rotinnboksen eller utboksmappen, men det kan start fungerer fra hvilken som helst mappe og nedover. "For Every objMail In objParentFolder.Items" er nøkkellinjen som vil iterere gjennom alle elementene i gjeldende mappe som skannes; derfor er det stedet der brukeren må legge inn den nødvendige koden for å behandle varene.

Kom deg etter katastrofe

Hvis du står overfor en situasjon med Outlook-krasj eller feil, er det ingen grunn til å bekymre deg for lost e-poster, som 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 utvinning og rar programvare for gjenoppretting. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.