Outlook VBA - ThisOutlookSession Publi c WithEvents Переменные случайным образом перестают быть общедоступными - PullRequest
0 голосов
/ 06 августа 2020

Я использовал обработчики событий для автоматической сортировки электронной почты в 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
...