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_startswithci_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""'"

对于包含空格、单引号、双引号或百分号字符的命名属性,对这些属性的引用将应用一组不同的转义规则。 有关详细信息,请参阅按命名空间引用属性

日期

尽管日期和时间通常以日期格式存储,但 FindRestrict 方法要求将日期和时间转换为字符串表达形式。 为确保日期的格式满足 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 的项目。

关键字(或类别)

类别字段属于关键字类型,用于保存多个值。 如果以编程方式进行访问,则类别字段的行为与文本字段类似,且字符串必须完全匹配。 文本字符串中的值将通过逗号和空格分隔。 这通常意味着,当关键字字段包含多个值时,不能使用 FindRestrict 方法对关键字字段进行操作。 例如,如果“商务”类别和“商务和社会”类别中各包含一个联系人,则无法轻松使用 FindRestrict 方法检索“商务”类别中的所有项目。 但可循环遍历文件夹中的所有联系人,并使用 Instr 函数测试字符串“商务”是否包含在整个关键字字段中。

注意

一个可能的例外是,如果将 “类别” 字段限制为两个,或者值数较少。 此时,可以使用 FindRestrict 方法结合 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')"

其他注意事项

如果试图通过用户定义的字段使用 FindRestrict 方法,这些字段必须在文件夹中已定义,否则将发生错误。 无法执行“包含”操作。 例如,不能使用 FindRestrict 搜索“主题”字段中包含特定字词的项目。 而应使用 AdvancedSearch 方法,或循环遍历文件夹中的所有项目并使用 InStr 函数在字段内执行搜索操作。 使用 Restrict 方法搜索从特定字符范围开始的项目。 例如,若要搜索姓氏以字母 M 开头的所有联系人,请使用以下筛选器:

sFilter = "[LastName] > 'LZZZ' And [LastName] < 'N'"

另请参阅

Items 对象

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。