#vba #outlook #outlook-2019
#vba #outlook #триггеры
Вопрос:
Я пишу макрос, который создает заявки в базе данных на основе оповещений, полученных с сервера Nagios по электронной почте. Однако я не могу позволить макро запускаться в бесконечном цикле при проверке почты, потому что он слишком ресурсоемкий и заставляет мой рабочий стол зависать. Мне нужно найти способ запускать макрос только при получении новой почты.
Я искал что-то вроде событий NewMail на веб-сайте MSDN, но не могу найти ничего связного. Может кто-нибудь показать мне немного примера кода, чтобы показать, как запускать макросы из событий новой почты?
Ответ №1:
Этот код добавит прослушиватель событий в локальный почтовый ящик по умолчанию, а затем выполнит некоторые действия с входящими электронными письмами. Вам нужно добавить это действие в приведенный ниже код.
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 amp; " - " amp; Err.Description
Resume ProgramExit
End Sub
После вставки кода в ThisOutlookSession
module необходимо перезапустить Outlook.
Комментарии:
1. Мой плохой, отключил макросы. Немного глупо, что для этого сценария не существует другого уровня безопасности макросов.
2. @JimmyPena Где вызывается Items_ItemAdd?
3. Работал с Outlook 2016
4. Работает для первых двух электронных писем в течение первых нескольких минут, а затем внезапно перестает запускаться. Есть идеи, почему?
5. У меня ничего не происходит
Ответ №2:
Попробуйте что-то подобное внутри ThisOutlookSession
:
Private Sub Application_NewMail()
Call Your_main_macro
End Sub
Мой Outlook vba только что запустился, когда я получил электронное письмо и открыл это событие приложения.
Редактировать: я только что протестировал сообщение с сообщением hello world, и оно запустилось после вызова в application_newmail
случае получения электронного письма.
Комментарии:
1. Боюсь, это, похоже, не работает. Я попытался запустить макрос, а затем отправить себе письмо, но я не мог запустить свой макрос, пока не инициализировал все заново. Как вы думаете, в чем может быть проблема?
2. Откуда у вас код в моем ответе? Я поместил его
ThisOutlookSession
и оставил. Нет необходимости запускать макрос, который запускается при получении почты.3. Я тоже вставил его в ThisOutlookSession, но это доставляет мне много проблем во время запуска. Я даже не могу указать на корень проблемы, мой сабвуфер просто делает совершенно случайные вещи…
4. Если вы вставите что-то вроде этого в раздел «сделать что-то здесь»:
Call Your_main_macro
, я обнаружил, что макрос должен храниться в том же модуле,ThisOutlookSession
. Если это было в другом модуле, я получил сообщение об ошибке. Мне пришлось перезапустить Outlook, чтобы любые изменения вступили в силу.