我正在使用excel 2010并创建了以下vba代码,该代码在主题 Headers 中查找包含单词test的电子邮件,然后在excel中显示包含该电子邮件正文的消息框:
Sub GetFromInbox()
Dim olApp As Outlook.Application
Dim olNs As Outlook.Namespace
Dim olFldr As Outlook.MAPIFolder
Dim olItms As Outlook.Items
Dim olMail As Variant
Dim i As Long
Set olApp = New Outlook.Application
Set olNs = olApp.GetNamespace("MAPI")
Set olFldr = olNs.GetDefaultFolder(olFolderInbox)
Set olItms = olFldr.Items
Set objItem = olApp.ActiveExplorer.Selection.Item(1)
olItms.Sort "Subject"
i = 1
For Each olMail In olItms
If InStr(olMail.Subject, "Test") > 0 Then
MsgBox olMail.Body
i = i + 1
End If
Next olMail
Set olFldr = Nothing
Set olNs = Nothing
Set olApp = Nothing
End Sub
我的最终目标是在代码中添加更多条件,以便只有当前选中的电子邮件或Outlook中打开的电子邮件的电子邮件正文显示在我的excel消息框中
这方面的一个例子是我们有几个主题为“test”的电子邮件,因为它目前代码将显示所有这些电子邮件的正文,这些电子邮件在不同的消息框中一个接一个地“测试” .
但是,如果该电子邮件主题是“测试”,则应该只为Outlook中当前选择/打开的电子邮件显示一个消息框 .
请有人告诉我如何做到这一点?
1 回答
您可以使用
Application.ActiveInsepctor
属性获取已打开的电子邮件,或使用Application.ActiveExplorer
属性获取已选中但尚未打开的电子邮件首先,它查找活动的已打开项目 . 如果那不是电子邮件,那么它会查看“资源管理器”处于活动状态的第一个选定项目 . 如果那不是电子邮件,那么它会给你一条消息 .
如果打开的活动项是电子邮件,它会使用该项并测试主题 . 在这种情况下,它不会查看任何选定的项目 . 只有当没有打开或者打开的项目不是Mailitem(就像它是CalendarItem)时,它是否会查看所选内容 .
如果您是活动的资源管理器,那么如果您在另一个文件夹的收件箱中,则需要小心 . {184562_它只关心选择的第一个项目是否是MailItem . 您可以查看
olapp.ActiveExplorer.CurrentFolder
以确保您对您很重要 .您可以在邮件文件夹中包含不是MailItems的项目 . 如果它不是选中的MailItem,那么您将收到一条消息 .
最后,您可以在收件箱中选择任意数量的项目 . 这只会查看所选的第一个项目 . 如果要处理所有项目,可以使用
.Selection.Count
和.Selection.Item(i)
查看它们,依次处理每个项目 .