限制项目不返回任何结果,仅为0

时间:2019-06-11 11:52:33

标签: access-vba outlook-vba

我准备了该工具,该工具根据用户限制下载电子邮件附件。它运行良好,但是当我将其实现为其他部门的新员工时,我遇到了一个奇怪的问题,因为限制功能根本无法正常工作。我提供邮箱,文件夹以及具有如下限制条件的详细信息,当我通过循环检查每封电子邮件时,它会返回0,然后返回0。

Set olApp = CreateObject("Outlook.Application")
Set olNamespace = olApp.GetNamespace("MAPI")
Set olMailboxFolder = olNamespace.Folders("FolderA").Folders("FolderB")

strRestriction = "[ReceivedTime] > '" & Format(myStartDate, "DDDDD HH:MM") & "' AND [ReceivedTime] < '" & Format(myEndDate, "DDDDD" & " 23:59") & "'"

Set olEmailFound = olMailboxFolder.Items.Restrict(strRestriction)

使用Outlook /文件夹设置可能有问题吗?如果代码错误,它将无法在任何地方使用,但是只有一个人...

1 个答案:

答案 0 :(得分:0)

您必须使用正确的日期值字符串表达式格式:

不起作用:

strRestriction = "[ReceivedTime] >= #" & Format(myStartDate, "yyyy\/mm\/dd hh\:nn") & "# AND [ReceivedTime] < #" & Format(DateAdd("d", 1, myEndDate), "yyyy\/mm\/dd") & "#"

工作:

文档参考:Items.Restrict method (Outlook)

  

尽管日期和时间通常以日期格式存储,但   查找和限制方法要求转换日期和时间   到字符串表示形式。确保日期格式为   Microsoft Outlook期望使用Format函数。

但是,文档有问题。 AM/PM部分缺少斜杠:

sFilter = "[LastModificationTime] > '" & Format("1/15/99 3:30pm", "ddddd h:nn AMPM") & "'"

在国际环境中似乎有效的是预定义的格式。因此,这适用于丹麦本地化:

Dim StartDate    As String
Dim EndDate      As String
Dim n            As Integer

StartDate = Format(myStartDate, "Short Date") & " " & Format(myStartDate, "Short Time")
EndDate = Format(myEndDate, "Short Date") & " " & Format(myEndDate, "Short Time")
strRestriction = "[ReceivedTime] >= '" & StartDate & "' And [ReceivedTime] < '" & EndDate & "'"

Debug.Print strRestriction
Debug.Print olMailboxfolder.Items.Count

Set olEmailFound = olMailboxfolder.Items.Restrict(strRestriction)
For n = 1 To olEmailFound.Count
    Debug.Print n, olEmailFound.Item(n).ReceivedTime
Next

请注意,如果格式化的字符串中包含秒,则比较将失败。