Compartir a través de


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/0x0037001fy 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

Objeto Items

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.