J'essaie de trouver des e-mails à partir de l'heure de réception, mais certaines choses ne veulent pas fonctionner Je n'obtiens aucune erreur mais le msg ne se déplace pas vers le dossier diff
Dim myNameSpace As Outlook.NameSpace Dim myInbox As Outlook.Folder Dim myDestFolder As Outlook.Folder Dim myItems As Outlook.Items Dim myItem As Object Dim myOlApp As New Outlook.Application Set myNameSpace = Outlook.Application.GetNamespace("MAPI") Set myInbox = myNameSpace.Folders(user_email).Folders("RXXX") Set myDestFolder = myInbox.Folders(fDestination) Set myItems = myInbox.Items Set myItem = myItems.Find("[ReceivedTime] = '#" + msg_date + "#'") While TypeName(myItem) <> "Nothing" MsgBox 1 MoveItems = MoveItems + 1 myItem.Move myDestFolder Set myItem = myItems.FindNext Wend Set myNameSpace = Nothing Set myInbox = Nothing Set myItems = Nothing Set myDestFolder = Nothing Set myItem = Nothing
3 Réponses :
Format semble correct, mais des guillemets simples ne doivent pas être présents:
Set myItem = myItems.Find("[ReceivedTime] = #" + msg_date + "#")
Vous ne devez jamais utiliser =
lorsque vous travaillez avec des propriétés DateTime - la condition ne sera jamais satisfaite (même si vous spécifiez la date et l'heure au niveau de la milliseconde) à cause des erreurs d'arrondi. Utilisez toujours une plage
@SQL=(ReceivedTime < '4/17/2020') AND (ReceivedTime > '4/1/2020')
Le format de date est une source majeure de problèmes.
Option Explicit ' Consider this mandatory ' Tools | Options | Editor tab ' Require Variable Declaration ' ' If desperate declare as variant Sub findByReceivedTime_DateRange() Dim myNamespace As Outlook.Namespace Dim mySourceFolder As Outlook.folder Dim myDestFolder As Outlook.folder Dim fDestination As String Dim myItems As Outlook.items Dim myItem As Object Dim msg_dateStart As Date Dim msg_dateEnd As Date Dim msg_dateStartStr As String Dim msg_dateEndStr As String Dim strFilter As String Set myNamespace = Outlook.Application.GetNamespace("MAPI") ' mySourceFolder under mailbox, not under inbox Set mySourceFolder = myNamespace.folders(user_email) Set mySourceFolder = mySourceFolder.folders("RXXX") ' myDestFolder under mySourceFolder fDestination = "TestDest" Set myDestFolder = mySourceFolder.folders(fDestination) Set myItems = mySourceFolder.items myItems.sort "[ReceivedTime]", True Debug.Print myItems(1).ReceivedTime & ": " & myItems(1).Subject Debug.Print ' Test with a number bigger than 12 for the day to verify date format ' Start of the range msg_dateStart = Format(#3/26/2020#, "yyyy/mm/dd") Debug.Print "msg_dateStart...: " & msg_dateStart msg_dateStartStr = CStr(msg_dateStart) Debug.Print "msg_dateStartStr: " & msg_dateStartStr ' For a single day, end of the range is the beginning of the next day msg_dateEnd = Format(#3/27/2020#, "yyyy/mm/dd") Debug.Print "msg_dateEnd.....: " & msg_dateEnd msg_dateEndStr = CStr(msg_dateEnd) Debug.Print "msg_dateEndStr..: " & msg_dateEndStr strFilter = "[ReceivedTime] > '#" & msg_dateStartStr & "#'" Debug.Print strFilter strFilter = strFilter & " AND [ReceivedTime] < '#" & msg_dateEndStr & "#'" Debug.Print strFilter Set myItem = myItems.Find(strFilter) While TypeName(myItem) <> "Nothing" Debug.Print myItem.Subject myItem.Move myDestFolder Set myItem = myItems.FindNext Wend End Sub
Assurez-vous que
msg_date
est au format:aaaa-mm-jj
et nonjj-mm-aaaa
.la date est aaaa-MM-jj hh: mm: ss
Où est msg_date? Évaluer