Определить, редактируется ли электронное письмо в Outlook? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть макрос, который запускается на событии Application_NewMail - но я видел, что он имеет странные последствия, если пользователь в настоящее время составляет электронное письмо или ответ - иногда происходит сбой внешнего вида и потеря их прогресса.

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

Это позволит мне отменить макрос и избежать прерывания пользователя.

1 Ответ

0 голосов
/ 14 февраля 2019

Мне удалось найти фрагменты из связанных вопросов, но ничего, что не учитывало ни всплывающий редактор электронной почты, ни встроенный ответ.Вот решение, которое я собрал (кажется, что оно охватывает все базы):

Private Function IsUserEditing() As Boolean
    ' Check if the user is composing an email. Don't interrupt them if we are.
    ' 1. Check if the user has the pop-up email 'inspector' window open
    If Not (Application.ActiveInspector Is Nothing) Then
        Dim OpenWindow As Variant
        Set OpenWindow = Application.ActiveInspector.CurrentItem
        If TypeOf OpenWindow Is MailItem Then
            Dim NewMail As MailItem
            Set NewMail = OpenWindow
            ' Check if the mail they're viewing is not 'Sent' (i.e. being edited)
            If Not (NewMail.Sent) Then
                IsUserEditing = True
                Exit Function
            End If
        End If
    ' 2. Check if the user is replying to an email using the 'inline response' feature
    ElseIf Not (Application.ActiveExplorer.ActiveInlineResponse Is Nothing) Then
        IsUserEditing = True
        Exit Function
    End If
    IsUserEditing = False
End Function

Его можно использовать так:

Private Sub Application_NewMail()
    Debug.Print "New mail received..."        
    ' Check if the user is composing an email. Don't interrupt them if we are.
    If IsUserEditing Then
        Debug.Print "User appears to be composing an email. Cancelling..."
        Exit Sub
    End If        
    ' Otherwise Proceed
    PerformOnNewMailActions
End Sub

Надеюсь, это поможет другим!

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