Макрос Outlook для удаления старых сообщений при получении нового сообщения с темой - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь написать макрос Outlook VB для достижения следующих целей:

  1. Пуски при получении нового электронного письма.

  2. Перейти кпапка внутри папки «Входящие» - temp1.

  3. Проверьте, существует ли существующее письмо, которое соответствует теме этого нового письма.

  4. Удалите старое письмо.

Код:

Option Explicit
Private objNS As Outlook.NameSpace
Private WithEvents objItems As Outlook.Items
Private Sub Application_Start()
    Dim olApp As Outlook.Application
    Dim objWatchFolder As Outlook.Folder
    Set olApp = Outlook.Application
    Set objNS = Application.GetNamespace("MAPI")

    'Set the folder and items to watch:
    Set objWatchFolder = objNS.GetDefaultFolder(olFolderInbox).Folders("temp1")
    Set objItems = objWatchFolder.Items
    Set objWatchFolder = Nothing
End Sub


Private Sub objItems_ItemAdd(ByVal Item As Object)
    Dim intCount As Integer
    Dim objVariant As Variant

    For intCount = objItems.Count To 1 Step -1
    Set objVariant = objItems.Item(intCount)
        If objVariant.Subject = Item.Subject And objVariant.SentOn < Item.SentOn 
        Then
          objVariant.Delete
        Else
           End If
    Next
End Sub

Выпуск:

Макрос не запускается.

Примечания:

  • Обновлены настройки центра управления безопасностью для включения макросов.
  • Добавили этот код в модуль класса
  • Когда я выполняю F5, он не показывает ни одного MACRO, который он может запустить.

Обращайтесь за помощью к специалистам, пожалуйста!

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

(1) Вам необходимо обработать событие NewMailEx класса Application, которое запускается при получении нового элемента в папке «Входящие».Событие NewMailEx возникает, когда новое сообщение поступает в папку «Входящие» и до обработки правила клиента.Вы можете использовать идентификатор записи, возвращенный в массиве EntryIDCollection, чтобы вызвать метод NameSpace.GetItemFromID и обработать элемент.Используйте этот метод с осторожностью, чтобы минимизировать влияние на производительность Outlook.Однако, в зависимости от настроек на клиентском компьютере, после поступления нового сообщения в папку «Входящие» такие процессы, как фильтрация нежелательной почты и правила клиента, которые перемещают новое сообщение из папки «Входящие» в другую папку, могут происходить асинхронно.Не следует предполагать, что после возникновения этих событий вы всегда получите увеличение количества элементов в папке «Входящие» на один элемент.

(2) Похоже, вы уже знаете, как получить подпапкуВходящие:

 Set objWatchFolder = objNS.GetDefaultFolder(olFolderInbox).Folders("temp1")

(3) Чтобы найти предметы с тем же предметом, вам необходимо использовать методы Найти / FindNext или Ограничить класса Items вместо перебора всех элементов в папке.Подробнее об этих методах читайте в следующих статьях:

Также, если вам нужно найти элементы в нескольких папках, вы можете найти AdvancedSearch метод класса Application полезно.Ключевые преимущества использования метода AdvancedSearch в Outlook:

  • Поиск выполняется в другой теме.Вам не нужно запускать другой поток вручную, поскольку метод AdvancedSearch запускает его автоматически в фоновом режиме.
  • Возможность поиска любых типов элементов: почта, встреча, календарь, заметки и т. Д. В любом месте,т.е. выходит за рамки определенной папки.Методы Restrict и Find / FindNext могут применяться к определенной коллекции Items (см. Свойство Items класса Folder в Outlook).
  • Полная поддержка запросов DASL (Пользовательские свойства могут быть использованы для поиска тоже).Подробнее об этом можно прочитать в статье Filtering в MSDN.Для повышения эффективности поиска можно использовать ключевые слова мгновенного поиска, если для магазина включен мгновенный поиск (см. Свойство IsInstantSearchEnabled класса Store).
  • Вы можете остановить процесс поиска в любой момент, используяМетод Stop класса Search.

См. Расширенный поиск в Outlook программным способом: C #, VB.NET для получения дополнительной информации.

(4) Используйте метод Delete для удаления предметов.

0 голосов
/ 03 июня 2018

Событие Items.ItemAdd (Outlook) описывает, как применить событие ItemAdd в модуле Class.Затем вы должны использовать Application_Startup в ThisOutlookSession для инициализации objItems.

То, что у вас есть, - это код для модуля ThisOutlookSession.

0 голосов
/ 01 июня 2018

Вы наблюдаете событие ItemAdd в папке temp1, а не в папке «Входящие».

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