J'essaye d'écrire un script VBA pour Outlook 2007 qui déplace le courrier d'un utilisateur vers un dossier "Expiré" s'il a plus de 89 jours. J'ai le code pour faire ceci, mais cela ne semble pas fonctionner pour les emails âgés qui étaient à un groupe de distribution qui inclut l'utilisateur final. Cela fonctionne pour les emails qui viennent d'être envoyés à l'utilisateur final.Les e-mails d'un groupe de distribution ne sont pas des MailItems?
I code combiné, j'ai trouvé en ligne pour a) des e-mails en mouvement quand ils sont un certain nombre de jours anciens (http://www.slipstick.com/developer/macro-move-aged-mail/), et b) récursion dans un dossier pour appliquer le code aux sous-dossiers et (Can I iterate through all Outlook emails in a folder including sub-folders?). Ce code récursif à travers le dossier Boîte de réception et les sous-dossiers pour déplacer tous les messages âgés.
Cela fonctionne plus ou moins, mais pour une raison quelconque, les courriels d'une liste de distribution incluant l'utilisateur final ne sont pas récupérés. Le seul contrôle remarquable est que je
If TypeName(oItem) = "MailItem"
sont des courriels de la liste de distribution non considérés comme MailItems? Si non, comment puis-je m'assurer de les attraper aussi?
Voici le code complet:
Public Sub MoveAgedMail(Item As Outlook.MailItem)
Dim objOutlook As Outlook.Application
Dim objNamespace As Outlook.NameSpace
Dim objSourceFolder As Outlook.MAPIFolder
Dim objVariant As Variant
Dim lngMovedItems As Long
Dim intCount As Integer
Dim intDateDiff As Integer
Dim strDestFolder As String
Dim Folder As Outlook.MAPIFolder
Dim oFolder As Outlook.MAPIFolder
Dim oMail As Outlook.MailItem
Set objOutlook = Application
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objSourceFolder = objNamespace.GetDefaultFolder(olFolderInbox)
' Call processFolder
processFolder objSourceFolder
End Sub
Public Sub processFolder(ByVal oParent As Outlook.MAPIFolder)
Dim oFolder As Outlook.MAPIFolder
Dim oMail As Outlook.MailItem
Dim oItem As Object
Dim intCount As Integer
Dim intDateDiff As Long
Dim objDestFolder As Outlook.MAPIFolder
' "Expired" folder at same level as Inbox for sending aged mail
Set objDestFolder = Session.GetDefaultFolder(olFolderInbox).Parent.Folders("Expired")
For Each oItem In oParent.Items
If TypeName(oItem) = "MailItem" Then
Set oMail = oItem
' Check if email is older than 89 days
intDateDiff = DateDiff("d", oMail.SentOn, Now)
If intDateDiff > 89 Then
' Move to "Expired" folder
oMail.Move objDestFolder
End If
End If
Next oItem
' Recurse through subfolders
If (oParent.Folders.Count > 0) Then
For Each oFolder In oParent.Folders
processFolder oFolder
Next
End If
Set objDestFolder = Nothing
End Sub
Est-ce que les mails problématiques ne réussissent pas le test 'TypeName()'? –
Je pense que c'est la pâte à utiliser pour la boucle Pour reculer d'un pas, puis en utilisant 'For Each 'en déplaçant' mailitems' – 0m3r