Отправить письмо, когда задача выполнена - новый подход - PullRequest
0 голосов
/ 24 марта 2020

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

Sub ConvertMailtoTask(Item As Outlook.MailItem)
    Dim objTask As Outlook.TaskItem
    Set objTask = Application.CreateItem(olTaskItem)
With objTask
    .Subject = Item.Subject
    .StartDate = Item.ReceivedTime
    .Body = Item.Body
    .Companies = Item.SenderEmailAddress
    .Save
End With
    Set objTask = Nothing
End Sub

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

Sub Item_PropertyChange(ByVal Name)
    Set oMsg = Application.CreateItem(olMailItem)
    If Item.Status = 2 Then
        With oMsg
            .To = "myemailaddress"
            .Subject = "Task Completed"
            .Body = Item.Subject
            .Send
        End With
    End If
End Sub

1 Ответ

0 голосов
/ 29 марта 2020

Для запуска события требуется настройка, подобная этой:

В ThisOutlookSession

Option Explicit ' Consider this mandatory
' Tools | Options | Editor tab
' Require Variable Declaration

Dim WithEvents myInspector As Inspectors
Dim WithEvents myTaskItem As TaskItem

Private Sub Application_Startup()
    Set myInspector = Inspectors
End Sub

Private Sub myInspector_NewInspector(ByVal Inspector As Inspector)
    If TypeOf Inspector.CurrentItem Is TaskItem Then
        Set myTaskItem = Inspector.CurrentItem
    End If
End Sub

Private Sub myTaskItem_PropertyChange(ByVal Name As String)

    ' More than one property may change simultaneously
    Debug.Print Name

    If Name = "Status" Then

        'Status 2: completed
        Debug.Print Name & " has changed to: "
        Debug.Print " " & myTaskItem.Status

        If myTaskItem.Status = 2 Then

            ' a) The last task opened remains in memory until another task is opened.
            '    A selected task marked complete by menu or ribbon button will not trigger code,
            '     unless it was the last task opened.
            '    Selected items are automatically saved. The usual case.
            '
            ' b) Users may mark completed by accident.
            '
            ' c) If in an inspector window, the change has not yet been saved.

            MsgBox "Status of the last task that was opened now marked Completed." & vbCr & _
               "If in an inspector window, the change has not yet been saved."

        End If

    End If

End Sub
...