Outlook VBA,用于在发送之前将新邮件标记为任务

时间:2013-10-16 22:30:11

标签: outlook outlook-vba

我试过这个:

Sub SendAwaitingResponse()
  Dim mail As MailItem
  Set mail = Outlook.Application.ActiveInspector.CurrentItem
  mail.MarkAsTask (olMarkToday)
  mail.Categories = "Awaiting Response"
  mail.Send
End Sub

出现以下错误:

  

无法标记草稿项目。 MarkAsTask仅对已发送或接收的项目有效。

可以在用户界面中单击“跟进”,然后邮件将在发送后标记为任务。我认为没有办法以编程方式进行。

2 个答案:

答案 0 :(得分:1)

您甚至需要在已发送邮件文件夹中列出Items.ItemAdd,并在传递给事件处理程序的邮件上调用MarkAsTask。

答案 1 :(得分:1)

创建与“发送等待响应”按钮关联的宏,以便使用自定义属性标记已发送的电子邮件:

Sub SendAwaitingResponse()
    Dim Mail As MailItem
    Set Mail = Outlook.Application.ActiveInspector.CurrentItem
    Dim Property As UserProperty
    Set Property = Mail.UserProperties.Add("FlagAwaitingResponse", olYesNo)
    Property.Value = True
    Mail.Send
End Sub

在ThisOutlookSession对象中,订阅添加到“已发送邮件”文件夹的项目。标有自定义属性的项目将标记为Outlook任务。

Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
    Dim SentItems As Folder
    Set SentItems = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail)
    Set Items = SentItems.Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
    Dim Mail As MailItem
    Set Mail = Item

    Set Property = Mail.UserProperties("FlagAwaitingResponse")
    If Property Is Nothing Then Exit Sub

    Mail.Categories = "Awaiting Response"
    Mail.MarkAsTask (olMarkToday)
    Mail.Save
End Sub

不要忘记启用Outlook宏来实现此目的。