0

我使用事件处理程序在 Outlook 2016 中自动对电子邮件进行排序。这些事件处理程序已在 ThisOutlookSession 中定义为 Public WithEvents 变量,它们是使用 Application_Startup 事件设置的,它们调用位于不同代码模块中的不同程序,这些程序直接引用这些事件处理程序过程中的对象。

今天早上,每当运行这些程序时,我都会收到“需要对象”错误。我打开了 Option Explicit,它显示当我尝试手动运行该过程时,我收到一个编译错误,表明这些变量(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

示例代码(在单独的代码模块“自定义”中)

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
4

0 回答 0