Событие 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? пост полезно.