Hur man korsar ett mappträd rekursivt i Outlook via VBA

Om det finns undermappar i huvudmappen Inbox eller Sent Items, är det ett mycket användbart tips hur man går igenom dem på ett rekursivt och effektivt sätt med hjälp av VBA. Den här kritiska delen kan återanvändas i många andra VBA-projekt.

Det kritiska problemet med att korsa mappar

Mappträd i OutlookFöretags- och kommersiella Outlook-användare har ofta hundratals undermappar under sin huvudsakliga inkorg eller mapp för skickade artiklar, med relevanta e-postmeddelanden i var och en av dessa. När man behöver gå igenom alla dessa mappar för att utföra någon åtgärd på e-postmeddelandena i dem blir det en mardröm att skriva olika VBA-skript för olika mappar. Tänk dig att ha femhundra mappar under huvudmappen för inkorgen och ett VBA-skriptkrav för var och en av dessa. Användaren måste skriva femhundra unika skript för var och en av dessa mappar, med liknande funktionalitet. För att göra det värre, om det uppstår ett behov av att göra några ändringar, kommer alla femhundra skript att behöva uppdateras. Lyckligtvis finns det en programmeringsmetod som kallas rekursion, som löser vårt problem lätt. Idén med rekursion är att en funktion upprepade gånger anropar sig själv och går igenom samma mönster om och om igen för att bearbeta alla objekt med samma logik. Nedan följer ett exempelskript som börjar från huvudmappen för inkorgen och itererar genom alla undermappar och objekt i var och en av dessa mappar.

Outlook VBA-skript

Nedan är det fullständiga 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

Hur man kör skriptet

Klicka Alt + F11 för att öppna Outlook VBA-redigeraren och klistra in ovanstående kod i "ThisOutlookSession". Det är viktigt att veta att innan du kör det här skriptet bör Microsoft Outlook XX-objektbiblioteket läggas till i projektreferenserna från "Verktyg"-menyerna, där XX är biblioteksversionen.

Förstå skriptet

Rekursionsfunktion”ProcessCurrentFolder” är den rekursiva funktionen som anropar sig själv om en undermapp upptäcks i den aktuella mappen. Den fortsätter att anropa sig själv om inte alla mappar från den ursprungliga hierarkin har skannats och bearbetats. Det här skriptet fungerar med alla Outlook-mappar. ”olFolderInbox” kan ersättas med ”olFolderSentMail”, ”olFolderOutbox” eller kan vara vilken annan Outlook-mapp som helst som inte är standard. Det är också viktigt att veta att det inte är nödvändigt att göra det initiala anropet från rotmappen för inkorgen eller utkorgen, utan att det kan börja arbeta från vilken mapp som helst och nedåt. ”For Each objMail In objParentFolder.Items” är nyckelraden som itererar genom alla objekt i den aktuella mappen som skannas; det är därför där användaren behöver ange den nödvändiga koden för att bearbeta objekten.

Återställ från katastrof

Om du stöter på en situation där Outlook kraschar eller misslyckas behöver du inte oroa dig för förlorade e-postmeddelanden, eftersom DataNumen ska återför ditt liv till det normala av fixa korruption i Outlook på ett effektivt sätt.

Författarintroduktion:

Mary Underwood är en dataåtervinningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive dwg-återställning och rar återställningsprogramvaruprodukter. För mer information besök www.datanumen.com

Kommentarer är stängda.