我正在寻找一种使用VBA代码永久删除Outlook 2000中的MailMessage的方法。我想这样做,而不必做第二个循环来清空已删除的项目。
基本上,我正在寻找一个等同于点击消息的UI方法并点击 SHIFT + DELETE 的代码。
有这样的事吗?
答案 0 :(得分:11)
先尝试移动它然后删除它(适用于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
您还可以在删除邮件之前先将邮件标记,然后循环显示已删除邮件文件夹,然后再次找到该邮件并再次删除该邮件。使用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
答案 1 :(得分:2)
我知道这是一个旧线程,但由于我最近有理由编写一个执行此操作的宏,我想我会分享。我发现Remove方法似乎是永久删除。我正在使用这个代码段:
While oFilteredItems.Count > 0
Debug.Print " " & oFilteredItems.GetFirst.Subject
oFilteredItems.Remove 1
Wend
我首先列出了按某些条件过滤的项目列表。然后,我一次只删除一个,直到它消失。
HTH
答案 2 :(得分:1)
您可以使用以下方法,基本上您正在删除当前正在执行的所有电子邮件,然后调用此行以清空已删除邮件文件夹。代码在jscript中,但如果你真的需要我,我可以翻译:)
var app = GetObject("", "Outlook.Application"); //use new ActiveXObject if fails
app.ActiveExplorer().CommandBars("Menu Bar").Controls("Tools").Controls('Empty "Deleted Items" Folder').Execute();
答案 3 :(得分:1)
最简单的解决方案,类似于第一种方式:
FindID = deleteme.EntryID
deleteme.Delete
set deleteme = NameSpace.GetItemFromID(FindID)
deleteme.Delete
做两次,它会永远消失,没有性能杀戮循环。 (NameSpace可以是特定的命名空间变量,如果不在默认存储中。)请注意,这仅适用于您不跨商店删除,这可以更改EntryID或完全删除它。
答案 4 :(得分:0)
最近我不得不永久删除所有联系人。这对我有用(Outlook 2016)。您已经在垃圾箱文件夹中获得了对该项目的新引用,否则将显示“已删除”或类似内容。从头开始,最近移动的项目就在那里。然后调用Delete即可实现永久删除。该代码段可以循环使用。
myContacts(i).Move (trashFolder)
trashCount = trashFolder.Items.Count
For j = trashCount To 1 Step -1
Set trashItem = trashFolder.Items(j)
If trashItem.MessageClass = "IPM.Contact" Then
trashItem.Delete
Else
Exit For
End If
Next