Как запустить макрос для запуска после получения нового письма в Outlook?

Я пишу макрос, который создает заявки в базе данных на основе предупреждений, полученных от сервера Nagios в виде электронного письма. Однако я не могу позволить макросу запускаться в бесконечном цикле при проверке почты, потому что он слишком ресурсоемкий и заставляет мой рабочий стол зависать. Мне нужно найти способ запуска макроса только при получении нового письма.

Я искал что-то вроде событий NewMail на веб-сайте MSDN, но не могу найти ничего связного. Может кто-нибудь показать мне только пример кода, чтобы показать, как запускать макросы из новых почтовых событий?

Ответы на вопрос(2)

Решение Вопроса

Этот код добавит прослушиватель событий в локальную папку «Входящие» по умолчанию, а затем предпримет некоторые действия для входящих писем. Вам нужно добавить это действие в коде ниже.

Private WithEvents Items As Outlook.Items 
Private Sub Application_Startup() 
  Dim olApp As Outlook.Application 
  Dim objNS As Outlook.NameSpace 
  Set olApp = Outlook.Application 
  Set objNS = olApp.GetNamespace("MAPI") 
  ' default local Inbox
  Set Items = objNS.GetDefaultFolder(olFolderInbox).Items 
End Sub
Private Sub Items_ItemAdd(ByVal item As Object) 

  On Error Goto ErrorHandler 
  Dim Msg As Outlook.MailItem 
  If TypeName(item) = "MailItem" Then
    Set Msg = item 
    ' ******************
    ' do something here
    ' ******************
  End If
ProgramExit: 
  Exit Sub
ErrorHandler: 
  MsgBox Err.Number & " - " & Err.Description 
  Resume ProgramExit 
End Sub

После вставки кода вThisOutlookSession модуль, вы должны перезапустить Outlook.

 08 июл. 2013 г., 12:06
Не работает для меня в Outlook Professional Plus 2010
 27 дек. 2015 г., 20:53
Работал с Outlook 2016
 30 окт. 2014 г., 19:03
@JimmyPena Где вызывается Items_ItemAdd?
 08 июл. 2013 г., 12:19
Мой плохой, были отключены макросы. Немного глупо, что для этого сценария уровень безопасности макросов не отличается.
 18 мар. 2016 г., 12:48
Работает для первых нескольких писем в течение первых нескольких минут, а затем внезапно перестает срабатывать. Есть идеи почему?

Попробуйте что-то подобное внутриThisOutlookSession:

Private Sub Application_NewMail()
    Call Your_main_macro
End Sub

Мой Outlook vba только что сработал, когда я получил электронное письмо и открыл это событие приложения.

Изменить: я только что проверил окно приветствия Привет мир, и он запустился после вызова вapplication_newmail событие, когда электронное письмо было получено.

 25 мар. 2015 г., 12:03
Если вы вставляете что-то подобное в «Сделайте что-то здесь» раздел:Call Your_main_macroЯ обнаружил, что макрос должен храниться в том же модуле,ThisOutlookSession, Если это было в другом модуле, я получил ошибку. Мне пришлось перезапустить Outlook, чтобы изменения вступили в силу.
 08 июл. 2013 г., 12:08
Не работает для меня в Outlook Professional Plus 2010
 29 июн. 2012 г., 17:37
Где у вас был код в моем ответе? Я поместил это вThisOutlookSession и оставил это. Нет необходимости запускать макрос, который будет срабатывать при получении почты.
 Gautam Mainkar29 июн. 2012 г., 17:19
Я боюсь, что это не похоже на работу. Я попытался запустить макрос, а затем отправил себе письмо, но не смог запустить мой макрос, пока не переинициализировал все это. Как вы думаете, проблема может быть?
 Gautam Mainkar02 июл. 2012 г., 11:41
Я также вставил его в ThisOutlookSession, но он доставляет мне много проблем во время работы. Я даже не могу указать на корень проблемы, мой саб просто делает совершенно случайные вещи ...

Ваш ответ на вопрос