【问题标题】:Find email from ReceivedTime从 ReceivedTime 查找电子邮件
【发布时间】:2020-07-28 03:27:24
【问题描述】:

我尝试从收到的时间查找电子邮件,但有些东西不想工作。我没有收到任何错误,但 msg 没有移动到 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

【问题讨论】:

  • 确保msg_date 的格式如下:yyyy-mm-dd,而不是dd-mm-yyyy
  • 日期是 yyyy-MM-dd hh:mm:ss
  • msg_date 在哪里?价值

标签: vba ms-access outlook


【解决方案1】:

格式似乎正确,但不应出现单引号:

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

【讨论】:

    【解决方案2】:

    在使用 DateTime 属性时,您永远不应该使用= - 由于舍入错误,永远不会满足条件(即使您将日期和时间指定到毫秒级别)。始终使用范围

    @SQL=(ReceivedTime < '4/17/2020') AND (ReceivedTime > '4/1/2020')
    

    【讨论】:

      【解决方案3】:

      日期格式是问题的主要来源。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        • 2018-01-13
        • 2022-01-09
        • 2017-12-24
        • 1970-01-01
        • 2016-11-05
        相关资源
        最近更新 更多