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.
Hinweise
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't
ist, 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/0x0037001f
und 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 filtert, wenn die Subject-Eigenschaft gleich den Wörtern the right stuff
ist, 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.
Ganze Zahl
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
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.