Регулярно запускайте скрипт VBA Outlook 'Application_Startup' - PullRequest
0 голосов
/ 10 апреля 2019

Я (используя информацию из SO) внедрил макрос VBA, который запускается для обработки новых писем после того, как опции «запустить скрипт» были удалены из правил Outlook.Я делаю это следующим образом:

Private WithEvents Items As Outlook.Items

Public Sub Application_Startup()
' Add an inbox event listener
  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
  MsgBox "Startup macro run"

End Sub

Private Sub Items_ItemAdd(ByVal item As Object)
  'Do something on new email arrival
.
.
.
End Sub

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

Вопрос - Я не эксперт по VBA, и мне было интересно, могу ли я просто перезапустить макрос Application_Startup, чтобы перезапуститьслушатель в конце макроса 'Items_ItemAdd(ByVal item As Object)'?

Ответы [ 3 ]

1 голос
/ 10 апреля 2019

Если вам нужно сбросить обработчик событий ItemAdd, я не думаю, что использование ItemAdd для этого имеет какой-то смысл.

Вы можете использовать таймер (которого нет в VBA) или другое событие, которое срабатывает более или менее часто, например, событие Explorer.SelectionChange (Explorer можно получить из Application.ActiveExplorer).

0 голосов
/ 12 апреля 2019

Упрощенный код может оказать влияние.

Private WithEvents Items As Outlook.Items

Public Sub Application_Startup()
    ' Add an inbox event listener
    Dim objNS As Outlook.NameSpace

    ' The code is in Outlook, not being called, for example, from Excel.
    Set objNS = Session.GetNamespace("MAPI")
    ' default local Inbox
    Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
    MsgBox "Startup macro run"
End Sub

Если вышеприведенное не оказывает влияния, это может привести к повторному запуску Application_Startup достаточно часто.

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Application_Startup
End Sub
0 голосов
/ 10 апреля 2019

Вы можете добавить новый макрос, который выполняет действия, изначально присутствующие в событии Application_Startup.Затем вы можете позже обратиться к этому сабву в конце макроса Items_ItemAdd.

Private WithEvents Items As Outlook.Items

Public Sub Application_Startup()
   Call startupevents
End Sub

Sub startupevents()

' Add an inbox event listener
  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
  MsgBox "Startup macro run"

End Sub

Private Sub Items_ItemAdd(ByVal item As Object)
  'Do something on new email arrival
'
'
'
Call startupevents
End Sub
...