VBA Outlook: (временно) остановить скрипт на входящие письма - PullRequest
1 голос
/ 07 июля 2019

Я обрабатываю входящие электронные письма, используя

Private WithEvents objNewMailItems As Outlook.Items

в качестве процедуры запуска и

Private Sub objNewMailItems_ItemAdd(ByVal item As Object)

, выполняемые при поступлении нового сообщения в папку входящих сообщений.

Вопрос: как можноЯ (вручную) прекращаю выполнение этой процедуры?

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Событие ItemAdd может вообще не срабатывать, если в папку добавлено несколько элементов (более шестнадцати). Я бы рекомендовал вместо этого обрабатывать событие NewMailEx класса Application. Это событие запускается один раз для каждого полученного элемента, который обрабатывается Microsoft Outlook. Элемент может быть одним из нескольких различных типов элементов, например, MailItem, MeetingItem или SharingItem. Строка EntryIDsCollection содержит идентификатор записи, соответствующий этому элементу.

Событие NewMailEx возникает, когда новое сообщение поступает в папку «Входящие» и до обработки правила клиента. Вы можете использовать идентификатор записи, возвращенный в массиве EntryIDCollection, для вызова метода NameSpace.GetItemFromID и обработки элемента.

Private Sub outApp_NewMailEx(ByVal EntryIDCollection As String)
    if Cancel then
      Dim itm as Outlook.MailItem
      Set itm = NS.GetItemFromID(EntryIDCollection)

      If itm.Class = olMail Then

        Debug.Print "mail received"
        Debug.Print itm.Parent.Parent.name

      End If
    End If
End Sub

Чтобы предотвратить запуск макроса VBA, вы можете добавить кнопку с именем «CancelButton», которая устанавливает флаг, а затем проверить этот флаг в обработчике событий NewMailEx.

Bool Cancel
Private Sub CancelButton_OnClick()
    Cancel=True
End Sub

Наконец, вам может пригодиться Как остановить выполнение кода VBA? пост полезно.

0 голосов
/ 07 июля 2019

objNewMailItems объявлен в качестве поставщика событий; Пока его ссылка установлена, он будет запускать события.

Чтобы остановить это, вам нужно установить ссылку на Nothing.

Public Sub StopHandlingNewMailItems()
    Set objNewMailItems = Nothing
End Sub

Возьмите код, который в данный момент присваивает ссылку на этот объект, переместите его в какую-то StartHandlingNewMailItems() процедуру и вызовите ее при запуске; теперь вы можете по своему желанию включать / выключать обработку новых почтовых отправлений.

...