我正在寻找一种使用 VBA 代码从 Outlook 2000 中永久删除 MailMessage 的方法。我想这样做而不必进行第二次循环来清空已删除的项目。
本质上,我正在寻找与单击消息并单击SHIFT+的 UI 方法等效的代码DELETE。
有这样的事吗?
尝试先移动它然后删除它(适用于 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.MAPIOBJECT = objItem.Session.MAPIOBJECT
set objMail = objRDOSession.GetMessageFromID(objItem.EntryID>)
objMail.Delete
您也可以先标记该消息,然后再删除它,然后循环遍历已删除的项目文件夹,然后再次调用 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
最简单的解决方案,类似于第一种方式:
FindID = deleteme.EntryID
deleteme.Delete
set deleteme = NameSpace.GetItemFromID(FindID)
deleteme.Delete
做两次,它就会永远消失,并且没有性能杀伤循环。(如果不在默认存储中,NameSpace 可以是特定的命名空间变量。)请注意,这仅在您不跨存储删除时才有效,这可能会更改 EntryID 或将其完全删除。
I know this is an old thread, but since I recently had cause to write a macro that does this, I thought I'd share. I found that the Remove method appears to be a permanent deletion. I'm using this snippet:
While oFilteredItems.Count > 0
Debug.Print " " & oFilteredItems.GetFirst.Subject
oFilteredItems.Remove 1
Wend
I begin with a list of items that have been filtered by some criteria. Then, I just delete one at a time until it's gone.
HTH
您可以使用以下方法,基本上您可以像当前一样删除所有电子邮件,然后调用这一行来清空已删除的项目文件夹。代码在 jscript 中,但如果你真的需要我,我可以翻译 :)
var app = GetObject("", "Outlook.Application"); //use new ActiveXObject if fails
app.ActiveExplorer().CommandBars("Menu Bar").Controls("Tools").Controls('Empty "Deleted Items" Folder').Execute();
最近我不得不永久删除所有联系人。这对我有用(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