Items.Restrict-Methode (Outlook)

Wendet einen Filter auf die Items-Auflistung an und gibt eine neue Auflistung zurück, die alle Elemente aus dem Original enthält, die dem Filter entsprechen.

Syntax

Ausdruck. Restrict( _Filter_ )

Ausdruck Ein Ausdruck, der ein Element-Objekt zurückgibt.

Parameter

Name Erforderlich/Optional Datentyp Beschreibung
Filter Erforderlich String Ein Filterausdruck, der angewendet werden sollen. Weitere Informationen finden Sie unter der Find-Methode .

Rückgabewert

Eine Items-Auflistung , die die Elemente aus der ursprünglichen Items-Auflistung darstellt, die dem Filter entsprechen.

HinwBemerkungeneise

Diese Methode ist eine Alternative zur Verwendung der Find - oder FindNext-Methode , um bestimmte Elemente in einer Auflistung zu durchlaufen. Die Methoden Find oder FindNext sind schneller als Filtern, wenn nur wenige Elemente vorhanden sind. Die Restrict-Methode ist erheblich schneller, wenn sich eine große Zahl von Elementen in der Auflistung befindet, insbesondere wenn vermutlich nur wenige Elemente in einer umfangreichen Auflistung gefunden werden.

Hinweis

Wenn Sie benutzerdefinierte Felder als Teil einer Find- oder Restrict-Bedingung verwenden, müssen die benutzerdefinierten Felder in dem Ordner vorliegen. Sonst generiert der Code einen Fehler, der darauf hinweist, dass das Feld nicht bekannt ist. Sie können ein Feld zu einem Ordner hinzufügen, indem Sie die Feldauswahl anzeigen und auf Neu klicken.

Diese Methode kann bei den folgenden Eigenschaften nicht verwendet werden und führt zu einem Fehler:

Body LastFirstNoSpaceCompany
Children LastFirstSpaceOnlyCompany
Class LastFirstNoSpaceAndSuffix
Companies MemberCount
CompanyLastFirstNoSpace NetMeetingAlias
CompanyLastFirstSpaceOnly NetMeetingAutoStart
ContactNames NetMeetingOrganizerAlias
Contacts 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
Berechtigung

Filter für die Suchen und Einschränken-Methode erstellen

Die Syntax für den Filter variiert je nach dem Typ des Felds, das Sie filtern möchten.

Zeichenfolge (für Textfelder)

Beim Filtern von Textfeldern können Sie entweder zwei einfache Anführungszeichen (') oder doppelte Anführungszeichen ("), verwenden, um die Werte abzugrenzen, die Teil des Filters sind. Beispielsweise funktionieren alle folgenden Zeilen ordnungsgemäß, wenn das Feld vom Typ String ist:

sFilter = "[CompanyName] = 'Microsoft'" sFilter = "[CompanyName] = ""Microsoft"""  
sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)

Wenn Sie beim Festlegen eines Filters in einer Jet- oder DASL-Abfrage zum Begrenzen einer Zeichenfolge, die Teil des Filter ist, ein Paar einfache Anführungszeichen verwenden und die Zeichenfolge ein weiteres einfaches Anführungszeichen oder ein Apostroph enthält, fügen Sie vor dem einfachen Anführungszeichen oder dem Apostroph ein einfaches Anführungszeichen als Schutzzeichen hinzu. Verwenden Sie einen ähnlichen Ansatz, wenn Sie ein Paar doppelter Anführungszeichen verwenden, um eine Zeichenfolge zu trennen. Wenn die Zeichenfolge ein doppeltes Anführungszeichen enthält, fügen Sie ein doppeltes Anführungszeichen als Schutzzeichen vor dem doppelten Anführungszeichen hinzu.

Beispielsweise wird in der DASL-Filterzeichenfolge, die filtert, dass die Subject-Eigenschaft gleich dem Wort can'tist, die gesamte Filterzeichenfolge durch ein Paar von doppelten Anführungszeichen getrennt, und die eingebettete Zeichenfolge can't wird durch ein Paar einzelner Anführungszeichen getrennt. In dieser Filterzeichenfolge müssen drei Zeichen mit Escapezeichen versehen werden: das beginnende doppelte Anführungszeichen und das endende doppelte Anführungszeichen für den Eigenschaftenverweis von http://schemas.microsoft.com/mapi/proptag/0x0037001fund das Apostroph in der Wertbedingung für das Wort can't. Durch Anwendung der geeigneten Escapezeichen kann die Filterzeichenfolge wie folgt ausgedrückt werden:

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can''t'"

Alternativ können Sie die chr(34) -Funktion verwenden, um das doppelte Anführungszeichen (dessen ASCII-Zeichenwert 34 ist) darzustellen, das als Escapezeichen verwendet wird. Unter Verwendung der chr(34)-Ersetzung für ein doppeltes Anführungszeichen als Escapezeichen können Sie das letzte Beispiel wie folgt ausdrücken:

filter = "@SQL= " & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001f" _  
    & Chr(34) & " = " & "'can''t'"

Das Escapen von einfachen und doppelten Anführungszeichen ist ebenfalls in DASL-Abfragen mit den Operatoren ci_startswith und ci_phrasematch erforderlich. Folgende Abfrage führt beispielsweise eine Begriffvergleichsabfrage für can't im Nachrichtenbetreff aus:

filter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001E" _  
    & Chr(34) & " ci_phrasematch " & "'can''t'"

Ein weiteres Beispiel ist eine DASL-Filterzeichenfolge, die nach der Subject-Eigenschaft filtert, die gleich den Wörtern the right stuffist, wobei das Wort stuff in doppelte Anführungszeichen eingeschlossen wird. In diesem Fall müssen die umschließenden doppelten Anführungszeichen wie folgt escapet werden:

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff""'"

Ein anderer Satz von Schutzregeln gilt für eine Eigenschaftsreferenz für benannte Eigenschaften, die ein Leerzeichen, einfache Anführungszeichen, doppelte Anführungszeichen oder ein Prozentzeichen enthalten. Weitere Informationen finden Sie unter Eigenschaften nach Namespace referenzieren.

Datum

Obwohl Datums- und Uhrzeitangaben in der Regel im Date-Format gespeichert werden, erfordern die Find - und Restrict-Methoden , dass Datum und Uhrzeit in eine Zeichenfolgendarstellung konvertiert werden. Um sicherzustellen, dass das Datum wie von Microsoft Outlook erwartet formatiert ist, verwenden Sie die Funktion Format. Im folgenden Beispiel wird einen Filter erstellt, um alle Kontakte zu finden, die nach dem 15. Januar 1999, 15:30 Uhr, geändert wurden

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

Boolesche Operatoren

Boolesche Operatoren, TRUE/ FALSE, JA/NEIN, EIN/AUS usw. sollten nicht in eine Zeichenfolge konvertiert werden. Um festzustellen, ob das Journaling für Kontakte aktiviert ist, können Sie z. B. diesen Filter verwenden:

sFilter = "[Journal] = True" 

Hinweis

Wenn Sie Anführungszeichen als Trennzeichen in Feldern vom Typ Boolean verwenden, dann werden bei einer leeren Zeichenfolge die Felder gefunden, deren Wert False ist, und durch alle nicht leeren Zeichenfolgen werden Elemente gefunden, deren Felder den Wert True haben.

Keywords (oder Categories)

Das Feld Kategorien ist vom Typ Schlüsselwörter, das für mehrere Werte konzipiert ist. When accessing it programmatically, the Categories field behaves like a Text field, and the string must match exactly. Values in the text string are separated by a comma and a space. This typically means that you cannot use the Find and Restrict methods on a keywords field if it contains more than one value. For example, if you have one contact in the Business category and one contact in the Business and Social categories, you cannot easily use the Find and Restrict methods to retrieve all items that are in the Business category. Instead, you can loop through all contacts in the folder and use the Instr function to test whether the string "Business" is contained within the entire keywords field.

Hinweis

Eine mögliche Ausnahme ist, wenn Sie das Feld Kategorien auf zwei oder eine geringe Anzahl von Werten beschränken. Anschließend können Sie die Methoden Find und Restrict mit dem logischen OPERATOR OR verwenden, um alle Geschäftskontakte abzurufen. Beispiel (in Pseudocode): "Business" ODER "Business, Personal" ODER "Personal, Business". Bei Kategoriezeichenfolgen wird die Groß-/Kleinschreibung nicht beachtet.

Ganzzahl

Sie können nach Integer-Feldern mit oder ohne Anführungszeichen als Trennzeichen suchen. Die folgenden Filter suchen nach Kontakten, die mit Outlook 2000 erstellt wurden:

sFilter = "[OutlookInternalVersion] = 92711" sFilter = "[OutlookInternalVersion] = '92711'"

Verwendung von Variablen als Teil des Filters

Wie das Beispiel mit der Restrict-Methode zeigt, können Werte aus Variablen als Teil des Filters verwendet werden. Das folgende Codebeispiel für Microsoft Visual Basic Scripting Edition (VBScript) zeigt die Syntax, in der Variablen als Teil des Filters verwendet werden.

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 & """"

Verwenden von logischen Operatoren als Teil des Filters

Logische Operatoren, die zulässig sind, sind UND, ODER und NICHT. Im Folgenden finden Sie Variationen der Klausel für die Restrict-Methode , sodass Sie mehrere Kriterien angeben können.

OR: Der folgende Code gibt alle Kontaktelemente zurück, deren Kategorie entweder "Business" oder "Personal" ist.

sFilter = "[Categories] = 'Personal' Or [Categories] = 'Business'"  

AND: Der folgende Code ruft alle persönlichen Kontakte auf, die bei Microsoft arbeiten.

sFilter = "[Categories] = 'Personal' And [CompanyName] = 'Microsoft'"

NOT: Der folgende Code ruft alle persönlichen Kontakte auf, die nicht bei Microsoft arbeiten.

sFilter = "[Categories] = 'Personal' And Not([CompanyName] = 'Microsoft')"

Zusätzliche Hinweise

Wenn Sie die Find- oder Restrict-Methode in benutzerdefinierten Feldern verwenden möchten, müssen die Felder im Ordner definiert sein, da andernfalls ein Fehler auftritt. Es gibt keine Möglichkeit, eine "contains"-Operation auszuführen. Beispielsweise können Sie Sucher oder Einschränken verwenden, um nach Elementen zu suchen, die ein bestimmtes Wort im Feld Betreff enthalten. Sie können stattdessen die Methode AdvancedSearch verwenden, oder durch alle Elemente im Ordner blättern und die Funktion InStr Funktion verwenden, um eine Suche in einem Feld durchzuführen. Verwenden Sie die Restrict-Methode , um nach Elementen zu suchen, die innerhalb eines bestimmten Zeichenbereichs beginnen. Um beispielsweise nach allen Kontakten zu suchen, deren Nachname mit dem Buchstaben M beginnt, verwenden Sie diesen Filter:

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

Beispiel

In diesem beispiel für Visual Basic for Applications (VBA) wird die Restrict-Methode verwendet, um alle Posteingangselemente der Kategorie "Business" abzurufen und in den Ordner "Business" zu verschieben. To run this example, create or make sure a subfolder called 'Business' exists under Inbox.

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

In diesem Visual Basic for Applications Beispiel wird die Restrict-Methode verwendet, um einen Filter auf Kontaktelemente anzuwenden, die auf der LastModificationTime-Eigenschaft des Elements basieren.

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

Das folgende Beispiel für Visual Basic für Applikationen entspricht dem obigen Beispiel mit der Ausnahme, dass es die Verwendung einer Variablen im Filter zeigt.

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

Siehe auch

Items-Objekt

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.