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 användare av Outlook har ofta hundratals undermappar under huvudinkorgen eller mappen skickade objekt, med relevanta e-postmeddelanden i var och en av dem. När det finns ett behov av att gå igenom alla dessa mappar för att utföra några åtgärder på e-postmeddelandena i dessa blir det en mardröm att skriva olika VBA-skript för olika mappar. Föreställ dig att du har fem hundra mappar under huvudmappen Inkorgen och ett VBA-skriptkrav för var och en av dem. Användaren måste skriva fem hundra unika skript för var och en av dessa mappar, med liknande funktionalitet. För att göra det värre, om det finns behov av att göra några ändringar, måste alla fem hundra skript uppdateras. Lyckligtvis finns det en programmeringsmetod som kallas rekursion, som löser vårt problem som en vind. Tanken med rekursion är att en funktion upprepade gånger ska ringa sig själv och gå igenom samma mönster om och om igen för att bearbeta alla objekt med samma logik. Nedan följer ett exempel på skript som ärtarts från huvudmappen för inkorg och det går igenom 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 koden ovan i “ThisOutlookSession”. Det är viktigt att veta att Microsoft Outlook XX Object lib innan du kör detta skriptrary bör läggas till i projektreferenser från "Verktyg" -menyer, där XX är library-version.

Förstå skriptet

Rekursionsfunktion“ProcessCurrentFolder” är den rekursiva funktionen som kallar sig själv om en undermapp upptäcks i den aktuella mappen. Det kommer att fortsätta att återkalla sig själv om inte alla mappar ärtarting från initial hierarchy skannas och bearbetas. Det här skriptet fungerar med alla Outlook-mappar. “OlFolderInbox” kan ersättas med “olFolderSentMail”, “olFolderOutbox” eller kan vara någon annan Outlook-mapp som inte är standard. Det är också viktigt att veta att det inte är nödvändigt att ringa det första samtalet från rotinkorgen eller utkorgsmappen, men det kan start arbetar från valfri mapp och nedåt. "För varje objMail i objParentFolder.Items" är nyckelraden som kommer att iterera genom alla objekt som finns i den aktuella mappen som skannas; därför är det den plats där användaren behöver ange den kod som krävs för att bearbeta artiklarna.

Återställ från katastrof

Om du står inför en situation med Outlook-krasch eller fel, behöver du inte oroa dig för lost e-postmeddelanden, som 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 återvinning och rar återställningsprogramvaruprodukter. För mer information besök www.datanumen.com

Kommentarer är stängda.