如何通过 VBA 在 Outlook 中递归遍历文件夹树

立即分享:

如果主收件箱或已发送邮件文件夹中有子文件夹,如何使用 VBA 以递归和高效的方式遍历它们是一个非常有用的提示。 这个关键部分可在许多其他 VBA 项目中重复使用。

遍历文件夹的关键问题

Outlook 中的文件夹树Outlook 的企业和商业用户通常会在主收件箱或已发送邮件文件夹下创建数百个子文件夹,每个子文件夹里都存放着相关的邮件。当需要遍历所有这些文件夹并对其中的邮件执行某些操作时,为不同的文件夹编写不同的 VBA 脚本简直是一场噩梦。想象一下,如果主收件箱文件夹下有五百个文件夹,并且每个文件夹都需要一个 VBA 脚本,用户就必须为每个文件夹编写五百个功能类似的脚本。更糟糕的是,如果需要进行一些修改,所有五百个脚本都需要更新。幸运的是,有一种名为递归的编程方法可以轻松解决这个问题。递归的思想是让一个函数反复调用自身,一遍又一遍地重复相同的模式,从而使用相同的逻辑处理所有邮件。以下是一个示例脚本,它从主收件箱文件夹开始,遍历所有子文件夹及其中的邮件。

展望 VBA 脚本

下面是完整的 Outlook VBA 脚本:

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

如何运行脚本

媒体中心 Alt + F11键 打开 Outlook VBA 编辑器,并将上述代码粘贴到“ThisOutlookSession”中。需要注意的是,在运行此脚本之前,必须从“工具”菜单将 Microsoft Outlook XX 对象库添加到项目引用中,其中 XX 为库版本。

理解脚本

递归函数“ProcessCurrentFolder”是一个递归函数,当在当前文件夹内发现子文件夹时,它会调用自身。它会不断调用自身,直到扫描并处理完从初始层级开始的所有文件夹。此脚本适用于任何Outlook文件夹。“olFolderInbox”可以替换为“olFolderSentMail”、“olFolderOutbox”或任何其他非默认的Outlook文件夹。需要注意的是,无需从根收件箱或发件箱文件夹进行初始调用,它可以从任何文件夹向下执行。“For Each objMail In objParentFolder.Items”是关键代码行,它会遍历当前扫描文件夹中的所有项目;因此,用户需要在此处编写处理项目所需的代码。

从灾难中恢复

如果遇到 Outlook 崩溃或故障的情况,不必担心邮件丢失,因为 DataNumen 将使您的生活恢复正常 修复 Outlook 损坏 以一种有效的方式。

作者简介:

Mary Underwood 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 dwg恢复 和 rar 恢复软件产品。 欲了解更多信息,请访问 datanumen.com

立即分享:

评论被关闭。