Identificativo articolo: 291161 - Ultima modifica: giovedì 23 novembre 2006 - Revisione: 2.1

OL2002: Utilizzo dei metodi Find e Restrict per il recupero di elementi

Questo articolo è stato precedentemente pubblicato con il codice di riferimento I291161

In questa pagina

Espandi tutto | Chiudi tutto

Sommario

In questo articolo viene illustrato l'uso dei metodi Find e Restrict nel modello di oggetti di Microsoft Outlook. Entrambi i metodi vengono utilizzati per recuperare in fase di programmazione elementi da una cartella sulla base del valore dei campi di Outlook. Nell'articolo vengono affrontati i seguenti argomenti:

I metodi Find e FindNext
Il metodo Restrict
Uso dei tipi di dati con i filtri
Uso di variabili nell'ambito del filtro
Uso di operatori logici nell'ambito del filtro
Domande e problemi frequenti
Domande e problemi frequenti

Informazioni

IMPORTANTE: prima di utilizzare il codice riportato in questo articolo, tenere presente quanto segue:
  • Tutti gli esempi del codice di automazione riportati in questo articolo possono essere eseguiti da Visual Basic o da Visual Basic, Applications Edition.
  • Nel progetto Visual Basic o Visual Basic, Applications Edition è necessario aggiungere un riferimento alla libreria di oggetti Microsoft Outlook 2002.
  • Prima di eseguire gli esempi di codice è necessario aver selezionato una cartella Contatti. Si consiglia di creare una nuova cartella Contatti temporanea da utilizzare per il test e di copiarvi alcuni contatti. In tal modo sarà possibile adattare liberamente i campi in base alle esigenze degli esempi. La cartella potrà quindi essere eliminata.
  • Tutte le singole righe di codice dell'esempio "sFilter" possono essere inserite nelle due procedure di esempio sostituendo le righe di codice sFilter esistenti in tali procedure.
  • Le informazioni risultanti delle procedure di esempio vengono visualizzate nella finestra Immediata dell'editor di Visual Basic. I risultati possono essere personalizzati se si intende sostituire altre righe di codice sFilter.
Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presume che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare procedura, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare procedure atte a soddisfare specifiche esigenze. Se si dispone di esperienza di programmazione limitata, si consiglia di contattare un Microsoft Certified Partner o la filiale Microsoft locale per informazioni sulla consulenza tecnica. Per ulteriori informazioni in merito ai Microsoft Certified Partner, visitare la seguente pagina Web (informazioni in lingua inglese):
https://partner.microsoft.com/global/30000104 (https://partner.microsoft.com/global/30000104)
Per ulteriori informazioni sulle opzioni di supporto disponibili da Microsoft, visitare la seguente pagina Web:
http://www.microsoft.com/italy/support/default.htm (http://www.microsoft.com/italy/support/default.htm)

I metodi Find e FindNext

Il metodo Find viene utilizzato per individuare un singolo elemento in una cartella che corrisponde a criteri di campo specifici.

Se si desidera individuare altri elementi che corrispondono agli stessi criteri, è possibile utilizzare il metodo FindNext per ripetere la ricerca oppure utilizzare ripetutamente il metodo FindNext per individuare tutti gli elementi che corrispondono ai criteri. In tal modo si otterrà la stessa funzionalità del metodo Restrict, trattato più avanti nel presente articolo.

Il seguente esempio di automazione consente di individuare tutti i contatti che lavorano in Microsoft:
Sub FindContacts()
   Dim ol As Outlook.Application
   Dim oItms As Outlook.Items
   Dim sFilter As String
   Dim oItm As Outlook.ContactItem
   
   Set ol = New Outlook.Application

   ' Get the items in the currently selected folder
   Set oItms = ol.ActiveExplorer.CurrentFolder.Items

   ' The filter string to search with
   sFilter = "[CompanyName] = 'Microsoft'"
   
   ' Find the first item
   Set oItm = oItms.Find(sFilter)

   ' Loop through to find additional items
   Do While Not oItm Is Nothing
      Debug.Print oItm.FullName &" (" & oItm.CompanyName & ")"
      Set oItm = oItms.FindNext
   Loop
   
   Set oItm = Nothing
   Set oItms = Nothing
   Set ol = Nothing
End Sub

Il metodo Restrict

Il metodo Restrict consente di applicare un filtro a un insieme Items e di restituire un nuovo insieme contenente tutti gli elementi dell'insieme originale che corrispondono al filtro. Si tratta di un metodo alternativo ai metodi Find e FindNext.

Il seguente esempio di automazione prevede l'uso del metodo Restrict per l'applicazione di un filtro agli elementi dei contatti in modo da individuare solo quelli che lavorano in Microsoft. Il funzionamento è simile a quello dell'esempio del metodo Find/FindNext riportato in precedenza.
Sub RestrictContacts()
   Dim ol As Outlook.Application
   Dim oItms As Outlook.Items
   Dim oResItems As Outlook.Items
   Dim sFilter As String
   Dim oItm As Outlook.ContactItem
   
   Set ol = New Outlook.Application

   ' Get the items in the currently selected folder
   Set oItms = ol.ActiveExplorer.CurrentFolder.Items

   ' The filter string to search with
   sFilter = "[CompanyName] = 'Microsoft'"

   ' Find all items that meet the search criteria
   Set oResItems = oItms.Restrict(sFilter)

   ' Loop through all of the found items
   For Each oItm In oResItems
      Debug.Print oItm.FullName &" (" & oItm.CompanyName & ")"
   Next
      
   Set oItm = Nothing
   Set oItms = Nothing
   Set ol = Nothing
End Sub

Utilizzo di tipi di dati con i filtri

String (per campi Testo)

Quando si effettuano ricerche di campi Testo, è possibile utilizzare un apostrofo ('), oppure le virgolette ("") per delimitare i valori compresi nel filtro. Ad esempio, tutte le seguenti righe funzionano correttamente quando il tipo del campo è String:
sFilter = "[CompanyName] = 'Microsoft'"

sFilter = "[CompanyName] = ""Microsoft"""

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

Data

Sebbene date e orari vengano in genere memorizzati con un formato Data, devono essere convertiti in stringhe per poter essere utilizzati con i metodi Find e Restrict. Per verificare che il formato della data sia quello previsto in Outlook, utilizzare la funzione Format.

Il seguente esempio consente di creare un filtro per la ricerca di tutti i contatti modificati dopo il 15 gennaio 1999 alle 15.30.
sFilter = "[LastModificationTime] > '" & Format("1/15/99 3:30pm", "ddddd h:nn AMPM") & "'"

Operatori Booleani

Gli operatori Booleani, TRUE/FALSE, YES/NO, ON/OFF e così via non devono essere convertiti in stringa. Ad esempio, per stabilire se l'inserimento nel diario è abilitato per i contatti, è possibile utilizzare il seguente filtro:
sFilter = "[Journal] = True"
NOTA: se si utilizzano le virgolette come delimitatori con i campi Booleani, una stringa vuota consentirà di trovare gli elementi i cui campi sono impostati su False e tutte le stringhe non vuote consentiranno di individuare gli elementi i cui campi sono impostati su True.

Parole chiave (campo Categories)

Il campo Categories è di tipo parole chiave, pertanto è progettato in modo da contenere più valori. Se utilizzato in fase di programmazione, il campo Categories si comporta in modo simile a un campo di testo, pertanto la stringa deve corrispondere in modo esatto. I valori nella stringa di testo sono separati da una virgola e da uno spazio.

Ciò significa in genere che non è possibile utilizzare i metodi Find e Restrict su un campo di tipo parole chiave contenente più di un valore. Se ad esempio è presente un solo contatto nella categoria "Business" e un solo contatto nelle categorie "Business" e "Social", non è possibile utilizzare agevolmente i metodi Find e Restrict per recuperare tutte le voci della categoria "Business". È invece possibile eseguire un ciclo in tutti i contatti della cartella e utilizzare la funzione Instr per verificare se la stringa "Business" è contenuta nell'intero campo di tipo parole chiave.

NOTA: una possibile eccezione si verifica se si limita a due o a un numero ridotto di valori il campo Categories. In tal caso è possibile utilizzare i metodi Find e Restrict con l'operatore logico OR per recuperare tutti i contatti di tipo "Business". Ad esempio (in pseudocodice): "Business"OR"Business, Personal"OR"Personal, Business".

Le stringhe relative alla categoria non fanno distinzione tra maiuscolo e minuscolo.

Integer

È possibile ricercare campi di tipo Integer utilizzando o meno le virgolette come delimitatori. I seguenti filtri consentiranno di individuare contatti creati con Outlook 2000:
sFilter = "[OutlookInternalVersion] = 92711"
sFilter = "[OutlookInternalVersion] = '92711'"

Uso di variabili nell'ambito del filtro

Come illustrato nell'esempio del metodo Restrict riportato nel file della Guida in linea di Outlook Visual Basic (Vbaoutl9.chm), è possibile utilizzare valori da variabili nell'ambito del filtro.

Il codice di esempio VBScript riportato di seguito illustra la sintassi relativa all'utilizzo di variabili nell'ambito del filtro.
sFullName = "John Smith"

' 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 di operatori logici nell'ambito del filtro

Gli operatori logici consentiti sono AND, OR e NOT. Di seguito sono riportate le variazioni della clausola per il metodo Restrict che consentono di specificare più criteri.

  • OR: il seguente codice restituisce tutti gli elementi dei contatti la cui categoria è Business o Personal:
    sFilter = "[Categories] = 'Personal' Or [Categories] = 'Business'"
  • AND: Il seguente codice consente di recuperare tutti i contatti personali che lavorano in Microsoft:
    sFilter = "[Categories] = 'Personal' And [CompanyName] = 'Microsoft'"
  • NOT: Il seguente codice consente di recuperare tutti i contatti personali che non lavorano in Microsoft:
    sFilter = "[Categories] = 'Personal' And Not([CompanyName] = 'Microsoft')"

Domande e problemi frequenti

  • Se si prova a utilizzare i metodi Find e Restrict con campi definiti dall'utente, è necessario definire i campi nella cartella. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito (gli articoli con prefisso "Q" contengono informazioni in inglese):
    290656  (http://support.microsoft.com/kb/290656/ ) OL2002: Working With User-defined Fields in Solutions
  • Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito (gli articoli con prefisso "Q" contengono informazioni in inglese): Non esiste alcun modo per eseguire un'operazione "contiene". Ad esempio, non è possibile utilizzare i metodi Find e Restrict per ricercare elementi che contengono una parola specifica nel campo dell'oggetto. È invece possibile effettuare un ciclo in tutti gli elementi della cartella e utilizzare la funzione InStr per eseguire una ricerca in un campo.
  • Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito (gli articoli con prefisso "Q" contengono informazioni in inglese): I metodi Find e Restrict possono essere utilizzati per ricercare elementi la cui lettera iniziale è compresa in un determinato intervallo di caratteri. Ad esempio, per ricercare tutti i contatti in cui il cognome inizia con la lettera M, utilizzare il seguente filtro:
    sFilter = "[LastName] > 'LZZZ' And [LastName] < 'N'"

Riferimenti

Per ulteriori informazioni sulle risorse disponibili e sulle risposte alle domande più frequenti relative alle soluzioni di Microsoft Outlook, vedere il seguente articolo della Microsoft Knowledge Base (gli articoli con prefissi 'Q' contengono informazioni in inglese):
287530  (http://support.microsoft.com/kb/287530/IT/ ) OL2002: Domande relative ai moduli personalizzati e alle soluzioni di Outlook

Le informazioni in questo articolo si applicano a
  • Microsoft Outlook 2002 Standard Edition
Chiavi: 
kbhowto KB291161
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
 

Traduzione articoli

 

Related Support Centers