Outlook VBA - Déplacement en masse d'e-mails entre sous-dossiers


1

Je dois régulièrement déplacer une quantité décente d'e-mails (150+) d'un sous-dossier vers un autre. Il y a beaucoup de dossiers dans la boîte aux lettres sur lesquels j'effectue cette tâche. Il semble que ce serait une macro facile à écrire, mais ce que j'ai est sensiblement plus lent que de faire un Ctrl + A, faites glisser vers le dossier de destination. J'ai passé en revue des questions précédentes au sujet du déplacement des email d'Outlook et de la documentation de Microsoft, mais je suis incapable de comprendre comment accomplir le déplacement des email d'une manière rapide et fiable. J'apprécierais toute information sur où je vais mal et s'il y a une autre solution en plus de VBA.

Mon code actuel est ci-dessous. Mon but final serait de parcourir une liste de noms de dossiers (au lieu de sélectionner le dossier).

Merci d'avance.

Sub MoveEmailsToDone() 

On Error Resume Next 

Dim ns As Outlook.NameSpace 
Dim AnalystFolder As Outlook.MAPIFolder 
Dim MoveToFolder As Outlook.MAPIFolder 

Set ns = Application.GetNamespace("MAPI") 

Set AnalystFolder = Application.ActiveExplorer.CurrentFolder 
Set MoveToFolder = ns.Folders("[email protected]").Folders(AnalystFolder.Name & "-DONE") 

For i = AnalystFolder.Items.Count To 1 Step -1 
    AnalystFolder.Items(i).Move MoveToFolder 
Next i 

Set ns = Nothing 
Set AnalystFolder = Nothing 
Set MoveToFolder = Nothing 

End Sub 
0

De l'expérience, Move et Delete sont lents.

http://computer-programming-forum.com/1-vba/17216b85e9c096d3.htm

07 juil 2003
Le code suivant boucle à travers chaque élément de courrier dans un dossier spécifié et déplace l'élément vers un autre dossier. Pour 1100 articles, il faut plus de que 5 min. Il ne bouge pas si lentement quand je sélectionne tout et déplace l'interface utilisateur.

.

Outlook utilise MAPI étendu pour mettre en œuvre une opération de déplacement, à savoir
IMAPIFolder :: CopyMessages() qui prend une liste de EntryIDs, par conséquent, il ne
besoin d'ouvrir chaque message. Le fournisseur du magasin termine l'opération complète sur le serveur
sans envoyer beaucoup de données en arrière comme cela se produit apparemment lorsque
vous exécutez votre code.

Dmitry Streblechenko

https://stackoverflow.com/users/332059/dmitry-streblechenko

DoEvents vous permet d'utiliser Outlook lorsque le code est exécuté.

For i = AnalystFolder.Items.Count To 1 Step -1 

    DoEvents  
    AnalystFolder.Items(i).Move MoveToFolder  

Next i 

MsgBox "MoveEmailsToDone is finally done."