Eliminare definitivamente MailMessage in Outlook con VBA?
-
12-09-2019 - |
Domanda
Sto cercando un modo per eliminare definitivamente un MailMessage da Outlook 2000 con codice VBA. Mi piacerebbe fare questo senza dover fare un secondo ciclo di svuotare gli elementi eliminati.
In sostanza, sto cercando un codice equivalente al metodo di interfaccia utente di fare clic su un messaggio e colpire SHIFT + Elimina .
C'è una cosa simile?
Soluzione
Prova a spostare in primo luogo quindi eliminandolo (funziona su alcuni patchs nel 2000) o utilizzare RDO o CDO per fare il lavoro per voi (si dovrà installarli)
Set objDeletedItem = objDeletedItem.Move(DeletedFolder)
objDeletedItem.Delete
modo 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
Si potrebbe anche segnare il primo messaggio prima di eliminarlo e il ciclo attraverso cartella Posta eliminata e lo trovo una chiamata dthe eliminare una seconda volta. Mark utilizzando un UserProperty.
objMail.UserProperties.Add "Deleted", olText
objMail.Save
objMail.Delete
ciclo tra ti ha eliminato gli elementi che cercano 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
Altri suggerimenti
So che questo è un vecchio thread, ma dal momento che di recente ho avuto motivo di scrivere una macro che fa questo, ho pensato di condividere. Ho trovato che il metodo Remove sembra essere una cancellazione permanente. Sto usando questo frammento:
While oFilteredItems.Count > 0
Debug.Print " " & oFilteredItems.GetFirst.Subject
oFilteredItems.Remove 1
Wend
Comincio con un elenco di elementi che sono stati filtrati da parte di alcuni criteri. Poi, mi basta eliminare uno alla volta fino a quando non c'è più.
HTH
È possibile utilizzare il seguente approccio, in sostanza si eliminano tutti i messaggi di posta elettronica, come si sta facendo, quindi chiamare questa una linea per svuotare la cartella Posta eliminata. Il codice è in JScript, ma posso tradurre se mi avete veramente bisogno di:)
var app = GetObject("", "Outlook.Application"); //use new ActiveXObject if fails
app.ActiveExplorer().CommandBars("Menu Bar").Controls("Tools").Controls('Empty "Deleted Items" Folder').Execute();
soluzione più semplice di tutti, simile al primo modo:
FindID = deleteme.EntryID
deleteme.Delete
set deleteme = NameSpace.GetItemFromID(FindID)
deleteme.Delete
Fare due volte e sarà andato per sempre, e nessun ciclo prestazioni uccisione. (NameSpace può essere una variabile namespace particolare, se non nel negozio di default.) Nota questo funziona solo se non eliminare attraverso i negozi, che può cambiare l'EntryID o eliminarlo del tutto.