Оповещение пользователя, когда пользователь вручную перемещает электронное письмо в папку архива - PullRequest
0 голосов
/ 17 мая 2018

Я обнаружил, что случайно перемещаю элементы электронной почты в папку «Архив» вместо стандартной папки в MS Outlook.Например, для адреса электронной почты Example@Email.Com я открываю Архив, чтобы найти старое электронное письмо в папке «KeepThis», но затем я забываю свернуть папку «Архив» и поэтому случайно ненароком перевожу какое-то другое сообщение электронной почты позже вПапка Archive / KeepThis, когда я действительно хотел переместить ее в папку Example@Email.Com/KeepThis.

Есть ли способ использовать код VBA для предупреждения пользователя, когда элемент электронной почты перемещается вручнуюв папку архива?

Я безуспешно пытался изменить код с помощью @thims в create-outlook-rule-which-run-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

Это работает , если Я перемещаю элемент электронной почты впапка «Разное» в моей неархивированной учетной записи электронной почты.Ура.

Но я не могу понять, как настроить объект FolderItems для запуска при перемещении электронного письма в любую папку.

(2) Я могу сослаться на общий архивпапка с помощью:

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

Но это срабатывает только в том случае, если я перемещаю что-то в определенную папку «Разное» в Архивах и хочу вызвать событие, когда электронное письмо перемещается в any Архивная папка, а не просто папка «Разное».

Я пробовал

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

, но это не работает - ошибки нет, она просто не срабатывает при перемещениисообщение электронной почты в любую папку, и оно не срабатывает при добавлении / создании новой папки в архивах;Итак, я не уверен, что с этим кодом сработает.

Спасибо за любые указатели, чтобы продвинуться дальше!

1 Ответ

0 голосов
/ 22 мая 2018

Спасибо @ 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 за указание на этот пост в Stackoverflow , в котором был комментарий @Ryan Wildry, который привел меня к этой информации в Microsoft , описывающей, как использовать событие FolderChange вместе с примером кода, который я изменил, чтобы соответствовать моим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...