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?

È stato utile?

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

RDO

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top