Навсегда удалить MailMessage в Outlook с помощью VBA?
Я ищу способ навсегда удалить MailMessage из Outlook 2000 с кодом VBA. Я хотел бы сделать это без необходимости делать второй цикл, чтобы очистить удаленные элементы.
по сути, я ищу код, эквивалентный методу пользовательского интерфейса нажатия сообщения и нажатия SHIFT+удалить.
есть ли такая вещь?
4 ответов
попробуйте сначала переместить его, а затем удалить (работает на некоторых патчах в 2000 году) или использовать RDO или CDO, чтобы выполнить работу за вас (вам придется установить их)
Set objDeletedItem = objDeletedItem.Move(DeletedFolder)
objDeletedItem.Delete
CDO путь
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
вы также можете пометить сообщение первым, прежде чем удалить его и цикл через папку удаленных элементов и найти его вызов dthe удалить во второй раз. Отметьте его с помощью Userproperty.
objMail.UserProperties.Add "Deleted", olText
objMail.Save
objMail.Delete
цикл через удаленные элементы ищут, что userprop
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
вы можете использовать следующий подход, в основном вы удаляете все свои сообщения электронной почты, как вы делаете в настоящее время, а затем вызываете эту одну строку, чтобы очистить папку "Удаленные". Код на JScript, но я могу перевести, если вам действительно нужно мне :)
var app = GetObject("", "Outlook.Application"); //use new ActiveXObject if fails
app.ActiveExplorer().CommandBars("Menu Bar").Controls("Tools").Controls('Empty "Deleted Items" Folder').Execute();
самое простое решение из всех, подобное первому способу:
FindID = deleteme.EntryID
deleteme.Delete
set deleteme = NameSpace.GetItemFromID(FindID)
deleteme.Delete
сделайте это дважды, и он исчезнет навсегда, и никакой цикл убийства производительности. (Пространство имен может быть определенной переменной пространства имен, если не в хранилище по умолчанию.) Обратите внимание, что это работает, только если вы не удаляете через магазины, которые могут изменить EntryID или удалить его полностью.
Я знаю, что это старый поток, но так как у меня недавно была причина написать макрос, который делает это, я думал, что поделюсь. Я обнаружил, что метод Remove кажется постоянным удалением. Я использую этот фрагмент:
While oFilteredItems.Count > 0
Debug.Print " " & oFilteredItems.GetFirst.Subject
oFilteredItems.Remove 1
Wend
Я начинаю со списка элементов, которые были отфильтрованы по некоторым критериям. Затем я просто удаляю по одному, пока он не исчезнет.
HTH