Отправлять уведомления о задачах в Outlook? - PullRequest
1 голос
/ 08 мая 2019

Я делаю лист Excel, на котором руководитель группы пишет задание, а затем отправляет его работнику.

Я разобрался с этой частью, но каждое задание отправляется трем людям.Работник, руководитель группы и его помощник.

Можно ли отправлять уведомления о задании только руководителю группы и помощнику?

Я просмотрел свойства TaskItem и нашел двавозможные решения:

  • свойство TaskItem.StatusUpdateRecipients
  • свойство TaskItem.StatusOnCompletionRecipients

Но я не понимаю, как они работают.Может кто-нибудь объяснить, как они работают, или есть лучшее решение этой проблемы?

Вот как я использовал эти два свойства:

With objTask

    .Assign
    .Subject = Worksheets("Naloge").Range("E" & Trow)
    .Body = "Some text"
    .Status = olTaskNotStarted
    .Importance = olImportanceHigh
    .StartDate = Worksheets("Naloge").Range("B" & Trow)
    .DueDate = Worksheets("Naloge").Range("C" & Trow)
    .ReminderTime = .DueDate - 1.5
    '.Owner = Worksheets("Naloge").Range("G" & Trow)
    '.Role = Worksheets("Naloge").Range("G" & Trow)
    .Recipients.Add (EmailTo)
    If Len(EmailCc) > 1 Then
        '.Recipients.Add (EmailCc)
        .StatusUpdateRecipients (EmailCc)
        .StatusOnCompletionRecipients (EmailCc)
    End If
    If Len(EmailVodja) > 1 Then
        .StatusOnCompletionRecipients.Add (EmailVodja)
        .StatusUpdateRecipients.Add (EmailVodja)
    End If
    .Send
    .Save
End With

Код останавливается на этих двух свойствах и показывает

Ошибка компиляции: «Неправильное использование свойства»

1 Ответ

1 голос
/ 08 мая 2019

Необходимо создать задачу в общей папке, чтобы назначить ее другому владельцу.

Чтобы добавить дополнительного получателя, вы добавляете новый объект Recipient и затем определяете его тип.Тип olUpdate ведет к StatusUpdateRecipients и тип olFinalStatus к StatusOnCompletionRecipients.

Private Sub GeneratePublicTask()
    Dim objNamespace As Outlook.NameSpace
    Dim objPublicFolderRoot As Outlook.Folder
    Dim objPublicTaskFolder As Outlook.Folder
    Dim objMyTaskFolder As Outlook.Folder
    Dim objTask As Outlook.TaskItem

    Dim objRecipientOwner As Outlook.Recipient
    Dim objRecipientEveryStatusUpdate As Outlook.Recipient
    Dim objRecipientFinalStatusOnly As Outlook.Recipient

    Dim EmailOwner As String
    Dim EmailEveryStatusUpdate As String
    Dim EmailFinalStatusOnly As String

    EmailOwner = "IsOwner@ACME.com"
    EmailEveryStatusUpdate = "GetsEveryUpdate@ACME.com"
    EmailFinalStatusOnly = "GetsFinalStatusOnly@ACME.com"

    Set objNamespace = Application.GetNamespace("MAPI")
    Set objPublicFolderRoot = objNamespace.GetDefaultFolder(olPublicFoldersAllPublicFolders)
    Set objPublicTaskFolder = objPublicFolderRoot.Folders("Public Tasks")
    Set objTask = objPublicTaskFolder.Items.Add(olTaskItem)

    ' For local folder tests:
    ' Set objMyTaskFolder = objNamespace.GetDefaultFolder(olFolderTasks)
    ' Set objTask = objMyTaskFolder.Items.Add(olTaskItem)

    With objTask
        .Subject = "Example Subject Text"
        .Body = "Example Body Text"
        .Status = olTaskNotStarted
        .Importance = olImportanceHigh
        .StartDate = Date
        .DueDate = Date + 7
        .ReminderTime = .DueDate - 1.5
        .Role = "Example Role Text"

        Set objRecipientOwner = .Recipients.Add(EmailOwner)
        'objRecipientOwner.Type = olTo ' not necessary, first is To

        Set objRecipientEveryStatusUpdate = .Recipients.Add(EmailEveryStatusUpdate)
        objRecipientEveryStatusUpdate.Type = olUpdate

        Set objRecipientFinalStatusOnly = .Recipients.Add(EmailFinalStatusOnly)
        objRecipientFinalStatusOnly.Type = olFinalStatus

        .Recipients.ResolveAll

        .Assign
        '.Save

        Debug.Print .Owner      ' still yourself?
        Debug.Print .Ownership  ' 0 = olNewTask, 2 = olOwnTask, 1 = olDelegatedTask
        Debug.Print .StatusUpdateRecipients         ' Type olUpdate
        Debug.Print .StatusOnCompletionRecipients   ' Type olFinalStatus

        .Display
        '.Send
    End With
End Sub
...