Items.Restrict 方法 (Outlook)
將篩選套用至 Items 集合,傳回新的集合,其中包含符合篩選準則之原始專案的所有專案。
語法
expression。 Restrict
( _Filter_
)
表達 會傳回 Items 物件的運算式。
參數
名稱 | 必要/選用 | 資料類型 | 描述 |
---|---|---|---|
Filter | 必要 | 字串 | 要套用的篩選條件字串運算式。 如需詳細資訊,請參閱 Find 方法。 |
傳回值
Items 集合,表示原始 Items 集合中符合此篩選條件的項目。
註解
這個方法是使用 Find 方法或 FindNext 方法逐一查看集合中特定專案的替代方案。 如果項目的數量很少,Find 或 FindNext 方法會比篩選要快。 如果集合中有大量項目,尤其是要在大型集合中尋找少數項目時,Restrict 方法就特別快速。
注意事項
如果您使用使用者定義欄位做為 Find 或 Restrict 子句的一部分,則使用者定義的欄位必須存在於 資料夾中。 否則,程式碼會產生錯誤,指出欄位未知。 您可以顯示 [欄位 選擇] 並按一下 [ 新增],將欄位新增至資料夾。
這個方法無法搭配下列屬性使用,而且會導致錯誤發生:
Body | LastFirstNoSpaceCompany |
---|---|
Children | LastFirstSpaceOnlyCompany |
Class | LastFirstNoSpaceAndSuffix |
Companies | MemberCount |
CompanyLastFirstNoSpace | NetMeetingAlias |
CompanyLastFirstSpaceOnly | NetMeetingAutoStart |
ContactNames | NetMeetingOrganizerAlias |
連絡人 | NetMeetingServer |
ConversationIndex | NetMeetingType |
DLName | RecurrenceState |
Email1EntryID | ReceivedByEntryID |
Email2EntryID | ReceivedOnBehalfOfEntryID |
Email3EntryID | ReplyRecipients |
EntryID | ResponseState |
HTMLBody | Saved |
IsOnlineMeeting | Sent |
LastFirstAndSuffix | Submitted |
LastFirstNoSpace | VotingOptions |
AutoResolvedWinner | DownloadState |
BodyFormat | IsConflict |
InternetCodePage | MeetingWorkspaceURL |
Permission |
建立 Find 及 Restrict 方法的篩選條件
篩選條件的語法會根據您所篩選的欄位類型而有所不同。
字串 (適用於文字欄位)
篩選文字欄位時,您可以使用一對單引號 () 或一對雙引號 (「) ,來分隔屬於篩選準則一部分的值。 例如,當欄位的類型為 String 時,下列所有行都會正常運作:
sFilter = "[CompanyName] = 'Microsoft'" sFilter = "[CompanyName] = ""Microsoft"""
sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)
在 Jet 或 DASL 查詢中指定篩選時,如果您使用一對單引號來分隔屬於篩選的字串,而且字串包含另一個單引號或簡縮號 (Apostrophe),請在該單引號或簡縮號前面加上一個單引號做為逸出字元。 如果您使用一對雙引號來分隔字串,也請套用相同的方法。 如果字串包含雙引號,請在雙引號前面加上一個雙引號來做為逸出字元。
例如,在篩選 Subject 屬性等 于 單字 can't
的 DASL 篩選字串中,整個篩選字串會以一對雙引號分隔,而內嵌字串 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 方法需要將日期和時間轉換成字串表示。 若要確定日期已如 Microsoft 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"
注意事項
如果使用引號做為 Boolean 欄位的分隔字元,則空白字串會尋找值等於 False 的欄位,而非空白字串則會尋找值為 True 的欄位。
關鍵字 (或類別)
[類別] 欄位屬於類型的關鍵字,設計用來存放多個值。 以程式設計方式存取 [類別] 欄位時,它的行為和 [文字] 欄位相同,而且字串必須完全相符。 文字字串中的值是由逗號及空格分隔。 這通常表示如果關鍵字欄位中包含多個值,您便無法使用 Find 及 Restrict 方法。 例如,如果有一個連絡人屬於 Business 類別,而且有另一個連絡人同時屬於 Business 及 Social 類別,那麼您無法直接使用 Find 及 Restrict 方法來擷取 Business 類別中的所有項目。 不過,您可以逐一查看資料夾中的所有連絡人,並且使用 Instr 函數來測試整個關鍵字欄位中是否包含 "Business" 字串。
注意事項
可能的例外狀況是,如果您將 [類別] 欄位限制為兩個,或是值數目偏低。 然後,您可以使用 Find 和 Restrict 方法搭配 OR 邏輯運算子來擷取所有商務連絡人。 例如, (虛擬程式碼) :「Business」 或 「Business, Personal」 OR 「Personal, Business」。類別字串不區分大小寫。
整數
您可以搜尋具有或不含引號做為分隔符號的 整 數位段。 下列篩選器會尋找使用 Outlook 2000 建立的連絡人:
sFilter = "[OutlookInternalVersion] = 92711" sFilter = "[OutlookInternalVersion] = '92711'"
使用變數做為篩選條件的一部分
如同 Restrict 方法範例的說明,您可以使用變數的值做為篩選條件的一部分。 下列 Microsoft Visual Basic Scripting Edition (VBScript) 程式碼範例將說明使用變數做為篩選條件的一部分的語法。
sFullName = "Dan Wilson"
' This approach uses Chr(34) to delimit the value.
sFilter = "[FullName] = " & Chr(34) & sFullName & Chr(34)
' This approach uses double quotation marks to delimit the value. sFilter = "[FullName] = """ & sFullName & """"
使用邏輯運算元做為篩選條件的一部分
允許使用的邏輯運算元包括 AND、OR 及 NOT。 以下是 Restrict 方法的 子句變化,因此您可以指定多個準則。
OR:下列程式碼會傳回屬於 Business 或 Personal 類別的所有連絡人項目。
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'"
範例
這個 Visual Basic for Applications (VBA) 範例會使用 Restrict 方法來取得 [商務 ] 類別的所有 [收件匣] 專案,並將它們移至 [商務] 資料夾。 若要執行此範例,請建立或確定 [收件匣] 下有名為 'Business' 的子資料夾。
Sub MoveItems()
Dim myNamespace As Outlook.NameSpace
Dim myFolder As Outlook.Folder
Dim myItems As Outlook.Items
Dim myRestrictItems As Outlook.Items
Dim myItem As Outlook.MailItem
Set myNamespace = Application.GetNamespace("MAPI")
Set myFolder = _
myNamespace.GetDefaultFolder(olFolderInbox)
Set myItems = myFolder.Items
Set myRestrictItems = myItems.Restrict("[Categories] = 'Business'")
For i = myRestrictItems.Count To 1 Step -1
myRestrictItems(i).Move myFolder.Folders("Business")
Next
End Sub
這個 Visual Basic for Applications 範例會使用 Restrict 方法,根據專案的 LastModificationTime 屬性,將篩選套用至連絡人項目。
Public Sub ContactDateCheck()
Dim myNamespace As Outlook.NameSpace
Dim myContacts As Outlook.Items
Dim myItems As Outlook.Items
Dim myItem As Object
Set myNamespace = Application.GetNamespace("MAPI")
Set myContacts = myNamespace.GetDefaultFolder(olFolderContacts).Items
Set myItems = myContacts.Restrict("[LastModificationTime] > '01/1/2003'")
For Each myItem In myItems
If (myItem.Class = olContact) Then
MsgBox myItem.FullName & ": " & myItem.LastModificationTime
End If
Next
End Sub
下列 Visual Basic for Applications 範例除了在篩選中示範變數的用法以外,與上述範例是相同的。
Public Sub ContactDateCheck2()
Dim myNamespace As Outlook.NameSpace
Dim myContacts As Outlook.Items
Dim myItem As Object
Dim DateStart As Date
Dim DateToCheck As String
Dim myRestrictItems As Outlook.Items
Set myNameSpace = Application.GetNamespace("MAPI")
Set myContacts = myNameSpace.GetDefaultFolder(olFolderContacts).Items
DateStart = #01/1/2003#
DateToCheck = "[LastModificationTime] >= """ & DateStart & """"
Set myRestrictItems = myContacts.Restrict(DateToCheck)
For Each myItem In myRestrictItems
If (myItem.Class = olContact) Then
MsgBox myItem.FullName & ": " & myItem.LastModificationTime
End If
Next
End Sub
另請參閱
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。