发送后打开电子邮件

时间:2017-06-07 06:13:10

标签: vba outlook outlook-vba

为什么我会遇到以下问题?

我写了一封代码,用于在发送电子邮件后打开发送的电子邮件。 VBA代码不会打开最新发送的电子邮件,而是上一封电子邮件。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim myItem As MailItem
    Dim myNamespace As NameSpace
    Dim myFolder As Folder

    Set myNamespace = Application.GetNamespace("MAPI")
    Set myFolder = myNamespace.GetDefaultFolder(olFolderSentMail)
    Set myItem = myFolder.Items(myFolder.Items.Count)

    myItem.Display
End Sub

1 个答案:

答案 0 :(得分:0)

这是为什么的答案,这对Application_ItemSend事件不起作用:

在发送电子邮件之前

Application_ItemSend被称为 。您可以看到它,因为它有一个Cancel参数。这意味着只有在Cancel = False电子邮件被删除的情况下才会发送电子邮件。

因此,您无法显示电子邮件,因为此时此事件尚未在Application_ItemSend事件中发送。它会在Application_ItemSend完成后发送。

注意:如果您在Application_ItemSend中设置了一个断点,您会看到"新电子邮件"窗口保持打开/可见,直到ItemSend事件结束。因此,您无法在该活动中打开该电子邮件。

解决方法
您可以尝试以下代码。这会为已将项目添加到此文件夹时调用的已发送项目的默认文件夹创建一个事件。

  

添加代码后可能需要重新启动Outlook(或者至少运行一次Application_Startup过程)。

Option Explicit

Public WithEvents myOlItems As Outlook.Items

Private Sub Application_Startup()
    Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items
End Sub

Private Sub myOlItems_ItemAdd(ByVal Item As Object)
    Item.Display
End Sub

如果您发送的项目移动到的文件夹不是默认的Outlook发送邮件文件夹,那么您需要找到正确的文件夹以在Application_Startup中设置它。