首页 文章

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

提问于
浏览
1

我正在使用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 回答

  • 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)时,它是否会查看所选内容 .

    如果您是活动的资源管理器,那么如果您在另一个文件夹的收件箱中,则需要小心 . {184562_它只关心选择的第一个项目是否是MailItem . 您可以查看 olapp.ActiveExplorer.CurrentFolder 以确保您对您很重要 .

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

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

相关问题