用户手动将电子邮件移动到存档文件夹时提醒用户

时间:2018-05-17 19:58:32

标签: email outlook outlook-vba directory

我发现自己不小心将电子邮件项目移动到存档文件夹而不是MS Outlook中的标准文件夹。例如,对于Example@Email.Com的电子邮件地址,我打开存档以在文件夹中找到旧电子邮件" KeepThis"但后来我忘了折叠Archive文件夹,所以当我真的想把它移到Example@Email.Com/KeepThis文件夹时,我无意中将其他一些电子邮件消息移到了Archive / KeepThis文件夹中。

当手动将电子邮件项目移动到存档文件夹时,有没有办法使用VBA代码提醒用户?

我试图通过@thims在create-outlook-rule-which-runs-after-move-mail-to-specific-folder修改代码以显示msgbox,但是当我将邮件项目移动到任何时无法弄清楚如何触发它我的主电子邮件文件夹和存档中的文件夹。

以下是我尝试的内容:

(1)我将以下代码添加到ThisOutlookSession(显然是我的实际电子邮件地址):

Public WithEvents FolderItems As Outlook.Items

Private Sub Application_Startup()
   Set FolderItems = Session.Folders("Example@Email.Com").Folders("Misc").Items
End Sub

Private Sub FolderItems_ItemAdd(ByVal Item As Object)
    MsgBox "ItemAdd event was triggered in folder Misc"
End Sub

如果 我将一个电子邮件项目移动到" Misc"我的未归档电子邮件帐户中的文件夹。好极了。

但是,当电子邮件移动到任何文件夹时,我无法弄清楚如何设置FolderItems对象。

(2)我可以使用:

引用常规Archive文件夹
Set FolderItems = Session.Folders("Archives").Folders("Misc").Items

但是,只有当我将某些东西移动到特定的" Misc" Archives中的文件夹,我想在将电子邮件移动到任何存档文件夹时触发事件,而不仅仅是" Misc"文件夹中。

我已经尝试了

Set FolderItems = Session.Folders("Archives").Items

但这不起作用 - 没有错误,当我将电子邮件移动到任何文件夹时它不会触发,也不会在Archives中添加/创建新文件夹时触发;所以,我不确定该代码会触发什么。

感谢您提供进一步了解的任何指示!

1 个答案:

答案 0 :(得分:0)

谢谢@ niton - 显然我需要的是有人告诉我这是不可能的! ;)

以下代码会在文件移动到Archive文件夹时提供警报。 (它还会在发生任何其他更改时提供警报,因此,对于经常故意而不是无意中弄乱存档文件夹的人来说,这可能会有点烦人。)

我将以下代码添加到ThisOutlookSession模块并重新启动Outlook,它对我来说就像一个魅力:

Public WithEvents myFolders As Outlook.Folders

Private Sub Application_Startup()
    Set myNS = Application.GetNamespace("MAPI")
    Set myFolders = myNS.Folders("Archives").Folders
End Sub

Private Sub myFolders_FolderChange(ByVal Folder As Outlook.Folder)
    'this triggers when a change occurs in the Archives folder (e.g., a new item is moved into or deleted from some folder in the Archive folder [often inadvertently])
    MsgBox "You have made a change in the Archives folder."
End Sub

在我使用的最终代码中,msgbox会询问我是否要撤消操作。如果我回答[是]那么我使用SendKeys ^ z(ctrl + z)来自动撤消,但如果有人能告诉我如何使用VBA执行撤消命令,我会很高兴,例如,Application.Undo或类似的东西。我无法理解。

感谢@niton指导我{@ 3}} @Ryan Wildry的评论让我this post on Stackoverflow描述了如何使用FolderChange事件以及我修改为适合的一些示例代码我的需要。