【问题标题】:How do I add Date range criteria to email import如何将日期范围标准添加到电子邮件导入
【发布时间】:2021-07-15 16:16:53
【问题描述】:

我有一些编码可以将存储的电子邮件的几个文件夹导入 Excel,它可以按预期工作。但是编码会从文件夹中带回所有存储的电子邮件,我希望它只返回上个月的电子邮件。我有一些公式是动态的,会自动更新前几个月的开始和结束日期,我知道我需要在编码中引用这些范围。

我如何将日期标准添加到下面的编码中(如果可能的话)?

TIA

Sub test()

    Dim olApp As Outlook.Application
    Dim olNS As Outlook.Namespace
    Dim olFldr As Outlook.MAPIFolder
    Dim olItem As Object
    Dim olMailItem As Outlook.MailItem
    Dim ws As Worksheet
    Dim iRow As Long
    Dim hdr As Variant
    Dim iFldr As Long
    
    Set ws = ThisWorkbook.Worksheets("EmailImport")
    
    Set olApp = New Outlook.Application
    Set olNS = olApp.GetNamespace("MAPI")
     
    With ws
        iRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With
    
    Application.ScreenUpdating = False
    
    For iFldr = 1 To 18
            Select Case iFldr
                Case 1
                Set olFldr = olNS.Folders("test1").Folders("test1").Folders("test1")
                Set olFldr = olFldr.Folders("test1a")
                Case 2
                Set olFldr = olNS.Folders("test1").Folders("test1").Folders("test1")
                Set olFldr = olFldr.Folders("test1b")
                
            Case Else
        End Select

        For Each olItem In olFldr.Items
            If olItem.Class = olMail Then
                Set olMailItem = olItem
                With olMailItem
                    iRow = iRow + 1
                    If Not .Sender Is Nothing Then ws.Cells(iRow, "A") = .Sender
                    ws.Cells(iRow, "B") = .SenderEmailAddress
                    ws.Cells(iRow, "C") = .SenderName
                    ws.Cells(iRow, "D") = .Subject
                    ws.Cells(iRow, "E") = .ReceivedTime
                    ws.Cells(iRow, "F") = .Categories
                    ws.Cells(iRow, "G") = .TaskCompletedDate
                    ws.Cells(iRow, "H") = olFldr.Name
                End With
            End If
        Next olItem
    Next iFldr

    With ws
        hdr = Array("Sender", "SenderEmailAddress", "SenderName", "Subject", "ReceivedTime", "Categories", "TaskCompletedDate", "Folder")
        .Range("A1").Resize(, UBound(hdr)) = hdr
        .Columns.AutoFit
    End With

End Sub
           

【问题讨论】:

  • 您已经说过日期范围是动态更新的,您想从哪里获取代码的日期?它可以来自您工作表上的某些日期值吗?用户是否需要将其输入到输入框中?您的问题有很多答案,但您需要告诉我们您正在尝试做什么,但它如何不起作用。
  • 是的 - 我已经定义了范围 Range("BOMD") 和 Range("EOMD") - 这些是公式驱动的单元格,分别计算当月的第一天和最后一天。谢谢

标签: vba date if-statement import outlook


【解决方案1】:

您可以计算发送时间和处理时间之间的差异:

Dim Difference As Long    
Difference = DateDiff("d", olItem.SentOn, Now)
If Difference < 30 Then
    ' Do Stuff
End If

如果您想进行日期比较,这应该可以通过相等语句进行,但请确保事先将日期转换为 CDate 值

【讨论】:

    【解决方案2】:

    您可以在ReceivedTime 属性上创建一个限制并将其传递给Items.Restrict(它会返回一个新的受限Items 集合:

    ([ReceivedTime] > '04/01/2021') AND ([ReceivedTime] < '04/21/2021')
    

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2020-12-22
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多