在Outlook中将所选电子邮件的正文显示为一个消息框?

我正在使用Excel 2010,并创build了以下vba代码,用于查找在其主题标题中包含单词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邮件框中

一个例子是,我们有几个电子邮件的主题“testing”,因为它目前的代码将显示所有这些电子邮件的主题有一个接一个在另一个消息框中的“testing”的主题。

但是,如果该电子邮件主题是“testing”,那么在Outlook中只应该为当前select/打开的电子邮件显示一个消息框。

请有人可以告诉我怎么做到这一点?

您可以使用Application.ActiveInsepctor属性来获取打开的电子邮件,或者使用Application.ActiveExplorer属性来获取选定的未打开的电子邮件

 Sub GetFromInbox() Dim olApp As Outlook.Application Dim olMail As Outlook.MailItem Set olApp = New Outlook.Application 'If it's not an MailItem or there's no 'ActiveInspector, error is ignored On Error Resume Next Set olMail = olApp.ActiveInspector.CurrentItem On Error GoTo 0 'If nothing is open, see if a MailItem is selected If olMail Is Nothing Then On Error Resume Next Set olMail = olApp.ActiveExplorer.Selection.Item(1) On Error GoTo 0 End If If Not olMail Is Nothing Then If InStr(olMail.Subject, "Test") > 0 Then MsgBox olMail.Body Else MsgBox "Selected/active email does not have correct subject" End If Else MsgBox "Active item is not an email or no email selected" End If End Sub 

首先,它寻找活跃的,开放的项目。 如果这不是电子邮件,那么无论“资源pipe理器”处于活动状态,它都会查看第一个选定的项目。 如果这不是电子邮件,那么它会给你一个消息。

如果打开的活动项目是电子邮件,则使用该项目并testing该主题。 在这种情况下,它不会查看任何选定的项目。 只有没有任何开放或打开的项目不是一个Mailitem(如它是一个CalendarItem),它看看是什么select。

如果你在日历中,那么这就是活跃的浏览器,任何select都可能不是一个MailItem。 它也不关心,如果你在另一个文件夹的收件箱。 它只关心如果select的第一个项目是一个MailItem。 你可以检查olapp.ActiveExplorer.CurrentFolder ,确保你在收件箱中,如果这对你很重要。

您的邮件文件夹中可以包含不是MailItem的项目。 如果它不是所选的MailItem,那么您将收到一条消息。

最后,您可以select收件箱中的任意数量的项目。 这只看在select的第一个项目。 如果你想处理所有的项目,你可以使用.Selection.Count.Selection.Item(i)依次处理每个项目。