0
votes

Rechercher un e-mail de ReceivedTime

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 commentaires

Assurez-vous que msg_date est au format: aaaa-mm-jj et non jj-mm-aaaa .


la date est aaaa-MM-jj hh: mm: ss


Où est msg_date? Évaluer


3 Réponses :


0
votes

Format semble correct, mais des guillemets simples ne doivent pas être présents:

Set myItem = myItems.Find("[ReceivedTime] = #" + msg_date + "#")


0 commentaires

0
votes

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')


0 commentaires

0
votes

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


0 commentaires