如果主收件箱或已发送邮件文件夹中有子文件夹,如何使用 VBA 以递归和高效的方式遍历它们是一个非常有用的提示。 这个关键部分可在许多其他 VBA 项目中重复使用。
遍历文件夹的关键问题
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 为库版本。
理解脚本

从灾难中恢复
如果遇到 Outlook 崩溃或故障的情况,不必担心邮件丢失,因为 DataNumen 将使您的生活恢复正常 修复 Outlook 损坏 以一种有效的方式。
作者简介:
Mary Underwood 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 dwg恢复 和 rar 恢复软件产品。 欲了解更多信息,请访问 datanumen.com