Je cherche un moyen de supprimer définitivement un mailMessage à partir de Outlook 2000 avec le code VBA. Je voudrais faire cela sans avoir à faire une seconde boucle pour vider les objets supprimés. p>
Essentiellement, je cherche un code équivalent à la méthode UI de cliquer sur un message et de frapper shift kbd> + Supprimer kbd>. P>.
Y a-t-il une telle chose? P>
5 Réponses :
Essayez de le déplacer Tout d'abord, supprimez-le (fonctionne sur certains correctifs en 2000) ou utilisez RDO ou CDO pour effectuer le travail pour vous (vous devrez les installer)
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
Je préférerais ne pas aller Cdo ou RDO, parce que tout mon point ici était de réduire la complexité du code et je préférerais ne pas continuer à présenter toutes les nouvelles dépendances. Le second est basicaly ce que je fais maintenant. Je suis d'abord (pseudo): pour chaque msg dans la boîte de réception msg.delete '// passe aux éléments supprimés suivant pour chaque msg dans deleteditems msg.delete' // supprime de manière permanente ensuite alors que je voudrais faire, c'est quelque chose comme: Pour chaque msg dans la boîte de réception msg.delete (permanent = vrai) suivant
Il n'y a pas de telle méthode en 2000. Vous devrez créer votre propre fonction dans VBA. Quel est le problème avec la suppression du geste ou votre boucle? est-ce la performance?
Rien de "faux" avec elle, je cherchais juste une façon de le faire plus proprement que de compter sur deux boucles. Merci quand même cependant.
Pour RDO, vous pouvez remplacer la ligne objrdosession.logon avec objrdosession.mapiObject = Application.SessionN.mapiObject
Vous pouvez utiliser l'approche suivante, fondamentalement, vous supprimez tous vos e-mails comme vous le faites actuellement, puis appelez cette ligne pour vider le dossier Éléments supprimé. Le code est dans Jscript, mais je peux traduire si vous avez vraiment besoin de moi pour :)
var app = GetObject("", "Outlook.Application"); //use new ActiveXObject if fails app.ActiveExplorer().CommandBars("Menu Bar").Controls("Tools").Controls('Empty "Deleted Items" Folder').Execute();
+1 Mais j'utiliserais l'ID de FindControl pour vous assurer qu'il fonctionne sur des versions non-anglais d'Outlook.
solution la plus simple de tous, semblable à la première voie:
FindID = deleteme.EntryID deleteme.Delete set deleteme = NameSpace.GetItemFromID(FindID) deleteme.Delete
Cela ne fonctionnera que pour un magasin PST uniquement où l'ID de saisie de message n'est pas modifié lorsqu'il est déplacé vers un dossier différent. Il ne fonctionnera pas le magasin d'échange UN ONU (mis en cache ou en ligne).
Cela a-t-il changé récemment? Je l'ai initialement fait pour les boîtes aux lettres Exchange 2007.
Non, c'est toujours le cas avec les magasins PST VS Exchange.
Je sais que c'est un vieux fil, mais depuis que j'ai récemment eu raison d'écrire une macro qui fait cela, je pensais que je partageais. J'ai trouvé que la méthode Supprimer semble être une suppression permanente. J'utilise cet extrait:
While oFilteredItems.Count > 0 Debug.Print " " & oFilteredItems.GetFirst.Subject oFilteredItems.Remove 1 Wend
Super! Je confirme que cela fonctionne pour moi. J'utilise application.activeexplorer.currentFolder.items.remove (1) sur un dossier de test dans une macro VBA.
Récemment, je devais supprimer de manière permanente tous les contacts. Cela a fonctionné pour moi (Outlook 2016). Vous avez obtenu une nouvelle référence à l'élément du dossier corbeille, sinon il est indiqué "déjà supprimé" ou quelque chose comme ça. Allez-y de la fin et les articles récemment déplacés seront là. Ensuite, appeler Supprimer obtient la suppression permanente. Cet extrait peut être utilisé dans une boucle.
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