2013-06-12 64 views
1

我只想與限制法像這樣來過濾郵件我:Outlook.Items限制()奇怪的行爲

  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 = "";不應該叫,因爲我決心永遠不會有項目ReceivedTime的值大於time的條目。 問題是被調用的行,這意味着限制的Items Collection包含它不應包含的條目。

我做錯了什麼或者是Restrict() - 方法剛剛失敗?

回答

2

首先,您正在使用多點表示法。您在循環的每個步驟都調用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 
+0

你的第一個點:這只是用於測試目的(全for循環),這就是爲什麼即時通訊使用最少的代碼。第二點:這是完全的限制,我打算增加更多的限制,這就是爲什麼我從'restriction =「」;;開始並且繼續增加更多限制。但是現在,這條第一線是整個限制。 –

+0

那麼限制日期和接收時間值是什麼,但不符合限制條件但仍然返回? –

+0

限制日期爲2013-06-11 00:00,ReceivedTime爲2013-11-11 11:39。 –