2016-07-25 85 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

相关问题