1

次のように、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 = "";Item には ReceivedTime の値が より大きいエントリがないと判断したため、理論的にはこの行は決して呼び出されるべきではありませんtime。問題は、行が呼び出されることです。これは、制限されたアイテム コレクションに含まれてはならないエントリが含まれていることを意味します。

私は何か間違ったことをしましたか、それともRestrict()メソッドが失敗しただけですか?

4

1 に答える 1

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
于 2013-06-12T19:38:51.610 に答える