Método Items.Restrict (Outlook)
Aplica un filtro a la colección Items y devuelve una nueva colección que contiene todos los elementos del original que coinciden con el filtro.
Sintaxis
expresión. Restrict
( _Filter_
)
expresión Una expresión que devuelve un objeto items.
Parámetros
Nombre | Obligatorio/opcional | Tipo de datos | Descripción |
---|---|---|---|
Filter | Obligatorio | String | Una expresión de cadena de filtro para aplicar. Para obtener más información, vea el método Find . |
Valor devuelto
Colección Items que representa los elementos de la colección Items original que coinciden con el filtro.
Comentarios
Este método es una alternativa al uso del método Find o FindNext para recorrer en iteración elementos específicos dentro de una colección. Los métodos Find o FindNext son más rápidos que un filtro si hay un número pequeño de elementos. El método Restrict es mucho más rápido si hay un gran número de elementos en la colección, especialmente si se espera que solo unos pocos elementos se encuentren en una colección grande.
Nota:
Si usa campos definidos por el usuario como parte de una cláusula Find o Restrict , los campos definidos por el usuario deben existir en la carpeta . En caso contrario, el código generará un error que indica que el campo es desconocido. Puede agregar un campo a una carpeta mostrando el Selector de campos y haciendo clic en Nuevo.
Este método no se puede usar y producirá un error con las propiedades siguientes:
Cuerpo | LastFirstNoSpaceCompany |
---|---|
Niños | 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 |
Permiso |
Crear filtros para los métodos Find y Restrict
La sintaxis del filtro varía según el tipo de campo al que se aplique.
Cadena (para campos de texto)
Al filtrar campos de texto, puede usar un par de comillas simples (') o un par de comillas dobles ("), para delimitar los valores que forman parte del filtro. Por ejemplo, todas las líneas siguientes funcionan correctamente cuando el campo es de tipo String:
sFilter = "[CompanyName] = 'Microsoft'" sFilter = "[CompanyName] = ""Microsoft"""
sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)
Al especificar un filtro en una consulta Jet o DASL, si usa un par de comillas simples para delimitar una cadena que forma parte del filtro, y la cadena contiene otra comilla simple o apóstrofo, agregue una comilla simple como carácter de escape antes de la comilla simple o el apóstrofo. Use un enfoque similar si usa un par de comillas dobles para deliminar una cadena. Si la cadena contiene comillas dobles, agregue comillas de este tipo como caracteres de escape antes de ellas.
Por ejemplo, en la cadena de filtro DASL que filtra para que la propiedad Subject sea igual a la palabra can't
, toda la cadena de filtro está delimitada por un par de comillas dobles y la cadena can't
incrustada está delimitada por un par de comillas simples. Hay tres caracteres que debe escape en esta cadena de filtro: la comilla doble inicial y la comilla doble final para la referencia de propiedad de http://schemas.microsoft.com/mapi/proptag/0x0037001f
y el apóstrofo en la condición de valor de la palabra can't
. Al aplicar los caracteres de escape apropiados, puede expresar la cadena del filtro de la siguiente manera:
filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can''t'"
Como alternativa, puede usar la chr(34)
función para representar la comilla doble (cuyo valor de carácter ASCII es 34) que se usa como carácter de escape. Al usar la sustitución chr(34)
para un carácter de escape de comilla doble, puede expresar el último ejemplo de la siguiente manera:
filter = "@SQL= " & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001f" _
& Chr(34) & " = " & "'can''t'"
También se requiere escapar caracteres de comilla simple y doble para las consultas DASL con los operadores ci_startswith o ci_phrasematch. Por ejemplo, la siguiente consulta realiza una consulta de coincidencia de frases para can't
en el tema del mensaje:
filter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001E" _
& Chr(34) & " ci_phrasematch " & "'can''t'"
Otro ejemplo es una cadena de filtro DASL que filtra para que la propiedad Subject sea igual a las palabras the right stuff
, donde la palabra stuff
se incluye entre comillas dobles. En este caso, debe escapar las comillas dobles que encierran la palabra de la siguiente manera:
filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff""'"
Un conjunto diferente de reglas de escape se aplican a una referencia de propiedad para propiedades con nombre que contienen los caracteres de espacio, comilla simple, comilla doble o porcentaje. Para obtener más información, vea Referencia a propiedades por espacio de nombres.
Fecha
Aunque las fechas y horas suelen almacenarse con formato Date, los métodos Find y Restrict requieren que la fecha y hora se conviertan en una representación de cadena. Para asegurarse de que la fecha tiene el formato que Microsoft Outlook espera, use la función Format. El siguiente ejemplo crea un filtro para encontrar todos los contactos que se modificaron después del 15 de enero de 1999 a las 3:30 p. m.
sFilter = "[LastModificationTime] > '" & Format("1/15/99 3:30pm", "ddddd h:nn AMPM") & "'"
Operadores booleanos
Los operadores Booleanos, como TRUE/ FALSE, YES/NO, ON/OFF, etc., no deben convertirse en una cadena. Por ejemplo, para determinar si el registro en diario está habilitado para los contactos, puede usar este filtro:
sFilter = "[Journal] = True"
Nota:
Si utiliza comillas como delimitadores de los campos de tipo Boolean, una cadena vacía buscará los elementos cuyos campos sean False y todas las cadenas no vacías buscarán los elementos cuyos campos sean True.
Palabras clave (o categorías)
El campo Categories es de tipo palabras clave, diseñado para tener varios valores. Cuando se accede mediante programación, el campo Categories se comporta como un campo de texto y la cadena debe coincidir exactamente. Los valores de la cadena de texto se separan mediante una coma y un espacio. Normalmente, esto significa que no puede usar los métodos Find y Restrict en un campo de palabra clave si contiene más de un valor. Por ejemplo, si tiene un contacto en la categoría Business y un contacto en las categorías Business y Social, no podrá usar fácilmente los métodos Find y Restrict para recuperar todos los elementos de la categoría Business. En su lugar, puede recorrer todos los contactos en la carpeta y usar la función Instr para comprobar si la cadena "Business" está en todo el campo de palabras clave.
Nota:
Una posible excepción es si limita el campo Categorías a dos o un número bajo de valores. Entonces, puede usar los métodos Find y Restrict con el operador lógico OR para recuperar todos los contactos de la categoría Business. Por ejemplo (en pseudocódigo): "Business" O "Business, Personal" O "Personal, Business". Las cadenas de categoría no distinguen mayúsculas de minúsculas.
Entero
Puede buscar campos enteros con o sin comillas como delimitadores. Los filtros siguientes buscan los contactos creados con Outlook 2000:
sFilter = "[OutlookInternalVersion] = 92711" sFilter = "[OutlookInternalVersion] = '92711'"
Uso de variables como parte del filtro
Como muestra el ejemplo del método Restrict, puede usar valores de variables como parte del filtro. El siguiente ejemplo de código de Microsoft Visual Basic Scripting Edition (VBScript) muestra una sintaxis que utiliza variables como parte del filtro.
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 & """"
Uso de operadores lógicos como parte del filtro
Los operadores lógicos permitidos son AND, OR y NOT. A continuación se muestran variaciones de la cláusula para el método Restrict para que pueda especificar varios criterios.
OR: el siguiente código devuelve todos los elementos de contacto cuya categoría sea Business o Personal.
sFilter = "[Categories] = 'Personal' Or [Categories] = 'Business'"
AND: el siguiente código recupera todos los contactos personales que trabajan en Microsoft.
sFilter = "[Categories] = 'Personal' And [CompanyName] = 'Microsoft'"
NOT: el siguiente código recupera todos los contactos personales que no trabajan en Microsoft.
sFilter = "[Categories] = 'Personal' And Not([CompanyName] = 'Microsoft')"
Notas adicionales
Si quiere usar los métodos Find o Restrict con campos definidos por el usuario, éstos se deben definir en la carpeta. En caso contrario, se producirá un error. No hay ninguna manera de realizar una operación "contiene". Por ejemplo, no puede usar Find ni Restrict para buscar elementos que tienen una palabra concreta en el campo Subject. En su lugar, puede usar el método AdvancedSearch, o bien puede recorrer todos los elementos de la carpeta y usar la función InStr para realizar una búsqueda dentro de un campo. Use el método Restrict para buscar elementos que comiencen dentro de un determinado intervalo de caracteres. Por ejemplo, para buscar todos los contactos cuyo apellido empiece por la letra M, utilice este filtro:
sFilter = "[LastName] > 'LZZZ' And [LastName] < 'N'"
Ejemplo:
En este ejemplo de Visual Basic para Aplicaciones (VBA) se usa el método Restrict para obtener todos los elementos de la bandeja de entrada de la categoría Business y los mueve a la carpeta Business . Para ejecutar este ejemplo, cree o asegúrese de que existe una subcarpeta denominada "Business" en la bandeja de entrada.
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
En este ejemplo de Visual Basic para Aplicaciones se usa el método Restrict para aplicar un filtro a los elementos de contacto basados en la propiedad LastModificationTime del elemento.
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
El ejemplo siguiente de Visual Basic para Aplicaciones es igual que el anterior, excepto en que muestra el uso de una variable en el filtro.
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
Vea también
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.