2016-01-29 68 views
1

我試圖找到根據多個條件,但是我在運行下面的代碼我得到一個錯誤09" 「無法解析Condition.Error」的方式來過濾電子郵件的郵件。該ReceivedDate是2008年8月24日下午9點55分30秒如何篩選使用接收到的時間使用VBA

ReceivedDate = Me.cballocation.Column(1) 
Sender = Me.cballocation.Column(2) 
Subject = Me.cballocation.Column(0) 

sFilter = "[subject] = '" & Subject & "' and DateValue[ReceivedTime]=" & Format$(ReceivedDate, "ddddd h:nn AMPM") & " and " & "[Sender]= '" & Sender & "'" 
Set Ns = ol.GetNamespace("MAPI") 
Set ml = Ns.Folders("MIMUMBAI").Folders("Inbox").Folders("Completed") 
Set ml = ml.Items.Restrict(sFilter) 

回答

0

確實是有過濾字符串如果你用一個錯誤:

sFilter = "[subject] = '" & Subject & "' and DateValue[ReceivedTime]=" & Format$(ReceivedDate, "ddddd h:nn AMPM") & " and " & "[Sender]= '" & Sender & "'" 

你應該使用:

sFilter = "[subject] = '" & Subject & "' and DateValue[ReceivedTime]='" & Format$(ReceivedDate, "ddddd h:nn AMPM") & "' and " & "[Sender]= '" & Sender & "'" 

日期和時間的篩選條件必須作爲字符串傳遞 - 和你失蹤的singlequotes。

+0

現在它拋出另一個錯誤。 「條件無效」 –

1

則DateValue [ReceivedTime]不是有效的條件。您必須使用一個範圍

([ReceivedTime] > Date1) AND ([ReceivedTime] < Date2) 
+0

它拋出一個「條件無效」錯誤 –

+0

你與實際值進行替代日期1和date2?什麼是您傳遞給Restrict的確切字符串? –

0

首先,您需要格式化日期和時間對象,以便Outlook可以理解它以便與實際值進行比較。例如,你可以使用DateTime結構的ToSting方法:

DateTime dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 
          DateTime.Now.Day, 23, 59, 00, 00); 
string dateTimeEnd = dt.ToString("MM/dd/yyyy hh:mm tt"); 
string searchCriteria = "[Start]<=\"" + dateTimeEnd + "\"" + " AND [End]>=\""+ dateTimeStart +"\""; 

您可能會發現,在VB.NET示例代碼下面的文章包含的幫助:

在VBA宏的情況下,你可以使用Format功能。以下是MSDN所述的內容:

日期和時間通常以Date格式存儲,Find和Restrict方法要求將日期和時間轉換爲字符串表示形式。爲確保日期格式符合Microsoft Outlook的要求,請使用格式化功能。以下示例創建一個篩選器以查找1999年1月15日下午3:30後已修改的所有聯繫人。

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