我使用事件处理程序在 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