为什么我会遇到以下问题?
我写了一封代码,用于在发送电子邮件后打开发送的电子邮件。 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
答案 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
中设置它。