我正在尝试找到一种基于多个条件过滤电子邮件的方法,但是在运行以下代码时,我收到错误“无法解析条件。错误在”09“。接收日期是8/24/2008 9:下午55:30
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 :(得分:1)
DateValue [ReceivedTime]不是有效条件。您必须使用范围
([ReceivedTime] > Date1) AND ([ReceivedTime] < Date2)
答案 1 :(得分: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 & "'"
日期和时间的过滤条件必须作为字符串传递 - 而您的错过了单引号。
答案 2 :(得分:0)
首先,您需要格式化日期和时间对象,以便Outlook可以理解它与实际值进行比较。例如,您可以使用ToSting
结构的DateTime
方法:
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") & "'"