2016-07-11 4 views
0

電子メールオブジェクトを日付でフィルタリングし、配列に基づいてアイテムを返すOutlookマクロがあります。それは今日受け取った電子メールのために完全に働くが、私はそれを昨日受け取った電子メールにフィルターにかけることを試みることに問題がある。今日のフィルタは、次のとおりです。Outlookのアイテム制限付き日付の問題

sFilterは文字列で、これは意図したとおりの項目を返します。以下は私が昨日にフィルタリングしようとしたものですが、正しい項目を返さないものはありません。

sfilter = "[ReceivedTime]>=""&Date(-1) 12:00am&"" AND [ReceivedTime]<= ""&Date() 12:00am&"" " 
tfilter = Format(DateAdd("d", -1, Date), "mm/dd/yyyy") 
rFilter = Format(DateAdd("d", 0, Date), "mm/dd/yyyy") 

私はsFilterのための上限および下限としてtFilterとRFILTERを使用することを意図したが、これはどちらか動作しませんでした。私はDateAddメソッドを使用しようとしましたが、MSDNサイトで機能情報を調べたところ、yesterdays items.Iは返されませんでしたが、この質問には解決策がありましたが、それは役に立たなかった(Outlook .Restrict does not work with Date)。

日付(-1)のメソッドが日付と連動して動作しない理由がわかりません。論理演算子は、MSDNのサイトによればうまく動作するはずです。この問題を理解する上での助けに感謝します。前もって感謝します!

注:引用した下の3つの例は、エラーを返して適切にコンパイルしません。しかし、彼らは意図したようにフィルタリングしません。

答えて

1

昨日のメールは2つの独立した制限付きで見つけることができます。

Private Sub EmailYesterday() 

Dim oOlInb As Folder 
Dim oOlItm As Object 

Dim oOlResults As Object 
Dim i As Long 

Dim sFilter As String 
Dim sFilter2 As String 

Set oOlInb = Session.GetDefaultFolder(olFolderInbox) 

'Filter recent - Lower Bound of the range 
sFilter = "[ReceivedTime]>'" & format(Date - 1, "DDDDD HH:NN") & "'" 

Debug.Print vbCr & sFilter 
Set oOlResults = oOlInb.Items.Restrict(sFilter) 
Debug.Print oOlResults.count & " items." 

If oOlResults.count > 0 Then 
    For i = 1 To oOlResults.count 
     Set oOlItm = oOlResults(i) 
     Debug.Print oOlItm.Subject & " - " & oOlItm.ReceivedTime 
    Next i 
End If 

' Filter range - Upper Bound 
sFilter2 = "[ReceivedTime]<'" & format(Date, "DDDDD HH:NN") & "'" 

Debug.Print vbCr & sFilter; " AND " & sFilter2 

Set oOlResults = oOlResults.Restrict(sFilter2) ' Restrict the Lower Bound result 
Debug.Print oOlResults.count & " items." 

If oOlResults.count > 0 Then 
    For i = 1 To oOlResults.count 
     Set oOlItm = oOlResults(i) 
     Debug.Print oOlItm.Subject & " - " & oOlItm.ReceivedTime 
    Next i 
End If 

ExitRoutine: 
    Set oOlInb = Nothing 
    Set oOlResults = Nothing 
    Debug.Print "Done." 

End Sub 
+0

ありがとうございました!フィルタリングは機能していますが、フィルタに時間を含める方法はありますか?あなたが提供したコードは今日からいくつかのアイテムを返すようです。これは、<今日@現在の時間を返すことを意味しますか?私は上記と同じように時間を追加しようとしましたが、見通しはそれを好まないようです。 – mmoschet

+0

また、ReceivedTime =&Date - 1はアイテムを返しません。私はこれが現在の時間が使用されていることによると推測しています。郵便物の財産に送られた場合、この問題は回避されますか? (https://msdn.microsoft.com/en-us/library/office/aa172005(v=office.11​​).aspx) – mmoschet

+0

最初の考えよりも少し複雑に思えます。フィルタに日付書式を追加しました。私は以前より少し良くテストしたと思う。 – niton