Come automatizzare la selezione dei dati con il VBA
Impariamo come automatizzare la selezione dei dati eseguita dall'utente sui controlli maschera di Access con il VBA Visual Basic for Application
Una delle attività più comunemente automatizzate in un’applicazione database è il filtraggio dei dati.
Particolarmente quando un database contiene migliaia di record, è raro che gli utenti abbiano bisogno di lavorare con più di qualche record per volta.
Se le maschere di modifica visualizzano sempre tutti i record, le prestazioni possono risentirne pesantemente, pertanto è bene mettere l’utente in grado di specificare facilmente unsottoinsieme di record.
In questo tutorial esamineremo tre modi per farlo.
Lavorare con una casella di riepilogo a selezione multipla
In Windows e in Access si lavora continuamente con le caselle di riepilogo.
Per esempio, l’elenco dei file in Gestione risorse di Windows è unacasella di riepilogo e lo è anche la visualizzazione Elenco nella finestra Database di Access.
Nella finestra Database, si può selezionare un solo oggetto per volta dall’elenco. Se si fa clic su un oggetto diverso, quello precedente viene deselezionato. Questa è un casella di riepilogo semplice.
In Gestione risorse di Windows si può selezionare un solo file, selezionare più file non contigui tenendo premuto il tasto Ctrl e facendo clic, oppure selezionare una serie di files tenendo premuto il tasto Maiusc e facendo clic.
Supponiamo che un cliente che usa il database Libri sia interessato a esaminare insieme i dettagli riguardanti diversi libri, ma che abbia raramente bisogno di vedere l’elenco completo.
Se si apre l’applicazione e si fa clic sul pulsante Libri sulla maschera pannello di controllo principale, l’applicazione apre la maschera frmBookList.
Come si vede nella figura che segue, lamaschera frmBookList contiene una casella di riepilogo a selezione multipla.
(Se si è registrati come amministratore si vedranno i pulsanti Modifica o Edit su questa maschera; altrimenti la maschera presenta i pulsanti Mostra o View) (figura 1).
In questa casella di riepilogo, i libri compaiono in ordine alfabetico per titolo e l’elenco è associato al camponumero ISBN nella tabella sottostante.
Si può spostare l’evidenziatore su e giù utilizzando i tasti di direzione.
(Nella maschera frmAuthorList, gli autori sono visualizzati per cognome. Si può battere la prima lettera del cognome di un autore per saltare al primo autore il cui cognome comincia con quella lettera.)
Si può tenere premuto il tasto Maiusc e usare i tasti di direzione per estendere la selezione a più nomi. Infine, si può tener premuto il tasto Maiusc o il tasto Ctrl e usare il mouse per selezionare più nomi.
Nella figura si vedono tre libri selezionati utilizzando il tasto Ctrl e il mouse.
Quando si fa clic sul pulsante Modifica (o Mostra), l’applicazione apre la maschera frmBooks con i soli record che sono statiselezionati.
Come si vede nella figura, la didascalia a destra della casella con il numero dei record indica che sono disponibilitre record e che il recordset è filtrato. (figura 2).
Per vedere come funziona tutto questo, è necessario andare dietro le quinte della maschera frmBookList.
Facciamo clic su Esci nel pannello di controllo principale per tornare alla finestra Database.
SelezioniamofrmBookList e apriamo la maschera in visualizzazione Struttura, come si vede nella figura che segue.
Facciamo clic sul controllo casella di riepilogo e apriamo la sua tabella delle proprietà per vedere come è definita. (figura 3).
Questa casella di riepilogo utilizza tre colonne dalla query qryBooksForCombo, visualizzando nella prima colonna il numero ISBN del libro (la chiave primaria che consente una ricerca veloce), il titolo del libro nella seconda colonna e il numero di edizione nella terza.
L’essenziale in questa casella di riepilogo è che la suaproprietà Selezione multipla è impostata su Estesa.
Con l’impostazione Estesa si ha ilpieno utilizzo delle funzionalità Ctrl-clic o Maiusc-clic che si trovano nella maggior parte delle caselle di riepilogo di Windows.
Il valore predefinito di questa proprietà è Nessuna, che permette di selezionare soltanto un valore per volta.
Se si vogliono selezionare più valori non contigui utilizzando il mouse, la si può impostare su Semplice.
Se si scorre in giù sulleproprietà dell’Evento, si troverà una routine evento definita per Su doppio clic.
Il codice di questa routine evento (che viene chiamata quando si fa doppio clic su una voce nella casella di riepilogo) esegue soltanto la routine cmdSome_Click.
Facciamo clic col pulsante di destra del mouse sul pulsante di comando cmdSome_Click (quello con la dicitura Mostra) e scegliamoGenera evento dal menu di scelta rapida per saltare alla routine cmdSome_Click che fa tutto il lavoro e che riportiamo qui di seguito:
Private Sub cmdSome_Click()
Dim strWhere As String, varItem As Variant
' Se non vi sono voci selezionate
' non vi sono attività da eseguire
If Me!lstBName.ItemsSelected.Count = 0 Then Exit Sub
' Cicla attraverso l'insieme delle voci selezionate
For Each varItem In Me!lstBName.ItemsSelected
' Cattura la colonna ISBN di ciascuna voce selezionata
strWhere = strWhere & Chr$(34) & Me!lstBName.Column(0, varItem) & Chr$(34) & ","
Next varItem
' Elimina la virgola eccedente nella stringa "IN"
strWhere = Left$(strWhere, Len(strWhere) - 1)
' Apre la maschera libri filtrando sui libri selezionati
gstrWhereBook = "[ISBNNumber] IN (" & strWhere & ")"
DoCmd.OpenForm FormName:="frmBooks", WhereCondition:=gstrWhereBook
' Nasconde il pulsante New (Nuovo), ma fa vedere il pulsante Show All (Mostra Tutti)
Forms!frmBooks!cmdAddNew.Visible = False
Forms!frmBooks!cmdShowAll.Visible = True
DoCmd.Close acForm, Me.Name
End Sub
Quando si imposta la proprietà Selezione multipla di una casella di riepilogo su altro da Nessuna, si può esaminare l’insieme ItemsSelected del controllo per stabilire che cosa è stato selezionato (se qualcosa lo è stato).
Nella procedura cmdSome_Click, il codice VBA per prima cosa verifica laproprietà Count dell’insieme ItemsSelected per stabilire se qualche cosa è stato selezionato. Se ilCount è 0, non ci sono azioni da fare, perciò la procedura termina.
L’insieme ItemsSelected è composto da valori variant, ciascuno dei quali fornisce un indice a un elemento evidenziato nella casella di riepilogo.
Il ciclo For Each chiede aVBA di percorrere tutti i valori variant disponibili nell’insieme, uno per volta.
All’interno del ciclo, il codice utilizza il valore variant per reperire il numero ISBN dall’elenco.
Le caselle di riepilogo hanno anche una proprietà Colonna, e si può quindi far riferimento a tutti i valori dell’elenco utilizzando un enunciato tipo
Me!NomeCasellaRiepilogo.Column(NumColonna, NuniRiga)
in cui NomeCasellaRiepiogo è il nome del controllo casella di riepilogo, NumColonna è il numero relativo di colonna (la prima colonna è 0, la seconda è 1, e così via), e NumRiga è il numero relativo di riga (anche questo a cominciare da 0).
I valori variant nell’insieme ItemsSelected restituiscono il numero relativo di riga.
Questo codice VBA usa la colonna 0 e il valore nell’insieme ItemsSelected per accodare a una variabile stringa ciascun numero ISBN selezionato, separato da virgole. Un elenco di valori separati da virgole è l’ideale per una clausola IN.
Dopo aver reperito tutti i numeri ISBN, l’enunciato successivo elimina la virgola rimasta in fondo alla stringa.
Il comandoDoCmd.OpenForm utilizza la stringa risultante, formata da valori separati da virgole, per creare una clausola filtro quando apre la maschera.
Gli ultimi due enunciati impostano ipulsanti Nuovo e Mostra tutti nella maschera frmBooks. Dal momento che stiamo esaminando un elenco filtrato, non ha molto senso aggiungere nuove righe.
(Lo si può fare direttamente con il pulsante Nuovo nella maschera frmBookList, comunque.)
Potrebbe tuttavia essere interessante vedere tutte le righe, perciò questo codice nasconde il pulsante Nuovo e presenta il pulsante Mostra tutti.
Se si esamina la sezione Intestazione maschera della maschera frmBooks in visualizzazione Struttura, si vedrà il pulsante Mostra tutti impilato sopra il pulsante Nuovo. (figura 4).
Esempi di accesso ai dati con VBA Microsoft Access
Tutorials su Microsoft Access
Dr.Maurizio Cucchiara
autore del corso:
"Corso Base di Microsoft Access"
disponibile on line su questo sito
MC2 E-Learning S.a r.l.
Formazione per il Web
http://www.mc2.it/html/access.html
Cerca sul web con Google:
