在Excel中显示所选电子邮件的电子邮件正文作为Excel中的消息框?

时间:2015-10-21 14:09:30

标签: excel vba outlook

我正在使用excel 2010并创建了以下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邮箱中

这方面的一个例子就是说我们有几个主题电子邮件" test"因为它目前代码将显示所有这些电子邮件的正文,其中包含主题" test"在另一个消息框中一个接一个地。

但是,如果该电子邮件主题为" test"

,则应该只为Outlook中当前选中/打开的电子邮件显示一个消息框。

请有人告诉我如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用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

首先,它查找活动的已打开项目。如果那不是电子邮件,那么它会查看“资源管理器”处于活动状态的第一个选定项目。如果那不是电子邮件,那么它会给你一条消息。

如果打开的活动项目是电子邮件,它会使用该项目并测试主题。在这种情况下,它不会查看任何选定的项目。只有当没有打开或者打开的项目不是Mailitem(就像它是CalendarItem)时,它是否会查看所选内容。

如果你在日历中,那么那就是活跃的资源管理器,任何选择都可能不是MailItem。它也不关心你是否在另一个文件夹的收件箱中。它只关心所选的第一个项目是否是MailItem。如果这对您很重要,您可以查看olapp.ActiveExplorer.CurrentFolder以确保您在收件箱中。

您的邮件文件夹中的项目可能不是MailItems。如果它不是一个被选中的MailItem,那么你会收到一条消息。

最后,您可以在收件箱中选择任意数量的项目。这只会查看所选的第一个项目。如果您要处理所有商品,可以使用.Selection.Count.Selection.Item(i)查看每个商品,然后依次处理每个商品。