Навсегда удалить MailMessage в Outlook с VBA? - PullRequest
8 голосов
/ 10 июля 2009

Я ищу способ навсегда удалить MailMessage из Outlook 2000 с кодом VBA. Я хотел бы сделать это без необходимости делать второй цикл, чтобы очистить удаленные элементы.

По сути, я ищу код, эквивалентный методу пользовательского интерфейса: щелкнуть сообщение и нажать SHIFT + DELETE .

Есть ли такая вещь?

Ответы [ 4 ]

11 голосов
/ 10 июля 2009

Попробуйте сначала переместить его, а затем удалить его (работает с некоторыми исправлениями в 2000 году) или использовать RDO или CDO, чтобы выполнить работу за вас (вам придется установить их)

  Set objDeletedItem = objDeletedItem.Move(DeletedFolder)
  objDeletedItem.Delete

CDO way

Set objCDOSession = CreateObject("MAPI.Session")
objCDOSession.Logon "", "", False, False
Set objMail = objCDOSession.GetMessage(objItem.EntryID, objItem.Parent.StoreID)
objMail.Delete

РДУ

set objRDOSession = CreateObject("Redemption.RDOSession")
objRDOSession.Logon 
set objMail = objRDOSession.GetMessageFromID(objItem.EntryID>)
objMail.Delete

Вы также можете сначала пометить сообщение перед тем, как удалить его, а затем перебрать папку с удаленными элементами и найти его во время удаления во второй раз. Отметьте его, используя свойство пользователя.

objMail.UserProperties.Add "Deleted", olText
objMail.Save
objMail.Delete

Перебирайте удаленные элементы, ищите этого пользователя.

 Set objDeletedFolder = myNameSpace.GetDefaultFolder(olFolderDeletedItems)
    For Each objItem In objDeletedFolder.Items
        Set objProperty = objItem.UserProperties.Find("Deleted")
        If TypeName(objProperty) <> "Nothing" Then
            objItem.Delete
        End If
    Next
2 голосов
/ 14 сентября 2012

Я знаю, что это старая ветка, но так как у меня недавно была причина написать макрос, который делает это, я решил поделиться. Я обнаружил, что метод Remove кажется постоянным удалением. Я использую этот фрагмент:

While oFilteredItems.Count > 0
    Debug.Print "   " & oFilteredItems.GetFirst.Subject
    oFilteredItems.Remove 1
Wend

Я начинаю со списка элементов, которые были отфильтрованы по некоторым критериям. Затем я просто удаляю по одному, пока он не исчезнет.

НТН

1 голос
/ 21 апреля 2010

Самое простое решение, похожее на первый способ:

  FindID = deleteme.EntryID
  deleteme.Delete
  set deleteme = NameSpace.GetItemFromID(FindID)
  deleteme.Delete

Сделайте это дважды, и все пропадет навсегда, и никакой потери производительности не будет. (NameSpace может быть определенной переменной пространства имен, если не в хранилище по умолчанию.) Обратите внимание, что это работает только в том случае, если вы не удаляете через хранилища, что может изменить EntryID или удалить его полностью.

1 голос
/ 21 октября 2009

Вы можете использовать следующий подход, в основном вы удаляете все свои сообщения электронной почты, как в настоящее время, а затем вызываете эту одну строку, чтобы очистить папку удаленных элементов. Код написан на jscript, но я могу перевести, если вам действительно нужно:)

var app = GetObject("", "Outlook.Application"); //use new ActiveXObject if fails

app.ActiveExplorer().CommandBars("Menu Bar").Controls("Tools").Controls('Empty "Deleted Items" Folder').Execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...