2009-06-23 16 views
1

J'utilise une macro dans Outlook 2003 pour déplacer les emails sélectionnés dans un dossier spécifique. Le déplacement fonctionne, mais malheureusement la date reçue est écrasée à l'heure actuelle. Toute idée sur la façon d'éviter cela.Outlook 2003/VBA Movin E-Mails sans changer la date

J'utilise ce code:

Sub verschiebenInOrdner() 

On Error Resume Next 

    Dim objFolder As Outlook.MAPIFolder, objInbox As Outlook.MAPIFolder 
    Dim objNS As Outlook.NameSpace, objItem As Outlook.MailItem 

    Set objNS = Application.GetNamespace("MAPI") 
    Set objInbox = objNS.GetDefaultFolder(olFolderInbox) 

    Set objFolder = objNS.Folders.Item("2009").Folders.Item("In") 

    If objFolder Is Nothing Then 
     MsgBox "This folder doesn't exist!", vbOKOnly + vbExclamation, "INVALID FOLDER" 
    End If 

    If Application.ActiveExplorer.Selection.Count = 0 Then 
     Exit Sub 
    End If 

    For Each objItem In Application.ActiveExplorer.Selection 
     If objFolder.DefaultItemType = olMailItem Then 
      If objItem.Class = olMail Then 
       objItem.UnRead = False 
       objItem.Move objFolder 
      End If 
     End If 
    Next 

    Set objItem = Nothing 
    Set objFolder = Nothing 
    Set objInbox = Nothing 
    Set objNS = Nothing 
End Sub 

Merci à l'aide de 76mel je suis venu avec ceci:

Sub verschiebenInArchiv() 

Dim Session As Redemption.rDOSession 
Dim objFolder As Redemption.RDOFolder 
Dim objItem As Outlook.MailItem 
Dim objItem2 As Redemption.RDOMail 

Set Session = CreateObject("Redemption.RDOSession") 

Session.Logon 

Set objFolder = Session.Stores.Item("2009").IPMRootFolder.Folders("In") 

If Application.ActiveExplorer.Selection.Count = 0 Then 
    Exit Sub 
End If 

For Each objItem In Application.ActiveExplorer.Selection 
    Set objItem2 = Session.GetMessageFromID(objItem.EntryID, Session.Stores.DefaultStore.EntryID) 
    objItem2.Move objFolder 
Next 

End Sub 

Cela fonctionne quand je suis dans ma boîte de réception. Est-ce que quelqu'un sait comment je peux définir le Store-ID dans GetMessageFromID à l'ID du magasin dans lequel ma sélection est faite?

Editer: Merci 76mel, j'utilise objItem.Parent.StoreID maintenant pour obtenir le StoreID actuel.

+0

Je ne change pas la date pour moi en utilisant Outlook 2003 (11.8118.8132) SP2 –

+0

Comme d'autres l'ont dit, cela ne devrait pas changer la date. Peut-être que votre code actuel est légèrement différent de ce que vous avez cité ici? –

+0

exécutez-vous un autre code qui changerait la date? – 76mel

Répondre

1

Votre droite là a été quelques rapports autour du net disant que cela ne fonctionne pas.

Il semblerait que VB6 ne génère pas d'erreur :(Je pense que la façon d'aborder ce problème serait d'utiliser CDO ou la liberation tierce "Redemption" de defacto. .

M

Mise à jour:. Essayez quelque chose comme ça .. Je n'ai pas VB sur la machine mai ont donc pas testé Mais vous obtiendrez l'idée

Sub verschiebenInOrdner() 

On Error Resume Next 


    Dim objNS As Outlook.NameSpace 
    Dim objRDOSession As Redemption.RDOSession 
    Dim objRDOFolder As Redemption.RDOFolder 
    Dim objItem As Outlook.MailItem 
    Dim objRDOMail As Redemption.RDOMail 


    Set objNS = Application.GetNamespace("MAPI") 
    Set objRDOSession = CreateObject("Redemption.RDOSession") 
    objRDOSession.MAPIOBJECT = objNS.MAPIOBJECT 'or Logon 

    Set objRDOFolder = Session.GetFolderFromPath("<YOUR PATH>") 
    ' do your validation for folder and selection 



    For Each objItem In Application.ActiveExplorer.Selection 
     If objFolder.DefaultItemType = olMailItem Then 
      If objItem.Class = olMail Then 
       Set objRDOMail = objRDOSession.GetMessageFromID(objItem.EntryID) 
       objRDOMail.UnRead = False 
       objRDOMail.Move objRDOFolder 

      End If 
     End If 
    Next 



    Set objItem = Nothing 
    Set objRDOMail = Nothing 
    Set objRDOFolder = Nothing 
    Set objRDOSession = Nothing 
    Set objNS = Nothing 
End Sub 
+0

j'ai essayé de copier le courrier à un rachat. SafeMailItem et déplacez-le ensuite, mais il écrase toujours le ReceivedTime. – computhomas

+0

Ok Safemail fonctionne au même niveau que le MOO, donc le problème est probablement le même. J'utiliserais RDO si vous utilisez Redemption. Créez une RDOSession> Logon> récupérez votre dossier en utilisant GetFolderFromPath et utilisez les entryids de votre sélection pour obtenir RDOMail via la session en utilisant GetMessageFromID. Alors déplacez vous sur le RDOMail. – 76mel

+0

Merci beaucoup, juste un petit détail. S'il vous plaît voir mon edit dans la question. – computhomas

0

Cela ne me change pas la date dans Outlook 2003 non plus. Si c'est un problème permanent pour vous, j'essayerais d'obtenir la date de l'article et de l'écraser après le transfert.

+1

la date est en lecture seule et ne peut pas être défini par le code – computhomas

0

J'ai trouvé la solution: dans le sous-dossier, vous déplacez l'email à, il suffit d'ajouter une colonne pour le champ "date de création" au lieu de "date de réception" et trier en utilisant ce champ ... travail fait!

Reef

Questions connexes