Excel VBA:循环遍历Outlook电子邮件中的所有子文件夹,以查找具有特定主题的电子邮件。

3
我在Excel VBA中编写了以下代码,如果在Outlook的默认收件箱文件夹中找到给定主题的电子邮件,则打开该电子邮件。
不过,我想要在所有收件箱子文件夹中搜索此电子邮件。
由于该代码将被多个用户使用,因此我不知道他们 Outlook 收件箱子文件夹的数量和名称。有什么方法可以在所有子文件夹中搜索此电子邮件吗?
Sub GetEmail()

    Dim OutApp as Object
    Dim Namespace as Object
    Dim Folder as Object
    Dim myMail as Object

    Set OutApp = CreateObject("Outlook.Application")
    Set Namespace = OutApp.GetNamespace ("MAPI")
    Set Folder = Namespace.GetDefaultFolder(6)

    Set myMail = Folder.Items.Find ("[Subject] = ""Test""")

    myMail.Display


End Sub

只是一个快速的想法,你可以在Outlook中进行搜索,为什么要在Excel中创建一个函数?如果你真的想要这样一个函数(这似乎是Outlook中搜索功能的复制),你可以在Outlook中编写一个宏。 - Zac
有利有弊:如果您在Outlook中编写宏来完成此操作,由于您已经可以访问Outlook对象,因此这将更容易,但是您将不得不为所有用户添加Outlook中的宏。在Excel中,编写宏要复杂一些,但您不需要进行任何安装。 - Zac
1个回答

8
以下代码循环遍历Outlook中的所有文件夹,到达Inbox下面一级。您可以通过指定初始文件夹来查看收件箱。因此,在循环过程中,您可以搜索文件夹。您可以通过深入循环或说文件夹数.count > X来添加更多子文件夹。
我一直觉得从Excel访问Outlook很令人沮丧,因此制作了这个Early Bound,以使编码更容易。这意味着您需要转到工具/引用并添加Microsoft Outlook 16(x).0对象库。
在编码后,您可以将其改回为late bound,因为early binding会给您提供IntelliSense,并使生活变得更加轻松。
Sub GetEmail()

Dim OutApp As Outlook.Application
Dim Namespace As Outlook.Namespace
Dim Mfolder As Outlook.MAPIFolder
Dim myMail As Outlook.Items

Dim Folder As Outlook.MAPIFolder
Dim SubFolder As Outlook.MAPIFolder
Dim UserFolder As Outlook.MAPIFolder

Set OutApp = New Outlook.Application
Set Namespace = OutApp.GetNamespace("MAPI")

On Error Resume Next
For Each Folder In Namespace.Folders
    For Each SubFolder In Folder.Folders
        For Each UserFolder In SubFolder.Folders
            Debug.Print Folder.Name, "|", SubFolder.Name, "|", UserFolder.Name
        Next UserFolder
    Next SubFolder
Next Folder
On Error GoTo 0

End Sub

on error的作用是跳过与Outlook映射归档pst文件相关的任何问题。


非常感谢您的帮助,Keith!每次我尝试添加Microsoft Outlook 16(x).0对象库以使用早期绑定时,都会出现一个消息,显示“名称与现有模块、项目或对象库冲突”。但是当我定义对象时,例如:Dim OutApp As Outlook.Application,它仍然会出现:“编译错误 - 未定义用户类型”。您知道原因吗? - Trs
我认为(并不确定)可能是引用。你是否使用set outapp = New outlook。(随便)。当使用FileSystemObject时,我似乎记得有类似的东西。 - Keith Whatling
1
@Keith 如果层数未知,则可以参考以下链接:https://dev59.com/OnE95IYBdhLWcg3wi-Uc - niton
不,我只是使用createobject("Outlook.Application")、createitem()等函数! - Trs
最好的人来观察早期绑定代码和如何操作它的是老牌的 Ron https://www.rondebruin.nl/. - Keith Whatling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接