Outlook VBA - 如何检测在特定文件夹集中移动电子邮件的时间

时间:2018-06-14 17:09:17

标签: vba outlook outlook-vba outlook-2010

我正在编写一个Outlook宏,当他们的电子邮件被拖入多个文件夹之一时,会自动向用户发送模板响应 - 我将这些称为受监控文件夹。我目前正在为每个受监控的文件夹使用ItemAdd Events,该文件夹在项目(在我的情况下是电子邮件)添加到其中时执行。然后,程序将获取添加的电子邮件,提取主题行和发件人的电子邮件地址,然后将模板响应发送回该用户。

当电子邮件最初被错误分类并拖入错误的受监控文件夹时,我遇到的问题就出现了。我的程序需要能够向其电子邮件被错误分类的用户发送更正电子邮件。为此,我的程序需要知道何时将电子邮件从其中一个受监控文件夹拖到另一个受监控文件夹。与将电子邮件从收件箱拖到其中一个的典型情况相反。受监控的文件夹。


想法1:

Outlook VBA确实有ItemRemove Events在从特定文件夹中删除项目时执行,但是,与ItemAdd Events不同,它不会将删除的项目作为参数传递。我最初的想法是为我的每个受监视文件夹使用ItemRemoved事件,存储从其中一个文件夹中删除的最新项目,然后将其与执行ItemAdd事件时添加到另一个受监视文件夹的项目进行比较。如果这两个项目相同,那么这意味着电子邮件被直接从一个拖到另一个,我的程序将知道发送更正电子邮件而不是典型的模板响应。但是ItemRemoved事件缺少Item参数使得无法获取已删除的电子邮件,以便将其与添加的电子邮件进行比较。

创意2

我的问题的另一个可能的解决方案是在执行ItemRemoved事件时设置一个标志,并在执行ItemAdd事件时进行评估。如果在运行ItemAdd时设置了该标志,则程序将知道项目刚刚从受监视文件夹中删除并添加到另一个受监视文件夹,然后发出更正响应。但是,在Outlook VBA中,如果项目直接从具有ItemRemoved事件的文件夹拖动到具有ItemAdd事件的文件夹,则仅执行目标文件夹的ItemAdd事件。这样,当项目被直接拖动到带有ItemAdd事件的文件夹时,就无法使用ItemRemoved事件进行检测。


考虑到我提出的两个想法的缺陷,我无法想到另一种方法,我可以使我的程序的这个功能工作。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用UserProperties?您可以将自定义用户属性值设置为要添加到的文件夹,还可以查看属性以查看是否将其移动到新的(受监视)文件夹。这是一个例子:

Sub check_last_monitored_folder(myItem As Object, newFolderName As String)

    Dim prop As UserProperty
    Set prop = myItem.UserProperties.Find("LastMonitoredFolder")

    If prop Is Nothing Then
        Debug.Print "Added to " & newFolderName & " folder"
        Set prop = myItem.UserProperties.Add("LastMonitoredFolder", olCombination)
        prop.Value = newFolderName
    Else
        Debug.Print "Moved from " & prop.Value & " folder to " & newFolderName
        prop.Value = newFolderName
    End If

End Sub