









Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Programmazione di base con inserti di visual basic
Tipologia: Guide, Progetti e Ricerche
1 / 17
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!










Il foglio elettronico Excel , così come gli altri prodotti Office di Microsoft, possiede un vero e proprio ambiente di programmazione in linguaggio Visual Basic , che consente di creare proce- dure software dalla fase di editing del testo sorgente fino all’esecuzione del programma. Per attivare questo ambiente si deve utilizzare la scheda Sviluppo , già utilizzata in precedenza per la registrazione delle macro.
In particolare nel seguito useremo i pulsanti:
Visual Basic nel gruppo Codice, per scrivere il testo sorgente della procedura.
Inserisci nel gruppo Controlli per mettere sul foglio elettronico gli oggetti grafici (controlli).
Modalità progettazione , nel gruppo Controlli , per attivare la creazione del codice oppure per uscire dalla progettazione e passare alla prova di esecuzione delle procedure.
Proprietà , nel gruppo Controlli , per impostare le caratteristiche degli oggetti grafici.
Le fasi di lavoro di una tipica sessione di programmazione in Visual Basic sono:
La casella dei controlli consente di scegliere tra i controlli grafici standard che si possono inserire in un progetto Visual Basic per costruire l’interfaccia con l’utente. Gli strumenti grafici sono: caselle di testo, etichette, pulsanti di comando, liste, ecc., cioè tutti gli oggetti tipici dell’interfaccia grafica di Windows.
La scorciatoia da tastiera per passare velocemente dal foglio di Excel alla finestra del codice Visual Basic, e viceversa, è la combinazione dei tasti Alt + F.
Ogni oggetto possiede alcune proprietà che possono essere im- postate dal programmatore, se non vuole mantenere quelle prefissate ( proprietà di default ): esse riguardano la forma, il colore, il nome, la disposizione dell’oggetto. L’elenco delle proprietà di un oggetto è visualizzata facendo clic su di esso con il pulsante destro del mouse e scegliendo Proprietà dal menu di scelta rapida. Op- pure si può fare clic sul pulsante Proprietà nel gruppo Controlli della scheda Sviluppo.
Facendo doppio clic su un oggetto, in modalità progettazione, si attiva la finestra del codice , nella quale si scrivono le istruzioni che devono essere eseguite quando accade un evento sull’oggetto.
Un evento è tipicamente il clic dell’utente sull’oggetto ( Click ), ma può essere anche un doppio clic ( DblClick ) o un passaggio del mouse sopra di esso ( MouseMove ). In sostanza il codice specifica cosa deve fare il computer come risposta alle azioni dell’utente. I possibili eventi vengono visualizzati facendo clic sulla casella a destra nella finestra del codice (casella Routine ), accanto alla casella degli oggetti ( Oggetto ).
Le istruzioni sono raggruppate tra la frase Sub e la frase End Sub , per indicare l’inizio e la fine del sottoprogramma ( Subroutine ) associato all’evento. L’intestazione del sottoprogramma contiene anche il nome dell’oggetto grafico (nell’esempio della figura, CommandButton1 ) e l’evento da gestire (nella figura, Click ).
Oltre alla combinazione di tasti Alt+F11 , per passare dal foglio elettronico alla finestra del codice è possibile anche usare il pulsante Visual Basic nel gruppo Codice della scheda Sviluppo.
Si può anche fare clic con il tasto destro del mouse sopra l’oggetto grafico e selezionare Visualizza codice dal menu di scelta rapida. Dal codice si può poi tornare all’oggetto con la combinazione di tasti Maiuscolo + F.
Codice
Associamo ora al pulsante di comando il codice del sottoprogramma che deve essere eseguito quando l’utente fa un clic sul pulsante di comando. Per passare alla finestra del codice basta fare un doppio clic sul pulsante grafico oppure premere la combinazione dei tasti ALT+F11 dopo aver selezionato l’oggetto grafico. Il codice che realizza il calcolo dell’ipotenusa è il seguente:
Private Sub CommandButton1_Click() ' dichiarazione delle variabili Dim c1, c2, ipot As Single ' acquisizione delle misure dei cateti c1 = Range("B1") c2 = Range("B2") ' calcolo dell ' ipotenusa ipot = Sqr (c1 ^ 2 + c2 ^ 2) ' visualizzazione del risultato Range("B3") = ipot End Sub
Esso rappresenta il sottoprogramma ( Sub ) che viene eseguito quando l’utente provoca l’evento Click sopra il controllo grafico CommandButton.
Vediamo il significato delle istruzioni precedenti:
Dim (dimensione) elenca i nomi delle variabili utilizzate e specifica il tipo con la clausola As ; il tipo Single rappresenta i numeri reali in singola precisione. I tipi di dati utilizzabili in Visual Basic sono spiegati di seguito al progetto.
Range (intervallo) specifica la cella o l’intervallo di celle del foglio elettronico che contengono i dati.
Gli operatori aritmetici sono + , – , ***** , / per le quattro operazioni fondamentali (addizione, sottra- zione, moltiplicazione e divisione), ^ per l’elevamento a potenza, ** per il quoziente della divisione intera, MOD per il resto della divisione intera.
Sqr è la funzione predefinita del linguaggio che calcola la radice quadrata dell’espressione indicata tra le parentesi tonde.
L’ assegnazione dei valori alle variabili o ad un intervallo (indicata con il segno = ) è sempre verso sinistra.
Per esempio, l’istruzione
c1 = Range("B1")
indica che il valore della cella B1 del foglio elettronico è assegnato alla variabile c1 , mentre nell’istruzione
Range("B3") = ipot
il valore della variabile ipot è assegnato alla cella B3 del foglio elettronico.
Le frasi che iniziano con l’apice sono frasi di commento , che servono a documentare le istruzioni del programma. Si osservi anche che nel testo sorgente del programma le parole chiave del linguaggio sono scritte in azzurro e le frasi di commento sono in colore verde. Inoltre le eventuali righe di codice contenenti errori sono evidenziate in rosso.
Proviamo ora il funzionamento del sottoprogramma. Torniamo al foglio elettronico (con la com- binazione di tasti ALT+F11 oppure con un clic sul pulsante del foglio Excel nella barra delle applicazioni) e disattiviamo la Modalità progettazione facendo clic sull’apposito pulsante della scheda Sviluppo. Facendo ora clic sul pulsante di comando con la scritta Calcola ipotenusa , il sottoprogramma viene eseguito e nella cella B3 compare il valore calcolato.
Il problema del calcolo dell’ipotenusa può anche essere risolto utilizzando le istruzioni e le funzioni del linguaggio Visual Basic che consentono l’input dei dati da tastiera e la visualizzazione dei dati attraverso le finestre di dialogo tipiche del sistema operativo Windows. Riscriviamo il sottoprogramma in questo modo:
Private Sub CommandButton1_Click() ' dichiarazione delle variabili Dim c1, c2, ipot As Single ' acquisizione delle misure dei cateti c1 = InputBox ("Primo cateto", "Inserimento dati") c2 = InputBox ("Secondo cateto", "Inserimento dati") ' calcolo dell ' ipotenusa ipot = Sqr (c1 ^ 2 + c2 ^ 2) ' visualizzazione del risultato MsgBox ipot, vbOKCancel, "Ipotenusa" End Sub
In esso InputBox indica la funzione predefinita che acquisisce un dato dall’utente e lo assegna alla varia- bile alla sinistra del segno =. I due parametri della funzione, indicati tra parentesi, rappresentano rispet- tivamente il messaggio inviato all’utente per sollecita- re l’inserimento del dato ( prompt ) e il testo che com- pare nella barra del titolo nella finestra di dialogo.
L’istruzione MsgBox indica la visualizzazione di un risultato o di un messag- gio in una finestra di dialogo: il primo parametro indica la variabile da visualizzare, il secondo vbOKCancel specifica i tipi di pulsanti contenuti nella finestra di dialogo ( OK e Annulla ), il terzo indica il testo che compare nella barra del titolo nella finestra di dialogo.
Il sottoprogramma viene eseguito, come nella versione precedente, facendo clic sul pulsante Calcola ipotenusa dopo aver disattivato la Modalità progettazione. In questa seconda versione si realizza pienamente l’interazione con l’utente attraverso l’interfaccia grafica e non si utilizzano le celle del foglio elettronico, ma solo oggetti grafici: pulsante di comando e finestre di dialogo.
Abbiamo visto nell’esempio precedente che la dichiarazione delle variabili è indicata con la parola chiave Dim. Se si scrivono solo i nomi delle variabili, senza specificare il tipo di dato che esse rappresentano (numero intero o reale, oppure stringa), il tipo di dato viene determinato implici- tamente dal programma sulla base del dato che viene letto nelle celle del foglio elettronico.
Utilizzando il metodo Range , visto nel Progetto 1, è possibile riferirsi a una cella o a un intervallo di celle secondo le modalità utilizzate normalmente nel foglio elettronico, cioè, per esempio, “A1” (riferimento di cella tra virgolette) per indicare la cella che si trova nella colonna A e nella riga 1.
Per esempio:
Range("B:B") Colonna B Range("1:1") Riga 1 Range("A:D") Colonne comprese tra A e D Range("1:1 0 ") Righe comprese tra 1 e 10 Range("1:1,7:7,12:12") Righe 1, 7 e 12 Range("A:A,C:C,G:G") Colonne A, C e G Range("A7") Cella A Range("A1:C5") Celle comprese tra A1 e C Range("A1:C5,G1:H5") Selezione multipla di celle
In alternativa, con la proprietà Cells è possibile utilizzare i numeri di indice per il riferimento alle celle, cioè possiamo riferirci a una singola cella identificandola con una coppia di indici che sono rispettivamente il numero di riga e il numero di colonna della cella.
Per esempio
Cells(3, 2)
indica la cella che si trova sulla riga 3 e sulla colonna B (colonna 2).
Gli indici sono ordinati, prima l’indice di riga e poi l’indice di colonna separati da una virgola. In sostanza Cells(3,2) corrisponde alla notazione Range (“B3”). La proprietà Cells risulta particolarmente efficace per l’esecuzione di cicli all’interno di un intervallo di celle, perché è possibile sostituire il numero di indice con una variabile, come vedremo negli esempi seguenti.
Per gestire i riferimenti a intere righe o colonne, è possibile utilizzare rispettivamente la proprietà Rows o la proprietà Columns.
Per esempio:
Rows(1) Riga 1 Columns(1) Colonna 1 Columns("A") Colonna 1 Rows Tutte le righe del foglio di lavoro Columns Tutte le colonne del foglio di lavoro
Per esempio, il sottoprogramma
Sub Grassetto() Rows(1).Font.Bold = True End Sub
evidenzia in grassetto ( Bold ) tutte le celle della prima riga del foglio elettronico, attraverso l’assegnazione del valore vero ( True ) alla proprietà Bold del tipo di carattere ( Font ) assegnato alle celle della riga 1.
La struttura di selezione viene rappresentata in Visual Basic secondo lo schema:
IF condizione THEN istruzione ELSE istruzione END IF
Se la condizione è vera, viene eseguita l’ istruzione1 , altrimenti viene eseguita l’ istruzione. Istruzione1 e istruzione2 possono indicare, come accade nella maggior parte dei casi, non una sola istruzione, ma un gruppo di istruzioni. La condizione è un’espressione booleana di cui viene valutata la verità: vengono quindi utilizzati i segni del confronto: <, >, =, >=, <=, <> ( diverso ), e gli operatori booleani AND, NOT, OR per costruire espressioni logiche combinando tra loro più condizioni.
Si può osservare che la struttura IF … THEN … ELSE … traduce nel linguaggio Visual Basic la funzione SE del foglio elettronico Excel.
Dati due numeri, diversi tra loro, disporli in ordine crescente.
algoritmo Ordina riga di intestazione
variabili sezione dichiarativa dichiara Primo, Secondo, Minore, Maggiore come numeri interi
Inizio sezione esecutiva immetti Primo immetti Secondo se Primo < Secondo allora assegna Minore = Primo assegna Maggiore = Secondo altrimenti assegna Minore = Secondo assegna Maggiore = Primo fine se fine
La struttura di ripetizione può essere rappresentata in modi diversi. La prima forma riguarda la ripetizione per falso o ripetizione post-condizionale , cioè la ripetizione nella quale il controllo viene fatto in coda, dopo aver eseguito le istruzioni del ciclo.
Questa struttura è tradotta in Visual Basic con le istruzioni DO … LOOP UNTIL.
La sintassi generale è la seguente:
istruzioni LOOP UNTIL condizione
La ripetizione termina quando la condizione scritta vicino a Until diventa vera. La condizione può contenere anche gli operatori booleani AND, OR, NOT.
Generare un numero casuale superiore a 40.
algoritmo NumeroCasuale riga di intestazione
variabili sezione dichiarativa dichiara Numero come numero intero inizio sezione esecutiva esegui genera Numero ripeti finché Numero > 40 scrivi Numero fine
Si osservi che la generazione di numeri casuali compresi in un intervallo è uno strumento importante nella programmazione per testare le funzionalità di un programma e la correttezza del codice, ma anche per disporre di dati numerici di prova senza la necessità di inserimenti da tastiera.
Interfaccia utente
Nel foglio viene predisposta la cella per contenere il numero generato e un pulsante di comando per avviare la procedura di calcolo.
Codice Il programma utilizza la funzione predefinita Rnd ( random ) del linguaggio Visual Basic, che genera numeri reali casuali compresi tra 0 e 1 (1 escluso). Moltiplicando la funzione Rnd per 100, si ottengono quindi numeri casuali compresi tra 0 e 99. Per ottenere numeri casuali compresi tra 1 e 100 si aggiunge 1: Rnd * 100 + 1.
Per ottenere poi numeri interi si applica alla formula la funzione predefinita Int del linguaggio Visual Basic che restituisce la parte intera di un numero reale: Int(Rnd * 100 + 1)
La ripetizione, che genera i numeri e li scrive nella cella B1, si arresta quando il numero generato diventa superiore a 40.
Private Sub GeneraNumero_Click() ' dichiarazione delle variabili Dim numero As Integer ' ripetizione per falso Do ' generazione di un numero casuale ' compreso tra 1 e 1 00 numero = Int ( Rnd * 100 + 1) Loop Until numero > 40 Cells(1, 2) = numero End Sub
Lo stesso problema può essere risolto in forma equivalente usando la ripetizione per vero o ripetizione con controllo in testa , che in Visual Basic è rappresentata con la struttura DO WHILE ... LOOP.
La sintassi generale della struttura è la seguente:
DO WHILE condizione istruzioni LOOP
Interfaccia utente
Nel foglio di lavoro vengono inseriti due pulsanti di comando per visua-lizzare o per nascondere i numeri della tavola pitagorica da 1 a 9.
Ai due pulsanti sono assegnate le seguenti proprietà:
primo pulsante: proprietà Name e proprietà Caption = Visualizza;
secondo pulsante: proprietà Name e proprietà Caption = Nascondi.
Codice Il primo sottoprogramma ( Visualizza ) scrive i valori calcolati nelle celle, inoltre evidenzia in grassetto la prima riga e la prima colonna della tavola, e riduce alla metà la larghezza delle colonne. Quando si decide di nascondere i numeri con il secondo sottoprogramma ( Nascondi ), i numeri vengono tolti dal foglio e la larghezza delle colonne viene riportata alla misura standard.
Private Sub Visualizza_Click() ' dichiarazione delle variabili Dim r, c As Integer ' assegnazione dei valori alle celle For r = 1 To 9 For c = 1 To 9 Cells(r, c) = r * c Next c
Next r ' grassetto alla prima riga e cambiamento di larghezza Rows(1).Font.Bold = True Columns.ColumnWidth = 4 ' grassetto alla prima colonna Columns("A").Font.Bold = True End Sub
Private Sub Nascondi_Click() ' dichiarazione delle variabili Dim r, c As Integer ' toglie i numeri dalle celle For r = 1 To 9 For c = 1 To 9 Cells(r, c) = "" Next c Next r ' cambiamento di larghezza Columns.ColumnWidth = 8. End Sub
Nei progetti precedenti abbiamo utilizzato le righe e le colonne del foglio elettronico per memo- rizzare i dati di input e i risultati dell’elaborazione, oltre a pulsanti di comando (oggetti CommandButton ) per attivare l’avvio delle procedure. In alcuni casi abbiamo anche utilizzato finestre di dialogo per acquisire i dati ( InputBox ) o per visualizzare i risultati ( MsgBox ).
Con il linguaggio Visual Basic è possibile anche costruire sottoprogrammi senza utilizzare le celle del foglio elettronico, ma solo oggetti grafici, tipici del sistema operativo Windows, scegliendoli dalla casella dei Controlli ActiveX : in particolare etichette, caselle di testo e pulsanti di comando, che sono gli elementi grafici più usati per costruire le interfacce grafiche per l’utente ( GUI , Graphical User Interface ).
In questi casi è opportuno nascondere la griglia del foglio elettronico in questo modo: dal menu File scegliere Opzioni e poi Impostazioni avanzate : nella sezione Opzioni di visualizzazione per il foglio di calcolo , togliere il segno di spunta alla voce Mostra Griglia. In alternativa, nella scheda Layout di pagina , gruppo Opzioni del foglio , togliere il segno di spunta all’opzione Visualizza di Griglia.
Il seguente progetto tratta un problema volutamente semplice, per consentire di fissare l’attenzio- ne sugli strumenti che possono essere utilizzati per costruire l’interfaccia grafica.
Sono stati poi inseriti alcuni elementi grafici scegliendoli dalla casella dei Controlli ActiveX:
Per tutte queste etichette è stata cambiata la proprietà BackStyle (stile dello sfondo) impostan- dolo come Transparent (trasparente) in modo da ottenere uno sfondo uguale allo sfondo dell’in- tero foglio; inoltre è stato modificato il font in grassetto con la proprietà Font e il colore del titolo con la proprietà ForeColor; la descrizione dell’etichetta è impostata con la proprietà Caption. Le etichette vanno disposte in modo ordinato e allineato nel piano di lavoro: per far questo occorre selezionare con il mouse gli oggetti tenendo premuto il tasto Ctrl e poi, nella scheda Layout di pagina , gruppo Disponi , fare clic sul pulsante Allinea : applicare due opzioni, prima Allinea al centro verticalmente e poi Distribuisci verticalmente.
Anche le caselle di testo devono essere ben allineate e distanziate con la stessa modalità indicata per le etichette.
Il primo pulsante Calcola attiva la procedura di calcolo dell’area, il pulsante Annulla cancella i dati contenuti nelle caselle di testo, per consentire un nuovo calcolo con dati diversi. Per completare la disposizione degli oggetti, è opportuno allineare anche i pulsanti di comando in modo analogo alle etichette e alle caselle di testo.
Codice
I due sottoprogrammi seguenti rappresentano le istruzioni da eseguire, associate all’evento Click per ciascuno dei due pulsanti di comando:
Private Sub Annulla_Click() TBaseMaggiore = "" TBaseMinore = "" TAltezza = "" TArea = "" End Sub
Private Sub Calcola_Click() TArea = ( Val (TBaseMaggiore) + Val (TBaseMinore)) * TAltezza / 2 End Sub
Si noti l’uso della funzione predefinita Val del linguaggio Visual Basic, che restituisce il valore numerico di una stringa contenente cifre. Il contenuto di una casella di testo ( TextBox ), infatti, è una stringa di caratteri: se non si usasse la funzione Val il risultato dell’addizione produrrebbe semplicemente un accodamento dei caratteri della seconda stringa ai caratteri della prima stringa (somma di stringhe).
La finestra del codice viene usata per inserire, visualizzare e modificare righe di codice. Si possono aprire anche tante finestre di codice, in modo da vedere più finestre contemporanea- mente, e anche per poter fare operazioni di copia e incolla tra una procedura e l’altra.
La finestra comprende due liste:
Selezionando un’azione, nella parte alta della finestra, viene presentata la procedura associata a quell’azione o uno schema generale di procedura che può essere completato. Se nella lista degli oggetti è visualizzata la parola Generale , nella lista delle routine vengono presentate le procedure e le dichiarazioni di carattere generale, per esempio la clausola Option Explicit per la dichiarazione esplicita delle variabili.
Il codice Visual Basic viene inserito ed editato usando la finestra di codice; essa offre al program- matore due supporti importanti: