2016-07-25 82 views
1

我捕捉到事件的要求時,該郵件是從子文件夾移動到收件箱捕獲事件,同時從子文件夾移動郵件收件箱

的文件夾結構如下

myarchive-mailbox name 
Inbox Main folder 
    requests Sub folder 

myarchive 
    Inbox 
     requests 

當電子郵件將從請求子文件夾移動到myarchive郵箱名稱的收件箱,應該捕獲此郵箱項目並調用事件處理程序。

我已經執行的代碼,用於當該文件被從收件箱myarchive到我已經寫requests.The代碼移動捕獲事件是如下

Private WithEvents Items As Outlook.Events 

Private Sub Application_Startup() 

    Dim olApp As Outlook.Application 
    Dim objFolder As Outlook.MAPIFolder 
    Dim objNs As Outlook.NameSpace 

    Set olApp =Outlook.Application 
    Set objNS =olApp.GetNamespace("MAPI") 
    Set objFolder = objNS.Folders("myarchive") 
    Set objFolder=objFolder.Folders("Inbox") 
    Set Items=objFolder. Folders("requests").Items 
End Sub 

Private Sub Items_ItemsAdd(ByVal item As Object) 
    MsgBox "You moved the mail to requests folder" 
End Sub 
+0

在我的Outlook版本(2010)中,'Private WithEvents Items As Outlook.Events'行不起作用。 –

+0

哪個收件箱?默認收件箱或myarchive收件箱? – 0m3r

+1

它對myarchive收件箱。事件時,從myarchive收件箱請求,然後從請求到myarchive收件箱應該被捕獲。下面的代碼工作正常,並感謝很多,Om3r :) – nikthecamel

回答

1

Folder對象具有BeforeItemMove事件。在ThisOutlookSession模塊中,聲明文件夾對象WithEvents以公開其事件。

Private WithEvents mArchReqs As Folder 

Public Property Set ArchReqs(olFldr As Folder) 
    Set mArchReqs = olFldr 
End Property 

Public Property Get ArchReqs() As Folder 
    Set ArchReqs = mArchReqs 
End Property 

接下來,您已經設置了要觀看的文件夾。這裏我在應用程序啓動時設置文件夾。

Private Sub Application_Startup() 

    Set Me.ArchReqs = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders("requests") 

End Sub 

最後,您可以編寫BeforeItemMove事件過程。

Private Sub mArchReqs_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As MAPIFolder, Cancel As Boolean) 

    Debug.Print Item.Subject 
    Debug.Print MoveTo.Name 

End Sub 
+0

非常感謝迪克! – nikthecamel

+0

嗨迪克,我現在已經添加了代碼,這是我之前實現的從收件箱捕獲事件到myarchive子文件夾的事件。我在我的代碼中使用了BeforeItemMove子例程,並且我沒有成功整合BeforeItemMove子例程。請幫助我解決這個問題。 – nikthecamel

1

假設你將它移動到主默認收件箱,然後嘗試下面的代碼

Dim WithEvents SubFolder As Outlook.Folder 
Dim Inbox As Outlook.Folder 
Dim olNs As Outlook.NameSpace 

Private Sub Application_Startup() 
    Set olNs = Application.GetNamespace("MAPI") 
    Set SubFolder = olNs.Folders("myarchive").Folders("Inbox").Folders("requests")             
    Set Inbox = Application.Session.GetDefaultFolder(olFolderInbox) 
End Sub 

Private Sub SubFolder_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As MAPIFolder, Cancel As Boolean) 
    If MoveTo = Inbox Then 
     MsgBox Item.Subject & " was moved to Inbox" 
    End If 

End Sub 

否則改變這一行

Set Inbox = Application.Session.GetDefaultFolder(olFolderInbox) 

爲了這

Set Inbox = olNs.Folders("myarchive").Folders("Inbox") 

Folder.BeforeItemMove Event

相關問題