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
Fö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

Å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