Vba 日期范围内的Outlook附件数据转储

Vba 日期范围内的Outlook附件数据转储,vba,outlook,Vba,Outlook,我构建了一个脚本,可以下载特定outlook收件箱中的所有附件,但我需要修改它,以便它只抓取特定日期范围内的电子邮件 以下是我下载文件夹中所有附件的代码: Sub DlAttachments() MsgBox ("Cross fingers and click button to start download.") Set objOutlook = CreateObject("Outlook.Application") Set objNamespace = objOutl

我构建了一个脚本,可以下载特定outlook收件箱中的所有附件,但我需要修改它,以便它只抓取特定日期范围内的电子邮件

以下是我下载文件夹中所有附件的代码:

Sub DlAttachments()
    MsgBox ("Cross fingers and click button to start download.")
    Set objOutlook = CreateObject("Outlook.Application")
    Set objNamespace = objOutlook.GetNamespace("MAPI")

    strFolderName = "Special Inbox Admin"
    Set objMailbox = objNamespace.Folders(strFolderName)
    Set objFolder = objMailbox.Folders("Inbox")

    Set colItems = objFolder.Items

    For Each objMessage In colItems
        intCount = objMessage.Attachments.Count
        If intCount > 0 Then
            For i = 1 To intCount
                objMessage.Attachments.Item(i).SaveAsFile "C:\SP_INBOX_DUMP_temp\" & objFolder & "_" & _
                    objMessage.Attachments.Item(i).FileName
            Next
        End If
    Next

    MsgBox ("Download complete. Files downloaded to C:\SP_INBOX_DUMP_temp\")
End Sub

您可以使用对象消息的
SentOn
属性。这会将您的代码更改为:

Dim myDate as Date

For Each objMessage In colItems
    intCount = objMessage.Attachments.Count
    'get the sent date
    sentDate = objMessage.SentOn
    'ref date (adapt format to your system date format dd/mm/yyyy or mm/dd/yyyy)
    myDate = dateValue("31/1/2009")   
    If myDate > sentDate Then
        'do whatever --> Exit For ?
    End If
    If intCount > 0 Then
        For i = 1 To intCount
            objMessage.Attachments.Item(i).SaveAsFile "C:\SP_INBOX_DUMP_temp\" & objFolder & "_" & _
                objMessage.Attachments.Item(i).FileName
        Next
    End If
Next
问候,


Max

与其说是一个解决方案,不如说是一个解决方案:由于无法成功实施Max的解决方案,我将日期范围内的电子邮件复制到了一个单独的文件夹中,并修改了代码以对新文件夹起作用。有点脏,但是,嘿,它可以工作。

使用Restrict方法将收藏中的项目限制为特定日期范围内的项目:

Set colItems = objFolder.Items.Restrict("[ReceivedTime] > '06/01/2011 12:00' And [ReceivedTime] < '06/02/2011 12:00'")
Set colItems=objFolder.Items.Restrict(“[ReceivedTime]>'06/01/2011 12:00'和[ReceivedTime]<'06/02/2011 12:00'))
基本上,这样做是将结果集合中的电子邮件限制为6/1收到的电子邮件。这是air代码,所以您可能需要使用语法


关于Restrict方法的更多信息:

这正是我需要的属性。myDate是否应该类似于:格式(2011年6月29日,“mm/dd/yyyy”)?@David:你只需将它与某种字符串>>“2011年11月10日”>sentDate进行比较,它就为我提供了“2009年12月28日”>“2010年12月22日”。我认为这是将字符串作为字符串进行比较,所以比较运算符给出了它们的字母排序,而不是日期排序。Format()函数也没有帮助。有什么要约会的吗?对不起,我错过了。似乎我们应该使用
dateValue(“3/1/2009”)
,我将编辑我的帖子以使用此功能不会撒谎:我还没有机会测试此功能(我已经超越了项目),但您的解决方案看起来是正确的。接受。我用一个新的解决方案编辑了我的答案(很抱歉耽搁了),在Outlook中的简单测试用例上进行了尝试