0

イベント ハンドラーを使用して、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
4

0 に答える 0