【问题标题】:Excel vba: Looping through all subfolders in Outlook email to find an email with certain subjectExcel vba:遍历 Outlook 电子邮件中的所有子文件夹以查找具有特定主题的电子邮件
【发布时间】:2018-01-02 21:52:21
【问题描述】:

我已经在 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 中编写一个宏
  • 有利也有弊:如果您在 Outlook 中编写宏来执行此操作,则更容易,因为您已经可以访问 Outlook 对象,但您必须在 Outlook 中为所有用户添加宏。在 Excel 中,编写宏有点复杂,但您不需要任何安装

标签: excel vba outlook


【解决方案1】:

以下代码循环遍历 Outlook 中的所有文件夹,到达收件箱下方的第一级。您可以通过指定要查看的初始文件夹来查看收件箱。因此,您可以在循环时搜索文件夹。您可以通过更深入地循环或说folders.count > X来添加更多子文件夹。

我一直发现 Excel 中的 Outlook 令人沮丧,因此制作了此 Early Bound 以使编码更容易。这意味着您需要转到工具/参考并添加 Microsoft Outlook 16(x).0 对象库

您可以在编码后将其更改回后期绑定,因为早期绑定将为您提供 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

错误是跳过 Outlook 映射存档 pst 文件的任何问题。

【讨论】:

  • 千感谢您的帮助基思!每次我尝试添加 Microsoft Outlook 16(x).0 对象库以使用早期绑定时,都会出现一条消息,提示“名称与现有模块、项目或对象库冲突”。但是当我定义像这样的对象时:Dim OutApp As Outlook.Application,它仍然出现:“编译错误 - 未定义用户定义的类型”。你知道为什么吗?
  • 我认为(我不是 100% 确定)可能是引用。你在使用 set outapp = New outlook.(whatever)。使用 FileSystemObject 时,我似乎记得类似的事情。
  • @Keith 级别数未知的有这个stackoverflow.com/questions/2272361/…
  • 不,我只是在使用 createobject("Outlook.Application")、createitem() 等!
  • 最好的人看看早期和晚期绑定的代码以及如何是好的老罗恩rondebruin.nl
猜你喜欢
  • 1970-01-01
  • 2022-11-24
  • 2011-01-17
  • 2020-03-19
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多