Database Erbario. - dal 04/09/04 pagina vista: volte

Questo programma dovrebbe trovarsi nella sezione "I vs lavori", ma visto che l'ho realizzato io e che presenta soluzioni interessanti per la consultazione dei dati, lo presento in questa sezione fornendo le indicazioni più rilevanti.

Il programma è un normale database su due fogli: il Foglio1 dove sono contenute le piante usate in erboristeria per la fitoterapia (cura con le piante) con i loro nomi, e le caratteristiche della pianta, ed il Foglio2 dove sono contenute le disfunzioni curabili con le piante. Il programma è aggiornabile e modificabile da chiunque (basta aggiungere manualmente nuovi dati) mentre il codice è protetto da password. Potrete richiedere liberamente la password, fornendo i vs dati, nome cognome, indirizzo completo ed e-mail. Il programma è di uso libero per usi personali, e non è cedibile nè vendibile per usi commerciali. La protezione, per quel che vale, ha il solo scopo di limitare l'uso improprio del programma.

Sotto, due immagini delle form principali:

Come è impostato il programma: lanciando il file, Excel verrà ridotto ad icona, sfruttando l'evento WorkBook_Open, e verà aperta la prima UserForm, quella con i nomi delle piante e loro descrizione, questa la routine:

  • Private Sub Workbook_Open()
    Application.WindowState = xlMinimized
     'si riduce Excel a icona
    UserForm1.Show
    'si apre la UerForm1
    Sheets(1).Activate
    'si attiva il foglio 1 relativo ai dati visionati nella userform1
    End Sub

Nell'evento Activate della UserForm1, sono contenute le istruzioni che servono a caricare i dati contenuti nella tabella del foglio1, prima riga di dati, nelle textbox. Per queste istruzioni usiamo un ciclo For Next, che lavorando sugli "insiemi", provvede a reperire per ogni textbox, il dato relativo contenuto nella rispettiva cella sul foglio. Prima vediamo l'istruzione e poi le spiegazioni:

  • Private Sub UserForm_Activate()
    For I = 1 To 6
    UserForm1.Controls("TextBox" & I).Text = Sheets(1).Cells(2, I).Value
    Next
    End Sub

Vediamo di chiarire i concetti: sappiamo che ogni "oggetto" inserito in una UserForm, viene diversificato attraverso un "numero indice" (le TextBox sono "oggetti" ActiveX, e se ne inseriamo vedremo che sono chiamate TextBox1, TextBox2, ecc.ecc.- dove il numero è l'indice che "diversifica" questa "Classe ("Controls")" di oggetti ). Lo stesso avviene anche per le celle di un foglio di lavoro, che non sono "oggetti" ActiveX, ma sono comunque "oggetti" facenti parte dell'insieme celle di un foglio di lavoro, e che vengono identificate attraverso un numero di riga ed un numero di colonna, es: Cells(1, 2) identifica la Cella riga 1, colonna2, quindi la cella B1. Creare quindi un ciclo che scorra le TextBox attraverso il suo numero indice, e contemporaneamente scorra le righe o le colonne delle celle attraverso il numero che identifica le une o le altre, è alla base dell'istruzione appena vista: infatti con For assegniamo al contatore "I" un valore che partirà da 1 e terminerà a 6, per cui ad ogni ciclo avremo : textbox1 uguale al valore della cella riga 2 colonna 1, poi  textbox2 uguale al valore della cella riga 2 colonna 2,  textbox3 uguale al valore della cella riga 2 colonna 3, ecc. fino a  textbox6 uguale al valore della cella riga 2 colonna 6. Come si nota, per ogni textbox avremo il contenuto di una cella, stessa riga, colonna uguale allo stesso numero della textbox. Non è difficile da capire, no? Ovviamente in questo caso facciamo corrispondere sia il numero delle textbox sia il numero delle colonne usate.

Lo stesso ciclo usato per caricare i primi dati, serve anche per la  navigazione per scorrere le righe (e quindi i dati) ,  attraverso l'evento Change dell'oggetto ScrollBar che vediamo nelle immagini (Scorri Sù-Scorri Giù). All'apertura della form, con l'evento Initialize, (che avviene subito dopo l'evento Activate), impostiamo i limiti inferiore e superiore per lo ScrollBar, corrispondenti ai numeri delle righe della nostra tabella: riga iniziale e riga finale, e il limite inferiore di inizio. Poichè potremo non sapere quanto è lunga la tabella, useremo una variabile ( la x )  con cui memorizzare tramite End l'ultima cella occupata nella colonna A (con i numeri dei record o righe), e assegnando la variabile al limite Max.

  • Private Sub UserForm_Initialize()
    x = Sheets(1).[A2].End(xlDown).Row
    'con "x" prendiamo l'ultima riga in cui la colonna A ha una cella occupata
    ScrollBar1.Min = 2 
     'impostiamo il valore corrispondende alla riga da cui inizierà lo sorrimento
    ScrollBar1.Max = x 
     'impostiamo con x il valore finale di scorrimento
    ScrollBar1.Value = 2  '
    impostiamo la riga con cui lo ScrollBar presenterà all'inizio i dati nelle testxbox
    End Sub

e queste sono le istruzioni inserite nell'evento Change dello ScrollBar: impostiamo con la variabile "riga"il valore corrispondente al valore che avrà lo ScrollBar.Value. All'inizio quindi il valore 2 corrisponderà alla riga 2 del foglio di lavoro, e ad ogni spostamento verso il basso (o verso l'alto) muterà di una unità questo valore, che viene quindi ripreso nell'istruzione Cells, con cui rendiamo le textbox(I) lette dal ciclo For..Next uguali alla cella "riga", colonna "I" del ciclo. E come fece dire Sir Artur Conan Doyle ad un suo famoso personaggio: "Elementare, Watson, elementare!":

  • Private Sub ScrollBar1_Change()
    riga = ScrollBar1.Value
    For I = 1 To 6
    UserForm1.Controls("TextBox" & I).Text = Sheets(1).Cells(riga, I).Value
    Next
    End Sub

Le stesse istruzioni del ciclo vengono poi usate anche nella ricerca dei dati, per caricare i dati trovati usando l'operatore Like per reperire scrivendo nella textbox apposita, tutta o solo una parete della parola da cercare. Ho previsto anche una ListBox posta in un'altra userform, chiamata dal pulsante "Visualizza tutti i nomi...", che caricherà una lista in cui appariranno tutti i nomi delle piante presenti nel database. Insomma il resto delle istruzioni sono simili a quelle impiegate in tanti esempi e articoli presenti su questo sito.

Precisazione: le procedure impiegate prevedono l'impostazione della proprietà ShowModal delle 4 UserForm a False. Questa impostazione non è supportata dalla versione 97 di Excel, che genererà un errore non modificabile.
Sperando di aver illustrato un modo diverso nel reperire dati, auguro a tutti

Buon lavoro.

File scaricabile e consultabile:       Erbario.zip    77 Kb

 

prelevato sul sito www.ennius.altervista.org