Items.Find 方法 (Outlook)
查找并返回满足给定 筛选器的 Microsoft Outlook 项目对象。
语法
表达式。查找 (筛选器)
expression:返回 Items 对象的表达式。
参数
名称 | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
Filter | 必需 | String | 一个字符串,它指定所返回的对象必须满足的条件。 |
返回值
如果调用成功,则返回一个表示 Outlook 项目的 Object 值;如果失败,则返回 Null(在 Visual Basic 中为 Nothing)。
备注
要在 Items 集合中使用内容索引搜索,请使用 Restrict 方法。 如果 Filter 包含内容索引关键字,则 FindRow 将返回错误。 要详细了解内容索引关键字,请参阅使用查询关键字筛选项目。
方法将返回一个错误,其中 筛选器 中具有以下属性:
正文 | LastFirstNoSpaceCompany |
---|---|
子女 | LastFirstSpaceOnlyCompany |
Class | LastFirstNoSpaceAndSuffix |
Companies | MemberCount |
CompanyLastFirstNoSpace | NetMeetingAlias |
CompanyLastFirstSpaceOnly | NetMeetingAutoStart |
ContactNames | NetMeetingOrganizerAlias |
Contacts | NetMeetingServer |
ConversationIndex | NetMeetingType |
DLName | RecurrenceState |
Email1EntryID | ReplyRecipients |
Email2EntryID | ReceivedByEntryID |
Email3EntryID | ReceivedOnBehalfOfEntryID |
EntryID | ResponseState |
HTMLBody | Saved |
IsOnlineMeeting | Sent |
LastFirstAndSuffix | Submitted |
LastFirstNoSpace | VotingOptions |
AutoResolvedWinner | DownloadState |
BodyFormat | IsConflict |
InternetCodePage | MeetingWorkspaceURL |
Permission |
创建 Find 方法和 Restrict 方法的筛选器
根据要筛选的字段类型,筛选器的语法将有所不同。
字符串(适用于文本字段)
筛选文本字段时,既可使用一对单引号 ('),也可使用一对双引号 (") 来分隔作为筛选器一部分的值。 例如,当字段为字符串类型时,下列所有行均可正常使用:
sFilter = "[CompanyName] = 'Microsoft'"
sFilter = "[CompanyName] = ""Microsoft"""
sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)
在 Jet 或 DASL 查询中指定筛选器的过程中,如果使用一对单引号来分隔构成筛选器的字符串,而且该字符串包含另一个单引号或撇号,则应在这个单引号或撇号前面添加一个单引号以用作转义符。 如果使用一对双引号来分隔字符串,则也可使用类似方法。 如果该字符串包含一个双引号,则应在该双引号前面添加一个双引号以用作转义符。
例如,在 DASL 筛选器字符串中,筛选 的 Subject 属性等于 单词 can't
,整个筛选器字符串由一对双引号分隔,嵌入的字符串 can't
由一对单引号分隔。 此筛选器字符串中需要转义三个字符:的起始双引号和结束双引号用于 的属性引用 http://schemas.microsoft.com/mapi/proptag/0x0037001f
,以及单词 can't
的值条件中的撇号。 通过应用适当的转义符,您可将筛选器字符串表示如下:
filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can''t'"
或者,可以使用 chr(34)
函数来表示双引号 (其 ASCII 字符值为 34) 用作转义字符。 通过使用 chr(34)
代替双引号转义符,您可将上一个示例表示如下:
filter = "@SQL= " & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001f" _& Chr(34) & " = " & "'can''t'"
对于使用 ci_startswith 或 ci_phrasematch 运算符的 DASL 查询而言,转义单引号和双引号字符也是必需的。 例如,以下查询可在邮件主题中执行针对 can't
的短语匹配查询:
filter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001E" _& Chr(34) & " ci_phrasematch " & "'can''t'"
另一个示例是一个 DASL 筛选器字符串,该字符串筛选 Subject 属性是否等于单词 the right stuff
,其中单词 stuff
用双引号括起来。 在此情况下,必须通过以下方式对括起的双引号进行转义:
filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff""'"
对于包含空格、单引号、双引号或百分号字符的命名属性,对这些属性的引用将应用一组不同的转义规则。 有关详细信息,请参阅按命名空间引用属性。
日期
尽管日期和时间通常以日期格式存储,但 Find 和 Restrict 方法要求将日期和时间转换为字符串表达形式。 为确保日期的格式满足 Outlook 的要求,请使用 Format 函数。 下面的示例创建一个筛选器,用于查找在 1999 年 1 月 15 日下午 3:30 之后修改过的所有联系人。
sFilter = "[LastModificationTime] > '" & Format("1/15/99 3:30pm", "ddddd h:nn AMPM") & "'"
布尔运算符
布尔运算符、TRUE/ FALSE、YES/NO、ON/OFF 等都不应转换为字符串。 例如,若要确定是否已为联系人启用日记,则可使用以下筛选器:
sFilter = "[Journal] = True"
注意
如果使用引号作为 布尔 字段的分隔符,则空字符串将查找字段为 False 的项,所有非空字符串将查找其字段为 True 的项目。
关键字(或类别)
类别字段属于关键字类型,用于保存多个值。 如果以编程方式进行访问,则类别字段的行为与文本字段类似,且字符串必须完全匹配。 文本字符串中的值将通过逗号和空格分隔。 这通常意味着,当关键字字段包含多个值时,不能使用 Find 和 Restrict 方法对关键字字段进行操作。 例如,如果“商务”类别和“商务和社会”类别中各包含一个联系人,则无法轻松使用 Find 和 Restrict 方法检索“商务”类别中的所有项目。 但可循环遍历文件夹中的所有联系人,并使用 Instr 函数测试字符串“商务”是否包含在整个关键字字段中。
注意
一个可能的例外是,如果将 “类别” 字段限制为两个,或者值数较少。 此时,可以使用 Find 和 Restrict 方法结合 OR 逻辑运算符来检索所有商务联系人。 例如,伪代码) 中的 (:“Business”或“Business,Personal”或“Personal,Business”。类别字符串不区分大小写。
Integer
搜索整数字段时,使用或不使用引号作为分隔符都可以。 以下筛选器将查找使用 Outlook 2000 创建的联系人:
sFilter = "[OutlookInternalVersion] = 92711"
sFilter = "[OutlookInternalVersion] = '92711'"
使用变量作为筛选器的一部分
如 Restrict 方法示例所示,可使用变量中的值作为筛选器的一部分。 以下 Microsoft Visual Basic Scripting Edition (VBScript) 代码示例说明了在筛选器中使用变量的语法。
sFullName = "Dan Wilson"
此方法使用 Chr(34) 来分隔值:
sFilter = "[FullName] = " & Chr(34) & sFullName & Chr(34)
此方法使用双引号来分隔值:
sFilter = "[FullName] = """ & sFullName & """"
使用逻辑运算符作为筛选器的一部分
可以使用的逻辑运算符为 AND、OR 和 NOT。 下面是 Restrict 方法的语句变体,因此你可指定多个条件。
OR:以下代码返回所有类别为“商务”或“个人”的联系人项目。
sFilter = "[Categories] = 'Personal' Or [Categories] = 'Business'"
AND:以下代码检索所有工作单位为 Microsoft 的私人联系人。
sFilter = "[Categories] = 'Personal' And [CompanyName] = 'Microsoft'"
NOT:以下代码检索所有工作单位不是 Microsoft 的私人联系人。
sFilter = "[Categories] = 'Personal' And Not([CompanyName] = 'Microsoft')"
其他注意事项
如果试图通过用户定义的字段使用 Find 和 Restrict 方法,这些字段必须在文件夹中已定义,否则将发生错误。 无法执行“包含”操作。 例如,不能使用 Find 和 Restrict 搜索“主题”字段中包含特定字词的项目。 而应使用 AdvancedSearch 方法,或循环遍历文件夹中的所有项目并使用 InStr 函数在字段内执行搜索操作。 使用 Restrict 方法搜索从特定字符范围开始的项目。 例如,若要搜索姓氏以字母 M 开头的所有联系人,请使用以下筛选器:
sFilter = "[LastName] > 'LZZZ' And [LastName] < 'N'"
另请参阅
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。