我正在使用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中当前选中/打开的电子邮件显示一个消息框。请有人告诉我如何做到这一点?
答案 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)
查看每个商品,然后依次处理每个商品。