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:
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:
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.
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!":
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. Buon lavoro. File scaricabile e consultabile: Erbario.zip 77 Kb
prelevato sul sito www.ennius.altervista.org |