Я использовал обработчики событий для автоматической сортировки электронной почты в Outlook 2016 последние 8 месяцев или около того. Эти обработчики событий были определены в ThisOutlookSession как переменные Publi c WithEvents, они устанавливаются с помощью события Application_Startup и вызывают различные процедуры, расположенные в другом модуле кода, которые напрямую ссылаются на эти объекты обработчиков событий во время процедур. До этого момента не было никаких проблем.
Сегодня утром я получаю ошибку «требуется объект» всякий раз, когда выполняются эти процедуры. Я включил Option Explicit, и выяснилось, что когда я пытаюсь запустить процедуру вручную, я получаю ошибку компиляции, указывающую, что эти переменные (обработчики событий переменных publi c в ThisOutlookSession) не определены. Ошибки прекращаются, когда я либо перемещаю процедуру в ThisOutlookSession, либо ссылаюсь на обработчик событий как на «ThisOutlookSession.EventHandler1», а не просто на «EventHandler1».
Я мог бы потенциально использовать эти обходные пути, но на самом деле это много работы, чтобы исправить это, и я сбит с толку, почему это вообще произошло. Есть идеи относительно того, что произошло или как это можно исправить (не прибегая к обходным путям)?
Пример кода (в ThisOutlookSession):
Public WithEvents InboxItems As Outlook.Items
Public WithEvents InboxFolder As Outlook.Folder
Private Sub Application_Startup()
Initialize_handler
End Sub
Public Sub Initialize_handler()
Set InboxItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
Set InboxFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
End Sub
Private Sub InboxItems_ItemAdd(ByVal oMail As Object)
Call Inbox_Sort
End Sub
Пример кода (в отдельном модуле кода «Custom ")
Sub Inbox_Sort()
Dim ML As Outlook.mailItem
Dim oObj As Object
For Each oObj In InboxItems
If TypeOf oObj Is mailItem Then
Call Sort(oObj)
Else
oObj.Move Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
End If
Next
End Sub