从Outlook中已发送邮件文件夹中的最后一项提取收件人

时间:2015-06-12 01:48:41

标签: excel vba email outlook

我正在尝试从Outlook发送的最后一封电子邮件中检索收件人的姓名。

使用Items.GetLast方法返回主题行,但我需要收件人的姓名。

我尝试循环遍历已发送文件夹中的每个项目,并将信息提取到Excel中的电子表格,如下所示:

    For Each olMail In olFolder.Items
    For Each olRecipient In olMail.Recipients
        Cells(lngRow, 1) = olRecipient.Name
        Cells(lngRow, 2) = olRecipient.Address
    Next
    lngRow = lngRow + 1
Next
Else

我遇到的问题是当发送的项目不是olMail类型时,例如会议请求响应。我最终得到运行时错误13类型不匹配。

就我的目的而言,我知道发送的最后一封电子邮件将始终是我收到收件人姓名所需的邮件,因此通过发送中的每一项都没有多大意义。文件夹并抓住最后一个。有没有办法返回最后发送电子邮件的项目并提取收件人的姓名?

我将从Excel工作簿中执行此命令。

感谢。

2 个答案:

答案 0 :(得分:0)

您假设Items.GetLast将返回最后发送的项目。除非您明确调用Sort():

,否则Items集合不会以任何特定方式排序
set oItems = olFolder.Items
oItems.Sort("[SentOn]")

其次,GetLast()执行 not 返回一个字符串,它返回一个对象,可以是MailItem,MeetingItem等。如果需要处理不同种类的项目,请声明该项目为一般的Object然后检查Class属性。对于常规消息,它将是43(olMail):

dim oItem As Object
set oItem = oItems.GetLast
if oItem.Class = 43 Then 
  ...
End If

答案 1 :(得分:0)

您只需检查商品类型即可避免使用run-time error 13 Type mismatch

If TypeOf olMail is MailItem Then
   ...
End If