前景.Items Restrict()奇怪的行为

本文关键字:Items Restrict 前景 | 更新日期: 2023-09-27 18:18:06

我只想用Restrict-Method来过滤我的邮件,就像这样:

            restriction += "[ReceivedTime] < '" + ((DateTime)time).ToString("yyyy-MM-dd HH:mm") + "'";
            var count = oFolder.Items.Restrict(restriction).Count;//Cast<object>().ToList();
            for (int i = 0; i < count; i++)
            {
                var crntReceivedTime = ((OutLook.MailItem)oFolder.Items.Restrict(restriction).Cast<object>().ToList()[i]).ReceivedTime;
                if (crntReceivedTime > time)
                {
                    string t = "";
                }
            }

理论上,string t = "";行永远不应该被调用,因为我确定Items的ReceivedTime的值永远不会大于time。问题是行被调用了,这意味着受限制的Items Collection包含了它不应该包含的条目。

我做错了什么还是Restrict()方法只是失败?

前景.Items Restrict()奇怪的行为

首先,您正在使用多个点表示法。在循环的每一步都调用Restrict(即使调用一次也是昂贵的)。调用它一次,缓存返回的(受限制的)Items集合,然后循环遍历该集合中的项。

其次,完整的限制是什么?您正在使用+=在ReceivedTime上添加额外的限制。限制变量的实际值是多少?

编辑:我没有问题从OutlookSpy执行以下脚本(我是它的作者-点击脚本按钮,粘贴脚本,点击运行):
restriction = " [ReceivedTime] < '2011-06-11 00:00' "
set Folder = Application.ActiveExplorer.CurrentFolder
set restrItems = Folder.Items.Restrict(restriction)
for each item in restrItems
  if TypeName(item) = "MailItem" Then
    Debug.Print item.ReceivedTime & " - " & item.Subject
  End If
next