Sei sulla pagina 1di 40

Visual Basic for Application

Dispense di M. Bogatto www.istitutoolivetti.it

Lezione 1: L'ambiente di sviluppo VBA

Ambiente di sviluppo VBA Lambiente di sviluppo di Visual Basic For Application facilmente accessibile dal men "Strumenti"; "Macro"; "Visual Basic Editor". Qui avremo modo di progettare e sviluppare programmi in Visual Basic per soddisfare le nostre esigenze, in virt del fatto che gli strumenti sono perfettamente integrati con Microsoft Excel. I progetti realizzabili con VBA possono essere di tre tipi:

Progetto di documento Progetto di modello Progetto di componente aggiuntivo dellapplicazione

Nei "Progetti di documento" tutti i componenti del progetto sono legati alla cartella di lavoro utilizzata al momento, e non andranno ad intaccare ne lapplicazione Excel, ne i suoi modelli generali; quindi il codice rimarr confinato nel file aperto. Nel momento in cui il file cambier posizione il nostro progetto si sposter con esso. Di conseguenza, quando chiuderemo la nostra cartella e ne apriremo una nuova non avremo a disposizione il progetto da noi creato. Nei "Progetti di modello" invece il codice generato associato al modello generale di Microsoft Excel, quindi aprendo una nuova cartella Excel o qualsiasi cartella esistente avremo sempre a disposizione il nostro progetto VBA. I componenti aggiuntivi sono strumenti per ampliare le funzionalit di Microsoft Excel, come, ad esempio, un comando personalizzato richiamabile dalla barra degli strumenti o da una voce di men. Anche questa tipologia di progetto non legata solamente al documento corrente ma direttamente allapplicazione Excel. Nello specifico noi tratteremo solamente i "Progetti di documento".

La piattaforma di sviluppo ACCEDERE ALLEDITOR DI VBA

Lezione 1: L'ambiente di sviluppo VBA

Leditor visual Basic offre numerosi strumenti avanzati di sviluppo e programmazione: Finestra di progetto: mostra lelenco gerarchico dei progetti aperti e di tutti i moduli di codice e finestre di interfaccia appartenenti ad un determinato progetto.

Microsoft Excel oggetti: contiene il codice legato ai fogli ed alla cartella di lavoro.

Lezione 1: L'ambiente di sviluppo VBA

Il generatore di Macro Excel permette la registrazione di macro, cio la registrazione delle azioni eseguite sullinterfaccia di Microsoft Excel, per poi essere ripetute quando ve ne fosse la necessit. Le applicazioni Office offrono un modo molto semplice per creare macro grazie al "Registratore di macro". Quando viene richiamata la registrazione, vengono ripetute le stesse azioni compiute durante la registrazione. In questo modo le istruzioni vengono tradotte in codice Visual Basic e salvate in un modulo di codice interno al progetto della cartella di lavoro Excel corrente. Il codice registrato sottoforma di macro non sar perfettamente adeguato alle esigenze di progettazione, ma spesso sar una utile base di partenza per la scrittura dei programmi del nostro progetto, che in seguito verr spostato e/o modificato grazie alleditor di Visual Basic. Vediamo una semplice dimostrazione: 1. Apriamo un nuovo documento di Microsoft Excel. Dalla voce "Macro" del men "Strumenti" selezioniamo "Registra nuova macro".

2. Sulla finestra "Registra macro" Immettere un nome per la macro ad esempio nella casella Nome macro assegniamo il nome "INTESTAZIONE" e clicchiamo "OK".

Lezione 1: L'ambiente di sviluppo VBA

Specificare una lettera quale primo carattere del nome della macro. Per i caratteri successivi al primo possibile utilizzare lettere, numeri o caratteri di sottolineatura. Non consentito lutilizzo di spazi. possibile separare le parole utilizzando un carattere di sottolineatura. Per eseguire la macro mediante la pressione di un tasto di scelta rapida, immettere una lettera nella casella Scelta rapida da tastiera. possibile utilizzare CTRL+ lettera, per lettere minuscole oppure CTRL+MAIUSC+ lettera, per lettere maiuscole, dove lettera una lettera qualsiasi della tastiera. Non consentito utilizzare un numero o un carattere speciale, quale @ o #, come lettera del tasto di scelta rapida. Quando la cartella di lavoro che contiene la macro aperta, il tasto di scelta rapida avr la precedenza sui tasti di scelta rapida predefiniti di Microsoft Excel. Nella casella Memorizza macro in selezionare la posizione in cui si desidera memorizzare la macro. Per aggiungere una descrizione alla macro, digitarla nella casella Descrizione. Scegliere OK.

3. A questo punto apparir sul foglio un pulsante con un quadrattino blu il quale indica che iniziata la registrazione. 4. impostare lintestazione della pagina dal menu File Imposta pagina

si apre la finestra da cui, selezionando la scheda intestazione/pi di pagina , ciccando personalizza intestazione possibile inserire i dati desiderati.

Lezione 1: L'ambiente di sviluppo VBA

A questo punto abbiamo creato una Macroistruzione, visibile selezionando "Macro" dalla voce "Macro" del men "Strumenti". 5. Selezioniamo la Macro e clicchiamo "Modifica". Entreremo nellEditor di Visual Basic dove potremo notare il nuovo modulo generico contenente il codice di funzionamento delle macro: "INTESTAZIONE ".

6. Torniamo al foglio Excel, apriamo il registratore di macro e scriviamo un numero nella cella B2; 7. in modo analogo registriamo una macro che cancelli la cella B2. 8. verifico che le macro siano state scritte in modo analogo al precedente oppure aprendo leditor di VBA e selezionando il modulo. In esso compaiono le tre macro registrate. Il modulo di codice il luogo dove viene scritto il codice Visual Basic. Esistono tre tipi di moduli di codice: generici, di classe e di userform. Il modulo di codice ora compilato generico.

9. Associamo

le

macro

appena

create

due

pulsanti

di

comando.

Lezione 1: L'ambiente di sviluppo VBA


Inseriamo la barra degli strumenti "Moduli" dal men "Visualizza", "barra degli

strumenti".

Clicchiamo licona relativa al pulsante e tracciamo un pulsante sul foglio di lavoro. A questo punto si aprir la finestra di dialogo "Assegna Macro", selezioniamo "scrivi_B2" e digitiamo "OK". Creiamo un nuovo pulsante sul foglio e ripetiamo lo stesso procedimento per assegnare la macrocancella_B2". Per modificare la scritta allinterno dei pulsanti ciccare con il tasto destro del mouse e selezionare modifica testo Per eseguire le macro sufficiente ciccare sui rispettivi pulsanti.

Lezione 1: L'ambiente di sviluppo VBA

ANALISI DELLE MACRO Sub scrivi_B2() ' ' scrivi_B2 Macro ' scrive un numero nella cella B2 ' ' Range("B2").Select ActiveCell.FormulaR1C1 = "9" End Sub La prima riga contiene lintestazione della procedura, cio dellinsieme di istruzioni che noi forniamo al computer al fine di ottenere il risultato desiderato. La parola Sub una parola chiave indispensabile, cos come lultima riga indica la fine delle istruzioni. Le righe successive, precedute da in apice, costituiscono commenti, sono cio righe utili alla lettura del codice da parte del programmatore ma ignorate dal computer. Riga 7: seleziona la cella B2: Selezione di celle con i riferimenti assoluti Sintassi: Range(CoordinateDiCella).Select CoordinateDiCella: Argomento di tipo String ( una stringa viene racchiusa tra due doppi apici) Esempi Istruzione Risultato Range("A1").Select Viene selezionata la cella A1 Range("C4").Select Viene selezionata la cella C4 Range("B2:D6").Select Viene selezionato lintervallo di celle da B2 a D6 Riga 8: viene assegnato un valore alla cella selezionata Inserimento di testo, numeri e formule in una cella (macro registrabile) Sintassi: ActiveCell.FormulaR1C1 = Testo Testo: Specifica il testo da inserire nella cella Gli esempi seguenti ipotizzano che allavvio della registrazione (o dellesecuzione della macro) sia selezionata la cella D6. Esempi Istruzione Risultato ActiveCell.FormulaR1C1 = "a" Viene inserito il testo a nella cella corrente (D6) ActiveCell.FormulaR1C1 = "4" Viene inserito il valore 4 nella cella corrente (D6) ActiveCell.FormulaR1C1 = "=R[-1]C*2" Viene inserita la formula =D5*2 nella cella corrente (conseguentemente nella cella appare il risultato della formula). Si noti che la formula nella macro espressa nella forma dei riferimenti relativi R1C1

Analizziamo ora la macro cancella_B2 Lunica riga che differisce dalla precedente macro la seguente: Selection.ClearContents

Lezione 1: L'ambiente di sviluppo VBA


E cancella il contenuto della cella B2 Cancellare larea selezionata nel foglio di lavoro (macro registrabile) Sintassi: Selection.Clear Cancella Tutto (contenuti, formato,note) Selection.ClearFormats Cancella solo i Formati Selection.ClearContents Cancella il contenuto dellarea selezionata Selection.ClearComments Cancella le Note (commenti)

Definizione di riferimento assoluto nelle formule


In una formula lindirizzo esatto di una cella, indipendentemente dalla posizione della cella contenente la formula. Un riferimento assoluto ha la forma $A$1, $B$1 e cos via. Alcuni riferimenti di cella sono misti. Un riferimento di riga assoluto ha la forma A$1, B$1 e cos via. Un riferimento di colonna assoluto ha la forma $A1, $B1 e cos via. Diversamente da riferimenti relativi, i riferimenti assoluti non si adattano automaticamente quando si copiano delle formule su righe e colonne. Sub copia() ' copia nella cella A1 il contenuto della calla A3 ' indirizzamenti assoluti Range("A1").Value = Range("A3").Value End Sub

Definizione di riferimento relativo nelle formule


E un riferimento di cella, utilizzato in una formula, che cambia quando la formula viene copiata in unaltra cella o intervallo. Dopo che la formula viene copiata e incollata, il riferimento relativo nella nuova formula cambia per fare riferimento a una cella differente distante dalla formula lo stesso numero di righe e colonne che distanziano il riferimento relativo originale dalla formula originale. Se ad esempio la cella A3 contiene la formula =A1+A2 e si copia la cella A3 nella cella B3, la formula nella cella B3 diventa =B1+B2. "=R[-1]C*2" un esempio di riferimento relativo. Si intende la riga precedente [1] a quella attiva e la stessa colonna. Affinch le nostre applicazioni funzionino necessario inserire il codice Basic, cio le istruzioni che indicano al computer quali comandi eseguire ed in che ordine. Il codice viene inserito nelle finestre "Modulo di codice" all'interno dell'Editor di "Visual Basic". Per creare un nuovo modulo di codice, aprire un nuovo documento Excel ed entrare nell'Editor VBA. Quindi scegliere la voce "Modulo" dal men "Inserisci".

Lezione 1: L'ambiente di sviluppo VBA

ESERCIZI Riferimento assoluto Scrivere una subroutine che permetta di assegnare alle celle A1, B1,C1 il proprio nome, cognome, classe frequentata. Riferimento relativo Scrivere una subroutine che permetta di creare la seguente tabella, avendo inserito il numero centrale N nella cella D6 N/2 N N+1 N*2 ad esempio se nella cella d6 inserisco il valore 4 otterr: 2 3 4 5 8 N-1

Lezione 2: Input/Output

INPUT / OUTPUT
Apriamo ora un nuovo foglio excel. Creiamo un nuovo modulo di codice delleditor di VBA e scriviamo il seguente codice. Sub Saluti() ' La riga successiva visualizza un messaggio MsgBox "Ciao Mondo", vbInformation, "Ciao" End Sub Eseguiamo il codice dalla finestra MACRO cliccando su Esegui

Compare una finestra di messaggio La riga di codice segue la seguente sintassi: MsgBox parola chiave. il comando per far comparire la finestra di messaggio Ciao mondo il prompt: testo che compare allinterno della finestra vbInformation fa comparire licona di informazione allinterno della finestra esistono altre icone e altri pulasanti, la scelta compare in una finestra a tendina che si apre dopo aver digitato la virgola successiva al prompt. Per scegliere licona desiderata sufficiente selezionarla con un click del mouse e premere la barra spaziatrice. Ciao testo che appare sulla barra del titolo

10

Lezione 2: Input/Output

Per poter eseguire un input necessario stabilire dove memorizzare i dati digitati dallutente. Si deve perci dichiarare una variabile destinata a contenere il dato digitato dallutente Scrivere ed eseguire la seguente subroutine Sub salutoMe() dichiarazione della variabile Dim nome As String input del nome nome = InputBox(come ti chiami?, presentazioni) preparazione della stringa da visualizzare nella finestra di messaggio Dim messaggio As String messaggio = ciao & nome & concatena due stringhe. MsgBox messaggio, vbExclamation, SALUTI End Sub Per eseguire una macro, possiamo ad esempio associarla ad un pulsante di comando: aprire la barra moduli (tasto destro sulla barra dei comandi, e poi spuntare la casella corrispondente a moduli). Oppure, se invece vogliamo avere a disposizione questa nuova macro in una barra degli strumenti, utilizzabile in tutte le cartelle, possiamo procedere cos: Visualizza\Barra degli strumenti\personalizza: Scegliamo nuova e poi digitiamo il nome personale, OK, selezioniamo la linguetta comandi, evidenziamo macro e trasciniamo il pulsante personalizzato nella barra personale, CHIUDI, Premiamo il nuovo pulsante (sole che ride) Associamo il nome della macro Evidenzia, della cartella personale Clicchiamo col tasto destro sul sole che ride e scegliamo Modifica icona pulsante

dalleditor di pulsanti possiamo creare limmagine desiderata Trasciniamo la nuova barra degli strumenti dove preferiamo

11

Lezione 2: Input/Output

Ora la nuova macro sar disponibile in tutte le cartelle.

12

Lezione 3: Le variabili

LE VARIABILI
I dati utilizzati dai moduli di codice durante l'esecuzione dei programmi vengono memorizzati all'interno delle "Costanti" e delle "Variabili". Le variabili rappresentano dati il cui valore cambia durante l'esecuzione del programma, le costanti invece contengono sempre lo stesso valore predefinito durante tutta l'elaborazione. La sintassi di variabili e costanti la seguente: Dim NomeVariabile as Tipovariabile Const NomeVariabile as TipoCostante = ValoreCostante Il nome di una variabile non pu: Superare i 255 caratteri. Contenere punti o operatori matematici. Non deve essere una parola riservata di Visual Basic, cio quelle parole che servono per impartire le istruzioni al programma; come ad esempio: Loop, Function, Sub, End, Do, Integer, Case, If, For, Else, Then, Select. Queste parole riservate sono facilmente riconoscibili poich leditor di VBA le scrive in blu. Le variabili utilizzate non sono tutte uguali, possono essere numeri interi, numeri decimali, stringhe di caratteri, date ecc... Valori diversi hanno bisogno di un trattamento diverso. Per questo motivo in Visual Basic esistono tipi di dati differenti che possono essere dichiarati in modo esplicito. Tipo Byte Long Single Accetta numeri da 0 a 255 Accetta numeri da -2 147 483 648 a 2 147 483 647 Accetta numeri da -3,402823E38 a -1,401298E-45 per valori negativi Da 1,401298E-45 a 3,402823E38 per valori positivi Descrizione

Integer Accetta numeri da -32768 a 32767

Accetta numeri da -1,79769313486232E308 a -4,94065645841247E-324 Double per valori negativi Da 4,94065645841247E-324 a 1,79769313486232E308 per valori positivi Boolean Accetta solo 2 valori "True" o "False" (Vero o Falso) String Date Accetta da 0 a 65 000 caratteri Date dal 1 gennaio 100 al 31 dicembre 9999

Per indicare con chiarezza che tipo di dato stiamo usando dobbiamo dichiarare le variabili. Anche se non necessario, buona norma dichiarare sempre variabili e costanti all'interno del codice, questo aiuta a ridurre gli errori di scrittura del codice. Quando viene inserita la parola chiave "Option Explicit" in cima al modulo di codice, Visual basic, in caso di mancata dichiarazione di una variabile, dar una segnalazione di errore.

13

Lezione 3: Le variabili

Esercizio: Ricevere in input le misure della base e dellaltezza di un rettangolo e calcolare larea. Analisi: per calcolare larea di un rettangolo si utilizza la formula: Area=base * altezza. Devo : richiedere allutente di digitare la misura della base ( mediante inputbox) richiedere allutente di digitare la misura dellaltezza eseguire il calcolo assegnando il risultato alla variabile Area visualizzare il risultato (mediante message box)

Start
I

La macro conterr il seguente codice: Sub Area() ' dichiarazione delle variabili locali alla procedura (subroutine) Dim base As Integer Dim altezza As Integer Dim area As Integer
I

base altezza Area=base*altezza Area Stop


O

'input della base e dell'altezza base = InputBox("digita la base del rettangolo") altezza = InputBox("digita l'altezza del rettangolo") 'calcolo dell'area area = base * altezza 'output dei risultati MsgBox "perimetro=" & perimetro & " area=" & area End Sub

Se desidero visualizzare i risultati su foglio elettronico posso assegnare le variabili alle celle desiderate: Sub Area() ' dichiarazione delle variabili locali alla procedura (subroutine) Dim base As Integer Dim altezza As Integer Dim area As Integer 'input della base e dell'altezza base = InputBox("digita la base del rettangolo") altezza = InputBox("digita l'altezza del rettangolo") 'calcolo dell'area area = base * altezza 'output su foglio di lavoro Range("A10").Value = "BASE" Intestazione delle celle base Range("B10").Value = "ALTEZZA" e altezza Range("A11").Value = base Assegnazione delle variabili nelle sottostanti le intestazioni Range("B11").Value = altezza Range("B14").Value = "AREA" intestazione e assegnazione dellarea Range("B15").Value = area 'adatta la dimensione delle colonne a e b al contenuto Columns("A:B").Select Selection.Columns.AutoFit End Sub

celle

14

Lezione 4: Colorare le celle

COLORARE LE CELLE
E possibile migliorare linterfaccia colorando le celle interessate. Anche questo pu essere fatto mediante codice VBA. Un esempio per colorare celle dato dalla seguente procedura: Sub colori() Dim rosso As Integer Dim verde As Long verde = vbGreen Range("B2").Interior.Color = verde rosso = vbRed Range("A1").Interior.Color = rosso End Sub vbRed e vbGreen sono due costanti di Visual Basic. Altre costanti sono: Costante vbBlack vbRed vbGreen vbYellow vbBlue Valore 0x0 0xFF 0xFF00 0xFFFF 0xFF0000 Nero Rosso Verde Giallo Blu Fucsia Azzurro Bianco Descrizione

vbMagenta 0xFF00FF vbCyan vbWhite 0xFFFF00 0xFFFFFF

I valori delle costanti sono forniti in sistema esadecimale. Ad eccezione del nero e del rosso si pu notare che sono costituiti da 4 o 6 cifre esadecimali. Per questo motivo per assegnare i colori verde, giallo, blu, fucsia, azzurro, bianco, a variabili, devo utilizzare variabili di tipo long. E possibile generare altri colori utilizzando la notazione RGB. In tale notazione sufficiente esprimere la quantit di colore ( rosso, verde, blu) che si intende utilizzare nella composizione del nuovo colore. Tale quantit espressa da un valore compreso tra 0 e 255

15

Lezione 4: Colorare le celle


Esempio: colorare la cella C7 di viola Sub coloriRGB() Dim rosso As Integer Dim verde As Integer Dim blu As Integer rosso = 225 verde = 20 blu = 97 Range("C7").Interior.Color = RGB(rosso, verde, blu) End Sub Provare a generare nuovi colori Con i colori generati migliorare linterfaccia relativa al problema dellarea Esercizio: Creare una macro che permetta di calcolare il perimetro di un triangolo scaleno i cui lati sono dati in input. Colorare le celle dellintestazione tutte dello stesso colore per ci che riguarda i lati Tutti i valori dei lati con un altro colore I risultati con un terzo colore.

16

Lezione 5: Operatori matematici

Operatori Matematici Le operazioni che si possono eseguire in Visual Basic sono le seguenti Operatore + * / \ Mod ^ Somma Sottrazione Moltiplicazione Divide e restituisce un numero intero Divide e restituisce solo il resto Eleva a potenza Funzione Utilizzo Risultato = X + Y Risultato = X - Y Risultato = X * Y Risultato = X \ Y Risultato = X Mod Y Il resto un intero Risultato = X ^ Y

Divide e restituisce un numero a virgola mobile Risultato = X / Y

Dove X e Y sono variabili o costanti di tipo numerico. Risultato deve sempre essere una variable di tipo numerico. Nota: il divisore non deve mai essere uno 0 (zero) Esercizi: 1. realizzare un foglio excel nel quale compaiano tre pulsanti: il primo per la lettura e visualizzazione dei valori del lato di un triangolo equilatero il secondo per il calcolo e la visualizzazione del perimetro del triangolo il terzo per il calcolo e la visualizzazione dellarea del triangolo 2. realizzare un foglio elettronico contenente un pulsante che permetta di ricevere in input gli importi di tre prodotti acquistati al supermercato , calcoli limporto totale e li visualizzi tutti i dati ordinatamente in un foglio excel:

3. modificare il precedente progetto aggiungendo un pulsante che richieda la percentuale di sconto e visualizzi il prezzo scontato

17

Lezione 6: Le routine

Le Routine Con la creazione di routine possibile dividere il codice in blocchi separati. Questo permette di rendere il programma pi leggibile ed individuare facilmente gli errori. Utilizzare i moduli permette anche di rendere comune parti di codice a pi programmi. In Visual Basic esistono due tipi di routine. Routine Sub: svolgono azioni ma non restituiscono un valore. Routine Function: svolgono azioni e restituiscono un valore.

NB: un modulo di codice non coincide necessariamente con una routine, in quanto un modulo pu contenere pi routine contemporaneamente.

Finora abbiamo scritto tutte routine del primo tipo, cio sub. Esiste un metodo che permette a colpo docchio di determinare il tipo di una routine . Innanzitutto, di fronte ad un problema decido quali passi devo compiere per giungere alla soluzione Esempio: realizzare un foglio excel che, mediante una macro richiamata da un pulsante, permetta di ricevere in input i dati di un triangolo equilatero e visualizzi i valori dellarea e del perimetro in modo gradevole. La prima parte di analisi determina le mie aspettative: come sar il foglio excel?

La seconda fase dellanalisi riassume le operazioni che intendo eseguire: Preparare le intestazioni (BASE, ALTEZZA, PERIMETRO,AREA) Richiedere allutente la misura della base Calcolare la misura dellaltezza Calcolare la misura del perimetro Calcolare la misura dellarea Visualizzare i valori calcolati

18

Lezione 6: Le routine
Tutte queste operazioni individuate possono essere eseguite a mano, utilizzando anche le formule di excel, oppure posso chiedere al computer di eseguirle al click del pulsante ESEGUI. Per sfruttare pienamente il computer posso chiedermi se alcune delle operazioni previste sono gi state utilizzate in precedenza. Osservo che tutte le operazioni descritte sono gi state eseguite in precedenti problemi, ( Pi precisamente nellesercizio precedente) non necessario ripetere lanalisi e la codifica di tali operazioni, ma solo controllare che siano state scritte correttamente e riutilizzarle opportunamente. A differenza dellesercizio precedente non servono tre pulsanti, ma solo uno da cui richiamo la procedura esegui. La subroutine esegui associata a questo pulsante richiamer le procedure scritte precedentemente.

NOTA: lordine con cui sono state scritte le sub e lordine di richiamo non deve essere obbligatoriamente lo stesso. Alcune variabili sono dichiarate allinterno delle subroutine, la variabile base dichiarata sopra le routine. Ci dipende dalla VISIBILITA delle stesse.

19

Lezione 6: Le routine

VISIBILITA La visibilit di una variabile, o di una costante, definisce la sua disponibilit all'interno del progetto. Puoi dichiarare variabili e costanti a tre livelli:

Livello locale: vanno dichiarate all'interno della routine e sono disponibili solo all'interno di essa. Ad esempio altezza, area e perimetro sono variabili locali alle routine. Non sono interessata a conoscerne i valori in altre parti del programma.

Livello di modulo: Vanno dichiarate in testa alla finestra di modulo di codice e sono viste da tutte le routine contenute all'interno del modulo di codice; il caso della variabile base che posso dichiarare, oltre che con la parola chiave dim anche cn la parola chiave Private

Livello pubblico: Vanno dichiarate in testa alla finestra di modulo di codice e sono viste da tutte le routine e da tutti i moduli di codice appartenenti al progetto. Sono dichiarate Pubblic

Esercizio: individua i livelli di visibilit delle variabili nel seguente codice: Public risultato1 As Integer Public risultato2 As Integer Public sottraendo As Integer Private operatore As Integer Sub somma() Dim Addendo As Integer operatore = 5 Addendo = 5 risultato1 = Addendo + operatore MsgBox "Il risultato della somma : " & risultato1, _ vbInformation, "Somma" End Sub Sub sottrazione() Dim sottraento As Integer sottraento = 2 risultato2 = operatore - sottraento MsgBox "Il risultato della sottrazione : " & risultato2, _ vbInformation, "Sottrazione" End Sub VARIABILE risultato1 risultato2 sottraendo operatore Addendo sottraento LIVELLO LOCALE LIVELLO DI MODULO LIVELLO PUBBLICO

20

Lezione 6: Le routine

Prova ora a completare lesercizio precedente e a mandarlo in esecuzione. Il codice sar simile al seguente: Dim base As Integer Sub Prepara_Intestazioni() ' scrive le etichette delle celle e le colora Range("B5").Value = "BASE" Range("B5").Interior.Color = vbYellow Range("B7").Value = "ALTEZZA" Range("B7").Interior.Color = vbYellow Range("E5").Value = "PERIMETRO" Range("E5").Interior.Color = vbGreen Range("E7").Value = "AREA" Range("E7").Interior.Color = vbGreen Columns("B:E").Select Selection.Columns.AutoFit End Sub Sub Input_Dati() 'chiede all'utente la misura dei lati e la scrive nella cella C5 base = InputBox("digita la base del triangolo") Range("C5").Value = base End Sub Sub Area() Dim altezza As Single Dim Area As Double 'calcola la misura dell'altezza e la visualizza, altezza = Sqr((base ^ 2) - (base / 2) ^ 2) Range("c7") = altezza 'la misura dell'area Area = base * altezza 'visualizza la misura dell'area Range("F7") = Area End Sub Sub Perimetro() Dim Perimetro As Integer 'calcola la misura del perimetro e lo visualizza Perimetro = base * 3 Range("f5") = Perimetro End Sub

21

Lezione 6: Le routine

Sub esegui() 'richiama nell'ordine desiderato le sub precedentemente scritte Call Prepara_Intestazioni Call Input_Dati Call Perimetro Call Area End Sub _______________ Per il calcolo dell altezza stata utilizzata la seguente formula: base2 (base/2)2 La radice quadrata viene calcolata dalla funzione Sqr. Una funzione simile a una routine sub ma restituisce un valore, cio un insieme di istruzioni per il calcolo di un algoritmo. La soluzione dellalgoritmo non viene direttamente visualizzata ma pu venire assegnata a una variabile (altezza = Sqr((base ^ 2) - (base / 2) ^ 2). VBA propone gi un insieme di funzioni direttamente usufruibili. Ad esempio le funzioni matematiche Abs, Atn, Cos, Exp, Fix, Int, Log, Rnd, Sgn, Sin, Tan Per conoscere le funzioni disponibili aprire la guida in linea di Microsoft Visual Basic ciccando su ?

Aprire il volume Documentazione di Microsoft Visual Basic ,


poi il volume Riferimenti al linguaggio di Visual Basic ed infine Funzioni. Le funzioni sono raccolte in ordine alfabetico. La funzione Sqr sar nel quinto volume

22

Lezione 6: Le routine
Scelta la funzione desiderata si aprir una finestra esplicativa della funzione stessa.

possibile scrivere autonomamente delle funzioni, il cui valore restituito pu essere assegnato ad una variabile. La stessa funzione pu essere richiamata ( cio utilizzata) pi volte, ogni volta che necessita. Calcolare la misura del perimetro Da sviluppare come esercizio Calcolare la misura dellarea Da sviluppare come esercizio Visualizzare i valori calcolati Da sviluppare come esercizio Il problema ora risolto. Posso richiamare le procedure scritte nella procedura associata al pulsante Esegui e mandare in esecuzione. Sub esegui() Call intestazione Call inputBase Call S_perimetro Call S_altezza Call S_area Call visualizza Call coloraCelle Call AdattaCelle End Sub Per migliorare laspetto grafico posso richiamare le procedure per colorare le celle o per adattare le dimensioni delle colonne. Routine Function: svolgono azioni e restituiscono un valore Alcune delle routine sviluppate calcolano un solo valore ( S_area, S_perimetro, S_altezza, inputBase) Queste possono essere pi correttamente dichiarate funzioni. Il problema cambia sia nella sintassi della dichiarazione della subroutine che nel richiamo della stessa: Dichiarazione di una funzione Public Function identificativo della funzione (elenco dei parametri formali) As tipo del dato restituito As esempio: Public Function F_area() As Single

23

Lezione 6: Le routine
F_area = base * altezza End Function Il richiamo di una funzione segue la seguente sintassi: variabile destinazione = identificativo funzione(elenco parametri attuali) Sub esegui_con_funzioni() Call intestazione base = F_inputBase() perimetro = F_perimetro() altezza = F_altezza() area = F_area() Call visualizza Call coloraCelle Call AdattaCelle End Sub Sia i parametri formali che attuali possono essere 0 o pi. Se non ci sono parametri le parentesi restano vuote.

24

Lezione 7: I costrutti di programmazione - If Then Else

A volte occorre prendere delle decisioni: se una condizione verificata allora si eseguono alcune operazioni, altrimenti se ne eseguono delle altre . Il flow chart che rappresenta listruzione condizionale rappresentata da un rombo:

I costrutti di programmazione: La selezione

F condizione Istruzione da eseguire se FALSO

Istruzione da eseguire se VERO

In Visual Basic : Se non ci sono istruzioni da eseguire quando la condizione non verificata: If "condizione" then "istruzione" End if Se ci sono istruzioni sia con condizione verificata sia con condizione non verificata; If "condizione" then "istruzione" Else "istruzione" End if

25

Lezione 7: I costrutti di programmazione - If Then Else

Esempio: verificare che il numero inserito dallutente sia un valore positivo. Questo problema si presenta ogni volta che un utente inserisce dei valori che rappresentano quantit o dimensioni obbligatoriamente positive, come ad esempio la misura di un lato di una figura, la somma depositata in banca o il voto di un compito in classe. Scrivere il seguente codice ed associarlo ad un pulsante Option Explicit Dim VariabileInput Sub positivo() VariabileInput = _ InputBox("immettere un numero ") 'inizio dell' istruzione condizionale If (VariabileInput > 0) Then MsgBox "la variabile un numero positivo. il suo valore accettabile", vbInformation, "valutazione 1" Else MsgBox "la variabile un numero negativo o pari a zero; il suo valore non accettabile", _ vbInformation, "valutazione 2" End If 'fine dell' istruzione condizionale End Sub Verificarne la correttezza digitando, in tre prove diverse, un numero positivo, uno negativo e infine uno 0. Esempio: verificare se un valore digitato un carattere o un numero E sempre utile, quando si chiede allutente di inserire un numero, verificare che la digitazione sia corretta. Scrivere il seguente codice ed associarlo ad un pulsante Option Explicit Dim VariabileInput Sub valuta() VariabileInput = _ InputBox("immettere un numero o una stringa di caratteri") 'inizio dell' istruzione condizionale If IsNumeric(VariabileInput) Then MsgBox "la variabile un numero", vbInformation, "condizione Vera" Else MsgBox "la variabile un carattere o una stringa di caratteri", _ vbInformation, "condizione Falsa" End If 'fine dell' istruzione condizionale End Sub Nella routine usata listruzione: "IsNumeric" che definisce se il valore memorizzato nella variabile "VariabileInput" numerico o stringa.

26

Lezione 7: I costrutti di programmazione - If Then Else


Per impostare la condizione si usano operatori di confronto: Operatore < <= > >= <> Minore Minore o Uguale Maggiore Maggiore o Uguale Diverso (utilizzabile anche con le stringhe) Funzione

ESERCIZI: 1. Richiedere allutente due numeri e visualizzare il minore. 2. Un commerciante di frutta ha la possibilit di vendere solo il 60% della merce a prezzo intero prima che questa diventi avariata, oppure pu scegliere di applicare uno sconto su vendite di stock di 5 kg, sapendo che in tal modo riuscir a vendere completamente la merce. Ricevendo in input la quantit totale di merce, il prezzo al kg della merce, la percentuale di sconto applicata, quale delle due formule di vendita pi conveniente? Per motivare la scelta si crei un prospetto in excel mediante macro. Si eseguano gli input dei dati mediante inputbox.

27

Lezione 8: I form
Le useform
Utilizzando le Userform, possibile costruire finestre personalizzate per visualizzare dati, o richiedere allutente la digitazione di valori In sostanza le finestre di dialogo permettono al programma di interagire con lutente in modo pi sofisticato e forniscono uno strumento versatile per svolgere le normali funzioni di Input e Output. Loggetto Userform una finestra di dialogo vuota e contiene una barra del titolo e un pulsante di chiusura, aggiungendo controlli a un oggetto di tipo Userform possibile personalizzare laspetto e la funzionalit della finestra di dialogo. Per inserire in un file di Excel una Userform, entriamo nelleditor del VBA clicchiamo su inserisci nella barra de menu e scegliamo la voce useform

Oppure clicchiamo sullicona inserisci Useform

e ci comparir una schermata come la seguente

28

Lezione 8: I form

Possiamo notare che nella finestra di strumenti) che ci permette di La Userform ora creata, possiamo destro) e trascinare il mouse tenendo dimensioni desiderate.

destra ci comparsa una Form vuota e un box (Casella degli inserire i vari controlli allinterno della nostra Userform. modificarla a piacere, basta posizionarsi in un angolo (inferiore premuto il tasto sinistro e rilasciarlo quando abbiamo raggiunto le

Come prima cosa personalizziamo la useform: Cambiamo il titolo: nella finestra delle propriet scrivendo primo form seleziono caption e modifico il contenuto

modifico anche la propriet Back Color: cliccando su essa si apre una finestra con due schede: Tavolozza Sistema. e

Se scelgo Tavolozza, cliccando su un colore a mio piacimento, modifico il colore di sfondo della Userform. Allinterno della Userform posso inserire degli strumenti. Scelgo un pulsante che posiziono nellangolo in basso a destra della finestra. Modifico le propriet Name in CmdFine e caption in Fine. Con un doppio clic sul pulsante apro la finestra di codice in cui scrivo: Unload Me Private Sub cmdFine_Click() Unload Me End Sub I metodi hide e show Hide : Nasconde la finestra di dialogo (la Userform) senza liberare la memoria associata alloggetto, in questo modo vengono mantenuti i valori nei vari controlli contenuti in essa

Show : Rende visibile la finestra sullo schermo, se la finestra non caricata in memoria, viene effettuato il caricamento La Form appena creata presente, ma deve essere veicolata per poter renderla visibile, un sistema per ottenere questo il seguente: dal men file seguiamo questo percorso Inserisci > Modulo Nel Modulo1 digitiamo il seguente codice

Sub Mostra() Userform1.Show End sub

Associamo ora la macro ad un pulsante sul foglio di lavoro e premendo sul pulsante comparir a video la Userform.

29

Lezione 8: I form

Esercizio

Calcolatrice

Creare la seguente userform contenente due caselle di testo buttom

, una label

e cinque command

Modificare la propriet name della useform chiamandolo Frmcalcolatrice Modificare la caption con calcolatrice Svuotare le caselle di testo e la label cancellando il contenuto della propriet text. Modificare la Name delle caselle di testo rispettivamente in TxtN1 e TxtN2 e della label in LblRis Colorare lo sfondo di blris di bianco Modificare le caption dei command ognuno con un diverso operatore aritmetico (+ - * /) Modificare i name delle caselle di testo rispettivamente in CmdPiu, CmdMeno, CmdPer, CmdDiviso Laspetto del form dovrebbe essere questo: Scrivere i seguenti codici Private Sub CmdDiviso_Click() If Val(txtN2.Text) <> 0 Then lblris.Caption = Val(txtN1.Text) / Val(txtN2.Text) Else r = MsgBox("divisione per 0", vbCritical, "errore") End If End Sub Private Sub cmdFine_Click() Unload Me End Sub Private Sub CmdMeno_Click() lblris.Caption = Val(txtN1.Text) - Val(txtN2.Text) End Sub Private Sub CmdPer_Click() lblris.Caption = Val(txtN1.Text) * Val(txtN2.Text) End Sub Private Sub CmdPiu_Click() lblris.Caption = Val(txtN1.Text) + Val(txtN2.Text) End Sub Per definire le routine di evento riguardanti la cartella Excel attiva esiste un modulo di codice predefinito denominato "ThisWorkbook", visibile in finestra di progetto. Inserire la routine seguente nel modulo di codice "ThisWorkBook" . Private Sub Workbook_Open() Frmcalcolatrice.show End Sub La routine attiva la UserForm "Frmcalcolatrice" quando viene aperto il documento Excel.

30

Lezione 9: I form parte II


Le useform Proviamo ora a migliorare laspetto delle form utilizzate. possibile operare sia sullo sfondo che sui singoli strumenti agendo sulle propriet degli strumenti stessi. Selezioniamo la form appena creata in modo che la finestra delle propriet indichi in modo esplicito che si tratta del form interessato

Cliccare su name e modificare il nome del form in FrmIndovinaNumero Da ora in poi ogni volta che si desidera riferirsi a questo form lo si far indicando FrmIndovinaNumero. Il nome scelto non casuale : Frm indica che loggetto un form IndovinaNumero mi ricorda che in questo form voglio creare un gioco che mi permetta, con un numero limitato di tentativi (ad esempio 5), di indovinare un numero. Dopo aver modificato il nome non noto nessun cambiamento del form. Per cambiare il titolo al form modifico la caption

31

Lezione 9: I form parte II

Posso ora migliorare lo sfondo colorandolo, agendo sulla propriet BackColor. click sulla freccia a destra di BackColor. Click su tavolozza Scelta del colore

Posso anche scegliere un immagine di sfondo agendo sulla propriet Picture: Click su Scelta di un file immagine (ad esempio JPEG) selezionando opportunamente il percorso.

32

Lezione 10: I costrutti di programmazione - Il ciclo For

I CICLI Ripetizione di azioni con i cicli

Nei programmi spesso necessario svolgere molte volte una determinata azione, I comandi descritti in questa sezione eseguono ripetutamente le stesse istruzioni, finch non si verifica una determinata condizione. Ciclo per un numero di volte predefinito Il ciclo "For.. Next" esegue ripetutamente un blocco di codice incrementando (o decrementando) una variabile specifica, finche l'indice non raggiunge il valore indicato dall'attributo "To".

For i= inizio to fine

Istruzioni del ciclo

For i = inizio to fine Istruzioni Next

Esempio: Sub CicloFor() For i = 1 To 10 MsgBox "Il valore incremento " & i, _ vbInformation, "Ciclo For" Next End Sub Per contare allindietro basta sostituire la riga "For i = 1 To 10" con "For i = 10 To 1 step -1"

33

Lezione 10: I costrutti di programmazione - Il ciclo For

Giochiamo con i colori: Scrivere il seguente codice ed associarlo ad un pulsante. Option Explicit Sub arcobaleno() Dim rosso As Integer Dim verde As Integer Dim blu As Integer Dim NumCelle As Integer Dim i As Integer Dim zonamia As Variant Randomize Set zonamia = Range("A1:C10") NumCelle = zonamia.Count For i = 1 To NumCelle rosso = Int((255 * Rnd) + 1) verde = Int((255 * Rnd) + 1) blu = Int((255 * Rnd) + 1) zonamia(i).Interior.Color = RGB(rosso, verde, blu) Next End Sub Rnd[(numero)] La funzione Rnd restituisce un valore minore di 1 ma maggiore o uguale a zero. Il valore di numero determina il modo in cui Rnd genera un numero casuale. Per ogni base iniziale specificata, viene generata la stessa sequenza di numeri, in quanto ogni successiva chiamata alla funzione Rnd utilizza il numero casuale precedente come base per il numero successivo nella sequenza. Prima di richiamare Rnd, utilizzare l'istruzione Randomize senza argomento per inizializzare il generatore di numeri casuali con una base connessa al timer del sistema. Per generare interi casuali in un dato intervallo, utilizzare la seguente formula: Int((limitesup - limiteinf + 1) * Rnd + limiteinf) Set fissa un oggetto in una variabile di tipo Object o di tipo Variant. L'istruzione Set pu essere, usata per non dover ripetere la denominazione di oggetti, specie se lunga e verbosa, da qui deriva la possibilit di applicare anche a un oggetto Range la propriet Count e gli indici numerici.

34

Lezione 10: I costrutti di programmazione - Il ciclo For


Esercizio1: scrivere una procedura, associata ad un pulsante, che scriva i numeri da 20 a 50 nellintervallo A10:E15 , colori lo sfondo delle celle di verde e utilizzi il carattere "Lucida Handwriting" per cambiare lo stile dei caratteri usare loggetto font e le relative propriet: Bold se settato a true il carattere in grassetto (Range("A1:A5").Font.Bold = True) imposta il colore principale del carattere Color ColorIndex Il colore viene specificato come valore di indice nella tavolozza di colori corrente (Range("A1").Font.ColorIndex = 3) FontStyle imposta lo stile del carattere (Range("A1").Font.FontStyle = "Bold Italic" ) Italic imposta a corsivo lo stile del carattere (Range("A1:A5").Font.Italic = True) Name imposta il nome dell'oggetto. Nel caso del font assegnando il nome di un carattere assume quel carattere (Range(A1).Font.Name=Arial) Shadow il carattere ombreggiato assegnandogli il valore true Size imposta la dimensione del carattere. Strikethrough Ha valore True se il carattere barrato Subscript Ha valore True se il carattere formattato a pedice Questo esempio formatta come pedice il secondo carattere della cella A1. Range("A1").Characters(2, 1).Font.Subscript = True Superscript Underline Ha valore True se il carattere formattato ad apice imposta il tipo di sottolineatura applicato al carattere Pu essere una delle seguenti costanti xlUnderlineStyleNone xlUnderlineStyleSingle xlUnderlineStyleDouble xlUnderlineStyleSingleAccounting xlUnderlineStyleDoubleAccounting (Range(A1).Font. Underline = xlUnderlineStyleSingle )

Esercizio 2 Scrivere una procedura che conti, nellintervallo C12:D18 quante volte compare un valore dato in input Esercizio3 Scrivere una procedura che permetta linput di 15 valori e li memorizzi in altrettante celle adiacenti nella colonna C, e visualizzi la somma di tali valori nella cella successiva.

35

Lezione 11: I costrutti di programmazione - I cicli Do Loop e While


Ciclo con controllo in testa Il ciclo "Do loop" continua ad eseguire il codice fino a quando non soddisfatta una condizione. Se non viene specificata una condizione dinterruzione, o se la condizione non impostata in modo non corretto, il ciclo continua allinfinito. Ripeti finch la condizione non risulta vera (cicla per vero).

condizione

si Istruzioni del ciclo

no

Sub CicloDo() i = 1 Do While i < 10 MsgBox "Il valore incremento " & i, _ vbInformation, "Ciclo While" i = i + 1 Loop End Sub

i<10

si Il valore incremento i

no

i=i+1

36

Lezione 11: I costrutti di programmazione - I cicli Do Loop e While

Esistono due tipologie di ciclo "Do": Ripeti mentre la condizione risulta falsa (cicla per falso - until). Sub CicloDo() i = 1 Do Until i > 10 MsgBox "Il valore incremento " & i, _ vbInformation, "Ciclo Do Loop Until" i = i + 1 Loop End Sub

Ripeti mentre la condizione risulta vera (cicla per vero - while). Sub CicloDo() i = 1 Do While i < 10 MsgBox "Il valore incremento " & i, _ vbInformation, "Ciclo For" i = i + 1 Loop End Sub

E inoltre il controllo pu essere effettuato prima dello istruzioni del ciclo (controllo in testa) o dopo di esse (controllo in coda). Controllo in testa:

While condizione [istruzioni] Wend

i<10

si Il valore incremento i

no

i=i+1

Esegue una serie di istruzioni finch la valutazione di una determinata condizione d come risultato True.

37

Lezione 11: I costrutti di programmazione - I cicli Do Loop e While

La sintassi dell'istruzione While...Wend composta dalle seguenti parti: Parte condizione istruzioni Descrizione Obbligatoria. Espressione numerica o espressione stringa che pu dare come risultato True o False. Se condizione Null, viene considerata False. Facoltativa. Una o pi istruzioni eseguite finch la condizione True.

osservazioni Se condizione True, verranno eseguite tutte le istruzioni fino allistruzione Wend. Il controllo torner quindi all'istruzione While e condizione verr analizzata nuovamente. Se condizione ancora True, il processo verr ripetuto. Se non True, l'esecuzione riprender con l'istruzione successiva all'istruzione Wend. I cicli While...Wend possono essere nidificati a qualsiasi livello. Ciascuna istruzione Wend corrisponder allistruzione While pi recente. Oppure: Do [{While | Until} condizione] [istruzioni] [istruzioni] Loop

Controllo in coda:

i=i+1
Il valore incremento i si i>10

Do [istruzioni] [istruzioni] Loop [{While | Until} condizione]

no

38

Lezione 11: I costrutti di programmazione - I cicli Do Loop e While


La sintassi dellistruzione Do... Loop composta dalle seguenti parti: Parte condizione istruzioni Descrizione Facoltativa. Espressione numerica o espressione stringa che pu dare come risultato True o False. Se condizione Null, viene considerata come False. Una o pi istruzioni ripetute finch la valutazione di condizione True.

Osservazioni Come metodo per uscire dall'istruzione Do...Loop. viene utilizzata la valutazione di una condizione. Quando le istruzioni Do...Loop sono nidificate, il controllo viene trasferito al ciclo che si trova al livello di nidificazione immediatamente superiore al ciclo appena terminato.

Esercizi: 1) Realizzare un form contenente un pulsate che permetta di ripetere, fino a che lutente sceglie di terminare il programma, linserimento di un numero ed il calcolo del quadrato e del cubo. Visualizzare gli output mediante MsgBox. Nota : per chiedere allutente se desidera continuare lapplicazione o terminarla usare nella casella di MessageBox, come buttom lopzione vbYesNo e per controllare se la risposta positiva controllare che sia uguale a vbYes. 2) Richiamare una macro che permetta di inserire una serie di valori e calcolare separatamente la somma dei positivi e dei negativi. Visualizzare infine tali somme sul foglio excel che ospita il pulsante. 3) Inserire un insieme di valori a piacimento dellutente e visualizzare quanti sono stati inseriti. 4) Sommare i primi numeri naturali fino ad ottenere un mumero maggiore o uguale di un valore prefissato e comunicare quanti valori stato necessario sommare.

39