2014-08-29 54 views
0

我有一個Outlook宏,我寫它會在將項目移動到文件夾時自動將項目標記爲已讀。 (我討厭在收件箱以外的文件夾中有未讀郵件)。我在Outlook 2010中編寫了這個宏,並且它運行良好多年。在ThisOutlookSession中實現接口在Office 2013中不起作用

我最近升級到Office 2013,現在我的宏不工作 - 我在這條線得到一個類型不匹配錯誤(參見下面的完整代碼):

Set oMoveHandler.Callback = Me 

oMoveHandler。回調需要一個對象實現的IMessageMoved類型的對象,所以我不知道爲什麼我得到這個錯誤。有任何想法嗎?

ThisOutlookSession代碼:

Option Explicit 

Implements IMessageMoved 

Private m_oFolderCollection As Collection 

Private Sub Application_Quit() 
    Set m_oFolderCollection = Nothing 
End Sub 

Private Sub Application_Startup() 
    Dim oFolder As Outlook.Folder 

    Set m_oFolderCollection = New Collection 
    For Each oFolder In Application.GetNamespace("MAPI").Folders 
     Call AddFolder(oFolder) 
    Next oFolder 
End Sub 

Private Sub AddFolder(Folder As Outlook.Folder) 
    Dim oFolder As Outlook.Folder 
    Dim oMoveHandler As MoveHandler 

    If Folder Is Nothing Then 
     Exit Sub 
    End If 

    If Folder.Folders.Count = 0 Then 
     Exit Sub 
    End If 

    For Each oFolder In Folder.Folders 
     If oFolder.DefaultItemType = olMailItem Then 
      If oFolder.Name <> "Inbox" And oFolder.Name <> "Outbox" And oFolder.Name <> "ePrescribing Workgroup" Then 
       Set oMoveHandler = New MoveHandler 
       Set oMoveHandler.Folder = oFolder.Items 
       Set oMoveHandler.Callback = Me 
       Call m_oFolderCollection.Add(oMoveHandler) 
       Set oMoveHandler = Nothing 
      End If 
      Call AddFolder(oFolder) 
     End If 
    Next oFolder 
End Sub 

Private Function IMessageMoved_MessageMoved(Item As Object) As Variant 
    On Error Resume Next 
    Item.UnRead = False 
    On Error GoTo 0 
End Function 

IMessageMoved:

Public Function MessageMoved(Item As Object) 
End Function 

MoveHandler:

Private WithEvents m_oFolder As Outlook.Items 
Private m_oCallback As IMessageMoved 

Public Property Set Folder(Folder As Outlook.Items) 
    Set m_oFolder = Folder 
End Property 

Public Property Get Folder() As Outlook.Items 
    Set Folder = m_oFolder 
End Property 

Public Property Set Callback(Object As IMessageMoved) 
    Set m_oCallback = Object 
End Property 

Private Sub Class_Terminate() 
    Set m_oFolder = Nothing 
    Set m_oCallback = Nothing 
End Sub 

Private Sub m_oFolder_ItemAdd(ByVal Item As Object) 
    If Not m_oCallback Is Nothing Then 
     Call m_oCallback.MessageMoved(Item) 
    End If 
End Sub 

回答

0

我懷疑我是真的遇到了類似的問題的一個描述in this post describing a similar problem in Excel出綁定剛沒有按預期工作。爲了解決這個問題,我最終將我的界面從ThisOutlookSession移出了一個單獨的類,然後我從ThisOutlookSession實例化。