イベント ハンドラーを使用して、Outlook 2016 で電子メールを自動的に並べ替えます。これらのイベント ハンドラーは、ThisOutlookSession で Public WithEvents 変数として定義されており、Application_Startup イベントを使用して設定され、これらのイベント ハンドラーを直接参照する別のコード モジュールにある別のプロシージャを呼び出します。手順中のオブジェクト。
今朝、これらの手順を実行するたびに「オブジェクトが必要です」というエラーが表示されます。Option Explicit をオンにすると、手順を手動で実行しようとすると、これらの変数 (ThisOutlookSession のパブリック変数イベント ハンドラー) が定義されていないことを示すコンパイル エラーが発生することがわかりました。プロシージャを ThisOutlookSession に移動するか、イベント ハンドラーを "EventHandler1" ではなく "ThisOutlookSession.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