Sei sulla pagina 1di 57

Uso avanzato di MS Excel

LE BASI DEL FOGLIO ELETTRONICO EXCEL .........................................................................................1


LE BASI DEL FOGLIO ELETTRONICO EXCEL ..........................................................................................4
LE BASI DEL FOGLIO ELETTRONICO EXCEL ..........................................................................................4
GLI ELEMENTI FONDAMENTALI ............................................................................................................................4
LE FORMULE ........................................................................................................................................................4
RIFERIMENTI ........................................................................................................................................................5
NOMI ...................................................................................................................................................................6
TRIDIMENSIONALIT ...........................................................................................................................................6
RIFERIMENTI AD ALTRE CARTELLE ......................................................................................................................6
LE FUNZIONI ........................................................................................................................................................7
Funzioni di base .............................................................................................................................................7
Funzioni logiche.............................................................................................................................................7
Funzione di ricerca verticale .........................................................................................................................9
Funzioni del tempo .........................................................................................................................................9
VISUAL BASIC PER APPLICAZIONI............................................................................................................10
PREMESSE ..........................................................................................................................................................10
ESEMPI BREVI ....................................................................................................................................................10
Esempio 1 Creare una macro dalleditor VBA .........................................................................................10
Esempio 2 La funzione MsgBox ...............................................................................................................11
Esempio 2 Personalizzazione della barra del titolo di Excel ....................................................................12
Esempio 3 Individuazione di colonne nascoste .........................................................................................12
Esempio 4 Eliminazione di un foglio.........................................................................................................12
Esempio 5 Protezione di una macro..........................................................................................................13
Esempio 6 Esecuzione automatica di una macro allapertura..................................................................13
Esempio 7 Conteggio del numero di righe, colonne e fogli ......................................................................13
Esempio 8 Copia di dati ............................................................................................................................14
Esempio 9 Inserimento della data corrente...............................................................................................14
Esempio 10 Controllo del contenuto di una cella .....................................................................................14
Esempio 11 Controllo della posizione di una cella ...................................................................................15
Esempio 12 Eliminazione delle celle vuote ...............................................................................................15
Esempio 13 Funzioni .................................................................................................................................15
LE BASI DI VBA.................................................................................................................................................17
LEDITOR DI VISUAL BASIC ...............................................................................................................................19
Attivazione di VBE .......................................................................................................................................19
Le finestre VBE ............................................................................................................................................20
GESTIONE PROGETTI ..........................................................................................................................................21
Aggiungere un nuovo modulo VBA ..............................................................................................................22
Rimuovere un modulo VBA ..........................................................................................................................23
Esportare e importare oggetti ......................................................................................................................23
LE FINESTRE DI CODICE ......................................................................................................................................23
Minimizzare e massimizzare finestre............................................................................................................23
Mantenimento del codice VBA .....................................................................................................................24
Entrando nel codice VBA .............................................................................................................................25
PERSONALIZZARE LAMBIENTE VBE .................................................................................................................30
La scheda Editor ..........................................................................................................................................30
La scheda Formato editor ............................................................................................................................33
La scheda Generale......................................................................................................................................34
La scheda Ancoraggio..................................................................................................................................34
OGGETTI E COLLEZIONI .....................................................................................................................................35
Loggetto gerarchia......................................................................................................................................35
Le collezioni .................................................................................................................................................36
Riferimento alloggetto ................................................................................................................................36
PROPRIET E METODI ........................................................................................................................................37
Propriet degli oggetti .................................................................................................................................37
Metodi degli oggetti .....................................................................................................................................38
GLI OGGETTI RANGE ..........................................................................................................................................38
La propriet Range ......................................................................................................................................38
La propriet celle .........................................................................................................................................40
COSA SAPERE DEGLI OGGETTI ............................................................................................................................41
Uso avanzato di MS Excel

Concetti essenziali da ricordare...................................................................................................................41


VBA: PROGRAMMAZIONE FONDAMENTALE .........................................................................................43
ELEMENTI DI LINGUAGGIO VBA: UNA PANORAMICA .........................................................................................43
COMMENTI.........................................................................................................................................................43
Ispezione del codice VBA .............................................................................................................................44
VARIABILI, TIPI DI DATI E COSTANTI ..................................................................................................................46
Definizione del tipo di dati ...........................................................................................................................47
Dichiarazione di variabili ............................................................................................................................49
Scopo delle variabili.....................................................................................................................................50
Lavorare con le costanti...............................................................................................................................50
Le stringhe....................................................................................................................................................50
Le date..........................................................................................................................................................50
ESPRESSIONI ASSEGNATE ...................................................................................................................................50
SCHIERAMENTO .................................................................................................................................................50
Esprimere uno schieramento........................................................................................................................50
Dichiarare schieramenti multidimensionali.................................................................................................50
VARIABILI OGGETTO ..........................................................................................................................................50
TIPI DI DATI AD USO DEFINITO ............................................................................................................................50
FUNZIONI DI COSTRUZIONE ................................................................................................................................50
MANIPOLARE OGGETTI E COLLEZIONI ................................................................................................................50
Costruzioni With-End With ..........................................................................................................................50
Costruzioni Each-Next .................................................................................................................................50
CONTROLLO DELLESECUZIONE .........................................................................................................................50
Espressione GoTo ........................................................................................................................................50
Costruzione If-Then......................................................................................................................................50
Costruzioni Select Case................................................................................................................................50
Looping di blocchi di istruzioni....................................................................................................................50
USO DI COMPONENTI ESTERNE .................................................................................................................50
LETTURA DI FILES METEO CON PAR_CSDLL.DLL.............................................................................................50
CALCOLO EVAPOTRASPIRAZIONE CON ET_CSDLL.DLL ....................................................................................53

Uso avanzato di MS Excel

Le basi del foglio elettronico Excel

Gli elementi fondamentali


I file di Excel hanno estensione XLS e sono denominati Cartelle di lavoro, che
a loro volta contengono pi Fogli. Un foglio di Excel suddiviso in righe
(65536) e colonne (256). Lelemento fondamentale del foglio di lavoro
costituito dalla cella, a sua volta caratterizzata dal riferimento che la individua.
Ad esempio, A1 la prima cella, C3 la cella posta allincrocio tra la terza
colonna (C) e la terza riga (3).
Excel accetta due tipi di dati in una cella: le costanti e le formule.

Le costanti sono suddivise in tre categorie principali


o Valori numerici: 57, 9%, 125000
o Testi: azoto lisciviato, N. 20, output
o Data e ora: 18/11/2002, 21.00
o Valori logici: FALSO, VERO
o Valori di errore: #DIV/0!, #NOME?, #RIF!, #VALORE!
Le formule sono una serie di istruzioni, che possono essere composte
da costanti, o da riferimenti a costanti oppure da operatori aritmetici, atte
ad ottenere dei risultati. Laddizione un esempio di formula.

Sulle celle si possono fare diverse operazioni: selezione celle, cancellazione


contenuto, modifica contenuto, formattazione contenuto, trascinamento
contenuto, dimensionamento, inserimento celle, eliminazione celle, stampa
contenuto.
Anche i fogli di lavoro permettono diverse operazioni: movimento tra fogli,
aggiunta fogli, eliminazione fogli, rinomina fogli, spostamento fogli,
duplicazione fogli, stampa contenuto, lavoro simultaneo su pi fogli.
Questultima operazione definisce la propriet della tridimensionalit (vedere
paragrafo Tridimensionalit).

Le formule
Le formule sono espressioni aritmetiche del tipo 10+5.
Una formula viene digitata in una cella nella forma del tipo: =10+5.
Il segno uguale segnala al programma che i caratteri seguenti danno vita a una
formula.
Dopo la conferma (tasto Invio) la cella visualizza il valore 15.
Gli OPERATORI ARITMETICI - noti come PI, MENO, PER, DIVISO in un
PC assumono la seguente forma: +, -, *, /.
Lespressione: =10+5*2 d come risultato 20. Lespressione: =(10+5)*2 d
come risultato 30.
Una formula pu anche gestire valori di testo. Se la cella A1 contiene il nome
Modello, introducendo la formula =A1 in unaltra cella, anchessa visualizzer
Modello. Questo un valore stringa.
possibile concatenare (unire) diversi valori di testo usando loperatore
spaziale & (e commerciale). Avendo in A1 Modello e in B1 colturale,
introducendo in unaltra cella la formula =A1&B1 si ottiene Modellocolturale.
Uso avanzato di MS Excel

Per inserire uno spazio tra sostantivo e aggettivo, la formula va modificata


come: =A1&
&B1. Questultima formula usa due operatori di
concatenamento (&) e una costante di stringa, cio lo spazio racchiuso tra le
doppie virgolette.
Loperatore & pu concatenare anche celle contenenti valori numerici. Se la
cella A1 contiene 10 e la cella B1 5, inserendo la formula =A1&B1 in unaltra
cella si ottiene 105. Questo valore risulta trasformato in un valore di testo, ma
pu essere usato per qualsiasi operazione matematica.
Quando le formule diventano complesse pu diventare difficile capire a quali
celle facciano riferimento. In aiuto viene lopzione Verifica formule, richiamabile
dal menu Visualizza/Barre degli strumenti. Posizionandosi su di una cella
contenente una formula e cliccando sul primo pulsante, Individua precedenti,
sono indicate con delle frecce tutte le celle a cui la formula fa riferimento.
Posizionandosi su una cella contenente una costante (valore) e cliccando sul
terzo pulsante, Individua dipendenti, se alla costante fa riferimento una
formula, la freccia indica la cella contenente la fomula.

Riferimenti
Nelluso corretto di Excel le formule non devono contenere quasi mai i valori,
ma i riferimenti ai valori. Si introducano nella cella C1 il valore 10, in C2 il
valore 5, infine in C3 il valore 2. Digitando in unaltra cella la formula
=C1+C2*C3 si ottiene il valore 20. Questa modalit permette di variare il
risultato al variare dei valori nelle celle a cui la cella del risultato fa riferimento.
La variazione automatica del risultato avviene se in menu Strumenti, voce
Opzioni, scheda Calcolo abilitata lopzione Ricalcolo automatico (di default).
Altrimenti si pu disabilitare il ricalcolo automatico e rendere attivo il Ricalcolo
manuale. In questo caso, una volta variati gli input della formula, occorre
premere F9 per aggiornare il risultato.
In base alloperazione che si desidera eseguire, possibile scegliere tra i
riferimenti relativi, misti o assoluti. Se la cella B1 contiene il valore 10 e la cella
A2 contiene la formula =B1, in A2 riportato il valore 10. Questo un esempio
di riferimento relativo. Quando si trascina o copia una formula che utilizza i
riferimenti relativi, i riferimenti della formula trascinata o incollata vengono
modificati automaticamente per adeguarsi alla nuova posizione della formula.
Se A2 contiene la formula =B1, B1 contiene 10, B2 contiene 15, trascinando o
copiando la formula di A2 in A3, questa mostra 15.
I riferimenti assoluti invece non vengono adeguati durante il trascinamento o la
copia di una formula in una cella differente. Se in A3 contenuto 10, in C3 5, in
C4 2, e in B1 la formula =A3*C3, B1 mostra 50. Trascinando la cella B1 in B2
si ottiene 0, ovvero il risultato della formula =A4*C4. Questo trascinamento
rappresenta un errore. Per bloccare il riferimento ad A3 occorre trasformare la
formula della cella B1 in =$A$3*C4. Il risultato in B2 sar cos 20.
Un riferimento assoluto del tipo =$A$3 impedisce ladeguamento dei riferimenti
sia che si operi un trascinamento verticale che orizzontale. I riferimenti misti
consentono di bloccare verticalmente, ma non orizzontalmente, o viceversa.
Nella formula =A$3*$C5 con =A$3 si permettono gli adeguamenti orizzontali,
cio il cambiamento di colonna e si bloccano gli spostamenti verticali, cio i
cambi di riga. Il riferimento $C5 opera esattamente il contrario.

Uso avanzato di MS Excel

Nomi
possibile utilizzare un nome per rappresentare una formula o un valore
costante tramite la Casella del nome, a sinistra della Barra della formula.
Digitare il nome desiderato e premere INVIO. Se si denominano Bob e Dilan le
celle C2 e B4, che contengono i valori 10 e 5, si pu ottenere il risultato della
somma in A1, digitando in questa cella la formula =Bob+Dilan. Fare uso dei
nomi equivale allutilizzo di un riferimento assoluto. Per rimuovere un nome di
cella, ad esempio Dilan, si opera dal menu Inserisci/Nome, voce Definisci
nome, dalla quale si seleziona Dilan e poi si clicca sul pulsante Elimina.
Un nome, oltre che a una cella pu essere attribuito anche a una costante. Un
esempio il calcolo in Euro. Dal menu Inserisci/Nome si sceglie la voce
Definisci. Nella casella Nomi della cartella di lavoro: si digita euro e si clicca
Aggiungi, mentre nella casella Riferito a: si digita =1936.27 e si conferma con
OK. Se ora in una cella qualsiasi si digita =euro, viene restituito 1936.27, se si
digita =10*euro si ottiene 19362.7, ecc.
La tecnica di attribuire i nomi alle celle pu anche riguardare intervalli di celle.

Tridimensionalit
La tridimensionalit una operazione tipica di Excel. Word infatti un
programma bidimensionale: i suoi documenti hanno sempre uno sviluppo
orizzontale e verticale. Diversamente Excel si pu sviluppare anche in
profondit, cio su pi fogli contemporaneamente. Tra le implicazioni della
tridimensionalit c il consolidamento dei dati.
Si nominino 12 fogli con i riferimenti ai mesi dellanno (Gen, Feb, Mar, ) pi
un foglio di riepilogo. Ad esempio se di un modello di auto sono stati venduti 10
esemplari a gennaio, 15 a febbraio, 5 a dicembre, si vuole ottenere il totale
delle vendite nel foglio riepilogativo. Il numero di vetture riportato nella cella
F10 dei tre fogli mensili. Per ottenere il totale nella cella B3 del foglio
riepilogativo, si procede come segue:
posizionarsi nella cella B3 del foglio riepilogativo e digitare =;
attivare il foglio Gen e cliccare sulla cella F10;
premere il tasto + , attivare il foglio Feb e poi la cella F10;
premere il tasto + , attivare il foglio Dic e poi la cella F10;
finiti i fogli dei quali si vogliono sommare i valori, si conferma
limmissione della formula con un INVIO.
Il risultato ottenuto nella cella B3, 30, corrisponde alla formula:
=Gen!F10+Feb!10+Dic!10. Il punto esclamativo permette a Excel di capire
che il nome che lo precede appartiene a un foglio di lavoro.
Se si modifica il valore in F10 del foglio Gen, da 10 a 20, il risultato in B3 del
foglio riepilogativo diventa 40. La possibilit di creare formule che operano su
pi fogli prende il nome di Consolidamento tridimensionale dei dati.

Riferimenti ad altre cartelle


Oltre ai fogli della cartella a cui appartengono, le formule possono fare
riferimento ai fogli posti in cartelle diverse. Si hanno in questo caso i Riferimenti
esterni. Se si lavora con una cartella posizionata sul Desktop per fare
riferimento alla cella D3 del foglio Films di una seconda cartella di lavoro dal
Elenco.xls,
nome
sempre
collocata
sul
Desktop,
si
digita:
Uso avanzato di MS Excel

=[Elenco.xls]Films!D3. Dopo aver confermato la formula la sintassi


viene adeguata con lintero percorso del file: ='C:\Documents and
Settings\Administrator\Desktop\[Nuovo Foglio di lavoro di
Microsoft Excel.xls]Films'!$D$3. Ogni volta che si apre una cartella
di lavoro contenente riferimenti ad altre cartelle, viene chiesto di aggiornare o
meno i collegamenti allaltra origine dei dati.

Le funzioni
Le funzioni sono formule predefinite che rendono pi veloci operazioni ripetitive
(es., sommare il contenuto di pi celle) o pi facili operazioni complesse (es.,
unanalisi statistica).
La sintassi generale delle funzioni del tipo: =NomeFunzione(Argomenti).
Anzich digitare direttamente una funzione in una cella si pu ricorrere agli
automatismi del comando Inserisci funzione, richiamabile dalla barra degli
strumenti Standard. Si tratta di una metodologia non molto efficiente ma che
costituisce un potente strumento conoscitivo per esplorare e studiare la
notevole quantit di funzioni messe a disposizioni da Excel.

Funzioni di base
La funzione SOMMA rappresenta uno degli elementi fondamentali di Excel.
Volendo sommare nella cella A6 le prime quattro celle della colonna A, si digita
in A6: =SOMMA(A1:A4). Per sommare le prime quattro celle della colonna A e
della colonna C si digita: =SOMMA(A1:A4;C1:C4). Per sommare tutti i numeri
presenti nelle prime quattro celle delle colonne A, B e C si digita:
=SOMMA(A1:C4). La funzione Somma serve anche ad addizionare valori
contenuti in fogli diversi. Se dodici fogli sono nominati con i riferimenti dei mesi
(Gen, , Dic) e si volessero sommare i valori contenuti nella cella A1 di tutti i
fogli la formula diventa: =SOMMA(Gen:Dic!A1). Analogamente si possono
sommare anche intervalli di celle di cartelle diverse. La funzione che segue
effettua la somma dellintervallo di celle A1:C3 locato nel Foglio2 dellla cartella
Comuni.xls: =SOMMA([Comuni.xls]Foglio2!$A$1:$C$3).
Le funzioni MAX, MIN, MEDIA sono le tre funzioni statistiche pi semplici. Le
funzioni =MAX(A1:C4), =MIN(A1:C4), MEDIA(A1:C4) restituiscono,
rispettivamente, il valore massimo, minimo e medio dei valori contenuti nelle
prime quattro celle delle colonne A, B e C.
Altre due semplici funzioni statistiche sono MODA, che restituisce il valore pi
ricorrente di un intervallo di dati, e MEDIANA, che restituisce il numero che
occupa la posizione centrale di un insieme di numeri.

Funzioni logiche
La funzione SE rappresenta uno degli elementi fondamentali di Excel e non se
ne pu prescindere volendo operare con VBA. Serve a mettere a confronto due
elementi, ovvero a eseguire un TEST CONDIZIONALE. Il risultato di un test
condizionale un valore logico VERO oppure FALSO. Ogni test condizionale
include almeno un Operatore di confronto.
Uso avanzato di MS Excel

OPERATORI DI CONFRONTO
>
Diverso
<
Maggiore o uguale
=
Minore o uguale

Maggiore
Minore
Uguale

<>
>=
<=

SE
La
sintassi
generale
della
funzione
logica
:
=SE(Condizione,Vero,Falso).
Se
si
digita
in
una
cella
=SE(A1>20000,Procedere,Abbandonare) nella cella compare la
dicitura Procedere se il valore di A1 superiore a 20000, altrimenti
Abbandonare. Anzich restituire del testo si possono alloccorrenza usare
numeri o espressioni matematiche, ad esempio:
=SE(A1>20000,A1+A1*10%;Abbandonare). In questo caso se la
condizione imposta vera, ad esempio il valore 30000, viene restituito il
valore maggiorato del 10%, cio 33000.
Altre funzioni logiche sono utili a sviluppare test condizionali complessi, cio E,
O, NON, quasi sempre abbinate alla funzione SE.
E
La
funzione
logica
ha
la
sintassi
generale
=E(Condizione1,Condizione2), che restituisce:
=E(Vero,Vero)
=E(Vero,Falso)
=E(Falso,Falso)

VERO
FALSO
FALSO

Se si digita in A3 =E(A1>5,A2>10), la cella restituisce VERO se le celle A1 e


A2 contengono valori maggiori di 5 e 10. Se uno dei due numeri risulta minore
o uguale al valore con cui si confronta, il risultato diventa FALSO. Le condizioni
possono essere incrementate oltre le due dellesempio.
La funzione logica O la sintassi generale =O(Condizione1,Condizione2),
che restituisce
=O(Vero,Vero)
=O(Vero,Falso)
=O(Falso,Falso)

VERO
VERO
FALSO

Se si digita in A3 =O(A1>5,A2>10), la cella restituisce VERO se almeno una


delle celle A1 e A2 contiene valori maggiori di quelli di confronto. Con O solo se
entrambe le condizioni danno esito negativo si ottiene il responso FALSO.
La funzione logica NON nega una condizione. Se si digita
=SE(NON(A1=6),Scarso,Bravo) si chiede alla funzione di restituire il
valore Scarso se il valore della cella A1 non 6.
Se per essere promossi in una scuola occorre la media del 6 e un numero di
assenze inferiore a 5, per ciascuno studente registrato in un foglio elettronico si
pu impostare un test condizionale del tipo:
=SE(E(C2>=6,D2<5), Promosso,Respinto)
In questo caso la funzione SE deve avvalersi della funzione E perch non
riesce a testare pi condizioni da sola.
Luso di una o pi funzioni allinterno di unaltra funzione corrisponde alla
tecnica di Nidificazione. La funzione
=SE(A1>80,"Ottimo",SE(E(A1>50,A1<=80),"Medio","Scarso"))
permette di esprimere tre giudizi alternativi. La tecnica usata prevede la
Uso avanzato di MS Excel

nidificazione della funzione SE inserendo al suo interno unaltra funzione SE


con lausilio della funzione E. La procedura ulteriormente espandibile, per
esempio:
=SE(A1>80,"Ottimo",SE(E(A1>50,A1<=80),"Medio",
SE(E(A1>40,A1<=50),"Scarso", "Insufficiente")))
Il principio resta immutato: allinterno di un argomento, vero o falso, anche di
un SE gi nidificato, si pu porre unaltra funzione. Il limite alle nidificazioni
fissato a 7.

Funzione di ricerca verticale


La funzione di ricerca CERCA.VERT ha la seguente sintassi generale:
=CERCA.VERT(valore,matrice_tabella,indice,intervallo)
Largomento intervallo facoltativo e pu assumere il valore di VERO o
FALSO.
Lesempio =CERCA.VERT(Milano,A3:E7,4) recita nella prima colonna
della matrice A3:E7, posizionarsi nella cella che contiene Milano, quindi
rimanendo sulla stessa riga, spostarsi alla quarta colonna e restituire il valore
contenuto in quella cella. Questa funzione effettua la ricerca del primo
argomento sempre nella prima colonna della matrice. Se non viene impostato
largomento opzionale intervallo, viene assunto per default il valore VERO.
Con VERO la funzione ricerca nella prima colonna, iniziando dalla prima cella e
procedendo verso il basso, fino a localizzare un valore maggiore di quello
specificato. Gli elementi della prima colonna devono quindi essere ordinati in
modo crescente. Se largomento intervallo impostato su FALSO non
obbligatorio ordinare la prima colonna perch viene ricercata solo la ricorrenza
esatta.
CERCA.VERT la funzione di ricerca pi utilizzata, ma risultano utili anche le
funzioni INDIRETTO e CONFRONTA.

Funzioni del tempo


In Excel le date sono immesse nel formato gg/mm/aaaa, ma il programma
assegna a ciascuna data un valore seriale, cio un numero sequenziale tra 1
(1 gennaio 1900) e 2958465 (31 dicembre 9999). Il formato comunque
modificabile dal menu Formato, voce Celle, scheda Numero, categoria Data.
Assegnando valori seriali ai giorni (ma anche alle ore e ai minuti), Excel
consente di eseguire formule e funzioni anche complesse. Per ottenere la data
che ricorre 200 giorni dopo il 03/09/2000, se questa data locata in A1,
possibile usare la formula =A1+200 per ottenere 22/03/2001. Calcolare quante
settimane intercorrono tra il 01/09/2002 e il 20/10/2002 richiede la formula:
=(20/10/2002-01/09/2002)/7, con la quale si ottiene il risultato di 7
settimane. Lo stesso risultato si ottiene digitando le date in due celle e facendo
la sottrazione delle celle. Se sono impostati i settaggi anglo-sassoni le date
vanno immesse nel formato mm/gg/aaaa.
Calcolare quante ore e minuti sono trascorsi dalle 10.10 alle 16.17 richiede la
formula =16.17-10.10 per ottenere 6.07.

Uso avanzato di MS Excel

Visual Basic per Applicazioni


Premesse
Molti programmatori non considerano lipotesi di programmare in BASIC. Il nome
stesso (acronimo di Beginners All-purpose Symbolic Instruction Code) indica che
non un linguaggio professionale. BASIC venne sviluppato per la prima volta agli
inizi degli anni 60 come metodologia per insegnare tecniche di programmazione a
studenti universitari. Successivamente, BASIC ha preso piede velocemente ed ora
disponibile in svariati linguaggi per molti tipi di computers.
Allinizio BASIC era un interprete di linguaggio con delle prestazioni particolarmente
lente poich ogni linea di codice doveva essere interpretata prima di poter essere
eseguita. I linguaggi pi moderni di BASIC permettono la compilazione del codice,
risultando cos molto pi veloci.
BASIC si guadagn piena stima nel 1991 quando la Microsoft realizz Visual Basic
per Applicazioni (VBA), rendendo particolarmente semplice lo sviluppo di applicazioni
per Windows. Visual Basic ha veramente molto poco in comune con le prime versioni
di BASIC, nonostante BASIC sia il fondamento sul quale VBA stato costruito e
sviluppato.
Con Excel 5, Visual Basic per Applicazioni stato per la prima volta reso disponibile
sul mercato. VBA costituisce il miglior esempio di linguaggio disponibile nelle
applicazioni Microsoft e viene oggi incluso in tutte le applicazioni di Office 2002,
perfino in applicazioni di altri produttori di software. Il VBA appartiene alla famiglia del
linguaggio di programmazione Visual Basic (VB), con cui condivide sintassi e
struttura, ma da cui si differenzia per contenere gli oggetti peculiari di una
applicazione Windows. Per esempio, il connubio Excel e VBA offre la possibilit di
creare potenti strumenti informativi completamente automatizzati utilizzando gli
oggetti di un foglio elettronico. Infatti, in Excel esistono numerosi oggetti come fogli di
lavoro, grafici, tabelle pivot, scenari, funzioni matematiche, finanziarie, ecc.
Progressivamente (a partire da Office 97) il VBA stato esteso a tutte le applicazioni
Microsoft, in modo da diventare un unico linguaggio di programmazione nella
specificit dei rispettivi ambienti di lavoro e favorire cos la sinergia tra diversi
programmi (ad esempio tra Access ed Excel).

Esempi brevi
In questo capitolo vengono riportati alcuni brevi esempi sulluso di VBA. I concetti di
base sono qui solo accennati e saranno approfonditi nei capitoli successivi, dove
esamineremo i rudimenti della programmazione in VBA. Lo scopo quindi solo
quello di un primo approccio che consenta di vedere alcune funzionalit di Excel
abitualmente ignorate dagli utenti.

Esempio 1 Creare una macro dalleditor VBA


Lapprendimento della sintassi di VBA semplificato dal Registratore di Macro di
Excel. Per registrare una macro denominata Comunicare, selezionare dal menu
Strumenti/Macro/ Macro):

Uso avanzato di MS Excel

10

Scrivete Comunicare nella finestra Nome macro: e quindi Crea. Si entra


nellambiente VBA, costituito da una finestra in cui riportato il codice con le
istruzioni:
Sub Comunicare()
.
.
.
End Sub

Queste istruzioni definiscono una procedura, che include altre istruzioni


precedute da un apice (di colore verde). Sono commenti che possono essere
cancellati. Nello spazio della Sub (prima di End Sub) si possono scrivere le
istruzioni che interessano.
Si ritorna al foglio di Excel e si inserisce unimmagine (ad esempio una clipart:
Inserisci/Immagine/Clipart). Posizionando il puntatore del mouse sopra
limmagine.e cliccando il tasto destro compare il menu contestuale dal quale si
pu selezionare Assegna macro. Dalla finestra di dialogo che appare si pu
selezionare Comunicare e cliccare OK. Quando con il puntatore del mouse si
passa sopra limmagine compare una mano e cliccando viene eseguita la
macro (ovvero linsieme delle istruzioni in essa inserite). Fino a questo punto
abbiamo creato una macro, chiamata Comunicare, e questa macro (per ora
vuota) attivata dal un click sullimmagine posta sul foglio di lavoro.

Esempio 2 La funzione MsgBox


La funzione MsgBox utile a scrivere frasi.
Inserire in una procedura
MsgBox "Ciao come stai"

Per esempio:
Sub Comunicare()
MsgBox "Ciao come stai"
End Sub

Eseguendo la macro si visualizza una finestra di messaggio riportante Ciao


come stai.
La funzione MsgBox fastidiosa da usare quando le frasi sono lunghe. Per
mandarle a capo nel punto desiderato si ricorre alla costante vbCr, come
nellesempio seguente:
Uso avanzato di MS Excel

11

Sub Comunicare()
MsgBox "Ciao come stai" & vbCr & _
Io sto bene
End Sub

Esempio 2 Personalizzazione della barra del titolo di Excel


Inserire in una procedura le istruzioni
Application.Caption = "Sistemi colturali"

Per esempio:
Sub Caption()
Application.Caption = "Sistemi colturali"
End Sub

Nella barra del titolo del programma Microsoft Excel viene sostituito con
Sistemi colturali.

Esempio 3 Individuazione di colonne nascoste


Inserire in una procedura le istruzioni
If Columns("C:D").Hidden Then
Columns("C:D").Hidden = False

Per esempio
Sub Colonne_Nascoste()
If Columns("C:D").Hidden Then
Columns("C:D").Hidden = False
End If
End Sub

Eseguendo la macro se le colonne C e D sono scoperte non accade nulla. Se


sono nascoste vengono mostrate.

Esempio 4 Eliminazione di un foglio


Inserire in una procedura le istruzioni
Sheets(2).Delete

Per esempio:
Sub Elimina_foglio()
Sheets(2).Delete
End Sub

Eseguendo questa macro si visualizza una finestra di messaggio riportante


Nei fogli potrebbero esistere dei dati. Per eliminarli in modo permanente
scegliere Elimina. Cliccando Elimina il foglio denominato Foglio2 viene
cancellato, cliccando Annulla leliminazione non viene eseguita.
Se si inserisce nella riga precedente alle istruzioni di eliminazione del foglio la
seguente istruzione:
Application.DisplayAlerts = False

la finestra di messaggio non viene visualizzata e lesecuzione della macro


determina leliminazione immediata di Foglio2. opportuno ripristinare la
visualizzazione dei messaggi alla fine della procedura con la seguente
istruzione:
Application.DisplayAlerts = True

Il codice completo risulta:


Sub Elimina_foglio()
Application.DisplayAlerts = False
Sheets(2).Delete
Application.DisplayAlerts = True
Uso avanzato di MS Excel

12

End Sub

Esempio 5 Protezione di una macro


Chi crea macro pu precludere ad altri utenti la visualizzazione del loro
contenuto. Dal menu Strumenti scegliere la voce Macro/Editor di Visual Basic.
Compare leditor di VBA e dal suo menu Strumenti selezionare la voce
Propriet di VBAProject. Scegliere la scheda Protezione ove possibile
immettere la password per proteggere laccesso al codice della macro.

Esempio 6 Esecuzione automatica di una macro allapertura


Per far eseguire una macro allapertura della cartella di lavoro si possono usare
due metodi: Auto Open e Workbook Open.
Nel primo caso il codice deve essere allocato in un modulo. Per esempio si pu
far comparire il messagio Ciao!, con il codice
Sub Auto_Open()
Msgbox "Ciao!"
End Sub

Nel secondo caso il codice deve essere allocato nel workbook. Cliccare due
volte This workbook dalleditor di VBA, finestra a sinistra denominata Progetto
VBAProject (se non visibile richiamarla da Visualizza/Gestione progetti).
Cliccare il menu in alto denominato (generale) e sceglere Workbook.
Sulleditor compare il seguente codice:
Private Sub Workbook_Open()
End Sub

Immettere listruzione MsgBox "Ciao!". Il codice compelto risulta:


Private Sub Workbook_Open()
MsgBox "Ciao!"
End Sub

Esempio 7 Conteggio del numero di righe, colonne e fogli


La seguente macro conta il numero di righe in un intervallo di celle:
Sub ContaRighe()
Dim ContaRighe As Single
Range("E1:E3").Select
ContaRighe = Selection.Rows.Count
MsgBox (ContaRighe)
End Sub

In particolare viene contato il numero delle righe dellintervallo di celle E1:E3


(cio 3) e visualizzato in una finestra di messaggio. Sostituendo Rows con
Columns viene restituito il numero delle colonne (in questo caso 1):
Sub ContaColonne()
Dim ContaColonne As Single
Range("E1:E3").Select
ContaColonne = Selection.Rows.Count
MsgBox (ContaColonne)
End Sub

Il seguente codice serve a contare il numero di fogli in una cartella:


Sub ContaFogli()
Dim ContaFogli As Single
ContaFogli = Application.Sheets.Count
MsgBox (ContaFogli)
Uso avanzato di MS Excel

13

End Sub

Esempio 8 Copia di dati


La copia di dati contenuti in un intervallo di celle pu essere fatta con la
seguente macro:
Sub CopiaRange()
Range("A1:A3").Copy Destination:=ActiveCell
End Sub

In particolare i dati contenuti nellintervallo di celle A1:A3 vengono copiati in un


intervallo corrispondente che ha inizio dalla cella attiva. Lattivazione di una
cella avviene posizionando in quella cella il cursore del mouse o
raggiungendola con le frecce direzionali. Se si posiziona il mouse in G1,
lesecuzione della macro copia i valori di A1:A3 in G1:G3.
Per copiare i dati nella cella attiva di un altro foglio, per esempio Foglio3, il
codice diventa:
Sub CopiaRange()
Foglio3.Range("A1:A3").Copy Destination:=ActiveCell
End Sub

Esempio 9 Inserimento della data corrente


Pu essere utile inserire la data corrente in una cartella di lavoro prima di
salvarla. Il codice deve essere contenuto in This workbook. Cliccare il menu
in alto denominato (dichiarazioni) e sceglere BeforeSave.
Private Sub Workbook_Open()
End Sub

Immettere listruzione Range("A1") = Now. Il codice completo risulta:


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Range("A1") = Now
End Sub

Lesecuzione della macro assegna alla cella A1 la data corrente nel formato
gg/mm/aaaa hh:mm AM (o PM).

Esempio 10 Controllo del contenuto di una cella


La macro seguente visualizza una finestra di messaggio che informa se la cella
attiva contiene testo, date, formule o vuota:
Sub ControlloContenuto()
If Application.IsText(ActiveCell) = True Then
MsgBox "Testo"
Else
If ActiveCell = "" Then
MsgBox "Cella vuota"
Else
End If
If ActiveCell.HasFormula Then
MsgBox "Formula"
Else
End If
If IsDate(ActiveCell.Value) = True Then
MsgBox "Data"
Else
End If
End If
Uso avanzato di MS Excel

14

End Sub

Esempio 11 Controllo della posizione di una cella


La macro seguente visualizza una finestra di messaggio che informa sulla
posizione relativa della cella attiva. Ad esempio 6,4 indica che la cella attiva
quella posizionata sulla sesta riga e sulla quarta colonna:
Sub Posizione()
myRow = ActiveCell.Row
myCol = ActiveCell.Column
MsgBox myRow & "," & myCol
End Sub

Esempio 12 Eliminazione delle celle vuote


La macro seguente elimina le celle vuote contenute in un intervallo di celle di
una colonna selezionato dallutente:
Sub CancellaRigheVuote()
Rng = Selection.Rows.Count
ActiveCell.Offset(0, 0).Select
Application.ScreenUpdating = False
For i = 1 To Rng
If ActiveCell.Value = "" Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Next i
Application.ScreenUpdating = True
End Sub
Sostituendo "" con 0 vengono cancellate le celle contenenti 0.
La dichiarazione Application.ScreenUpdating = False previene

lo schermo
dallaggiornamento e dal tremolio e assicura lesecuzione rapida della macro.
sempre opportuno ripristinare il valore True alla fine della procedura.
Questa macro utilizza il loop For Next. Le dichiarazioni For Next funzionano
come un contatore nellambito di un intervallo selezionato e determinano
linterruzione della macro.

Esempio 13 Funzioni
La creazione di funzioni complesse pu essere fatta in modo pi semplice
utilizzando il codice invece che il foglio elettronico. Nellesempio riportato viene
calcolata una imposta sul reddito usando la dichiarazione Select Case in base
al seguente scenario:
- i primi 5000 euro non sono tassabili;
- i successivi 2500 euro sono tassati al 22%;
- ogni importo superiore a 7500 euro tassato al 25%.
Digitare in A1 Reddito e in B1 il relativo ammontare, per esempio 20000. In A2
digitare Imposta e in B2 =tax(B1).
Il codice il seguente:
Public Function tax(income As Single)
Select Case income
Case Is <= 5000
tax = 0
Case Is <= 7500
tax = (7500 - 5000) * 0.22
Uso avanzato di MS Excel

15

'in questo caso 550


Case Else
tax = (income - 7500) * 0.25 + 550
End Select
End Function

Il risultato in B2 3675 euro: (75005000)*22%+(20000-7500)*25%.

Uso avanzato di MS Excel

16

Le basi di VBA
Lelenco che segue un breve sommario di tutto quello che riguarda VBA:
 Con VBA compi delle azioni eseguendo il suo codice.
 Con VBA scrivi (o registri) il codice che viene mantenuto in un modulo VBA.
I moduli vengono memorizzati in un libro di lavoro Excel, che puoi vedere o
aprire usando il Visual Basic Editor (VBE).
 Un modulo VBA si compone di procedure.
Una procedura essenzialmente una unit di codice di computer che esegue
alcune azioni. Qui c un esempio di una semplice procedura Sub chiamata
Test che calcola una somma e mostra il risultato in un box di messaggio.
Sub

End

Test( )
Somma = 1 + 1
MsgBox La risposta & Somma
Sub

In questo caso la risposta 2.


 Oltre alle procedure Sub, un modulo VBA pu anche avere procedure
Function.
Una procedura Function restituisce un valore singolo (o una matrice). Una
funzione pu essere chiamata da unaltra procedura VBA, o usata in una
formula di foglio di lavoro. Qui c un esempio di una funzione chiamata
AddTwo:
Function AddTwo(arg1 , arg2)
AddTwo = arg1 + arg2
End
Function

 VBA manipola oggetti contenuti allinterno dellambiente in cui si lavora (in


questo caso Excel lospite dellapplicazione).
Excel offre pi di 100 classi di oggetti da manipolare. Esempi di oggetti sono il
libro di lavoro, il foglio di lavoro, lintervallo di fogli di lavoro, un grafico, ecc.
Sono disponibili anche altri oggetti usando il codice VBA.
 Le classi oggetto sono disposte gerarchicamente.
Gli oggetti possono agire come contenitori per altri oggetti. Per esempio, Excel
un oggetto chiamato Application e contiene altri oggetti, come un Workbook
e CommandBar. Loggetto Workbook pu contenere altri oggetti, come Worksheet
e Chart. Loggetto Worksheet pu contenere oggetti quali Range, PivotTable, e
cos via. La disposizione di questi oggetti riferita al modello di Excel object.
 Come gli oggetti formano una collezione.
Per esempio, la collezione Worksheets consiste di tutti i fogli di lavoro in un
particolare libro di lavoro. La collezione CommandBars comprende tutti gli oggetti
CommandBar. Le collezioni sono loro stesse degli oggetti.

Uso avanzato di MS Excel

17

 Quando si fa riferimento ad un contenuto o ad un elemento oggetto, bisogna


specificare la posizione nella gerarchia degli oggetti usando un punto come
separatore del contenitore dallelemento.
Per esempio, si pu fare riferimento ad un libro di lavoro chiamato Book1.xls
come
Application.Workbooks(Book1.xls)

Questo si riferisce al libro di lavoro Book1.xls nella collezione Workbooks. La


collezione Workbooks contenuta nelloggetto Excel Application. Estendendo
questo ad un altro livello, si pu far riferimento a Sheet1 in Book1 come:
Application.Workbooks(Book1.xls).Worksheets(Sheet1).Range(A1)

 Se si omette un riferimento specifico ad un oggetto, Excel usa gli oggetti attivi.


Se Book1 il libro di lavoro attivo, il precedente riferimento pu essere
semplificato come
Worksheets(Sheet1).Range(A1)

Se Sheet1 il foglio attivo, si pu ulteriormente semplificare il riferimento cos:


Range(A1)

 Gli oggetti hanno propriet


Una propriet pu essere considerata come la struttura di un oggetto. Per
esempio, un oggetto Range ha propriet come Value e Name. Un oggetto grafico
ha propriet come HasTitle and Type. Si pu usare VBA per determinare e/o
cambiare le propriet di un oggetto.
 Si assegna una propriet combinando loggetto con la propriet, separandoli
con un punto.
Per esempio, si pu far riferimento al valore nella cella A1 nel foglio 1 come:
Worksheets(Sheet1).Range(A1).Value

 Si possono assegnare valori alle variabili VBA. Ad ogni variabile si pu


attribuire un nome indicativo del valore della variabile stessa.
Per assegnare il valore nella cella A1 nel foglio 1 di una variabile chiamata
Interesse, si usa la seguente espressione VBA:
Interesse = Worksheets(Sheet1).range(A1).Value

 Gli oggetti hanno metodi.


Un metodo unazione che compie loggetto. Per esempio, uno dei metodi per
loggetto Range ClearContents. Questo metodo cancella il contenuto
dellintervallo.
 I metodi vengono indicati combinando loggetto con il metodo, separandoli
con un punto.

Uso avanzato di MS Excel

18

Per esempio, per cancellare il contenuto della cella A1 nel foglio di lavoro
attivo, si usa:
Range(A1).ClearContents

 VBA inoltre include tutte i costrutti dei moderni linguaggi di programmazione


per esempio matrici, loop, e cos via.
Fino qui stata fornita una descrizione a grandi linee di VBA. Adesso si pu entrare
nei dettagli.

Leditor di Visual Basic


In Excel 5 e Excel 95, un modulo VBA appariva come un foglio in un libro di lavoro.
Da Excel 97 in poi, i moduli VBA non sono pi stati visualizzati come fogli di lavoro e
si passati alluso di Visual Basic Editor (VBE) per visualizzare e per operare con i
moduli VBA.
I moduli VBA non sono visibili a meno che VBE non venga attivato.
VBE una applicazione separata ma dipendente da Excel. Non possibile avviare
VBE separatamente da Excel.

Attivazione di VBE
Quando si lavora in Excel, si pu passare a VBE in uno dei seguenti modi:
 Premendo Alt+F11.
 Selezionando Strumenti/Macro/Visual Basic Editor.
 Ciccando il pulsante Visual Basic Editor (
di Visual Basic.

), posto nella barra degli strumenti

Non bisogna confondere Visual Basic Editor e Microsoft Script Editor:


sono due cose completamente diverse. Script Editor usato per
compilare script HTML scritti in VBScript o JavaScript. Lo Script Editor
non verr descritto in questa sede.

La figura seguente mostra VBE. Probabilmente, la vostra finestra VBE non si


presenta esattamente come quella mostrata in figura. Le finestre si possono
nascondere, ridurre, ingrandire e riorganizzare.

Uso avanzato di MS Excel

19

Le finestre VBE
VBE costituito da diverse componenti. Di seguito viene fornita una breve
descrizione delle componenti chiave.
Barra menu
La barra del menu di VBE funziona come ogni altra barra di menu. Essa contiene
comandi che si usano per lavorare con le varie componenti di VBE. Inoltre esistono
delle opzioni veloci per molti comandi del menu VBE. Per esempio, il comando
Visualizza/Finestra Immediata ha come via breve Ctrl+G.
VBE configura i menu abbreviati. Ciccando con il tasto destro su
qualunque cosa nella finestra di VBE si ottiene un menu di
abbreviazioni dei comandi pi comuni.
Barre degli strumenti
La barra Standard degli strumenti, che si trova direttamente sotto la barra del menu
di default, una delle sei barre disponibili di VBE (la barra menu anche considerata
una barra degli strumenti). Le barre degli strumenti VBE lavorano come in Excel: si
possono
usare, muovere, ecc. Si usano i comandi Visualizza/Barra degli
strumenti/Personalizza per lavorare con le barre strumenti VBE.

Uso avanzato di MS Excel

20

Finestra di Gestione progetti


La finestra Gestione progetti mostra un diagramma ad albero corrispondente ad ogni
libro di lavoro aperto in Excel in quel momento (inclusi quelli aggiunti e i libri di lavoro
nascosti).
Ogni libro di lavoro conosciuto come project.
Si preme Ctrl+R per rendere visibile una finestra. Per nascondere la finestra si preme
il pulsante Chiudi nel titolo della sua barra (o premi col destro in una qualsiasi parte
della finestra di Gestione progetti e seleziona Nascondi dal menu di scelta rapida).
Finestra codice
La finestra codice (anche conosciuta come finestra modulo) contiene il codice VBA.
Ogni voce nel progetto ha una sua finestra di codice associata. Per vedere la finestra
del codice di un oggetto, si preme due volte loggetto nella finestra Gestione progetti.
Per esempio per vedere la finestra di codice delloggetto Foglio 1, si clicca due volte
Foglio1 nella finestra Gestione progetti.
Unaltra strada per vedere la finestra di codice di un oggetto quella di selezionare
loggetto nella finestra Gestione progetti e premere il tasto Visualizza Codice nella
barra strumenti in cima alla finestra Gestione progetti.
Finestra immediata
La finestra immediata la pi utile per eseguire direttamente espressioni VBA,
testarle e controllarne gli errori nel codice. Questa finestra pu essere visibile o
meno. Se non immediatamente visibile, si preme Ctrl+G. Per chiudere la finestra si
preme il bottone Chiudi nel titolo della sua barra (o clicca col destro in qualsiasi posto
nella finestra immediata e seleziona Nascondi dal menu di scelta rapida).

Gestione progetti
Quando si lavora in VBE, ogni libro di lavoro Excel, comprese le componenti
aggiuntive in quello che il lavoro corrente considerato un progetto. Si pu
immaginare un progetto come una collezione di oggetti disposti in modo ordinato. Si
pu espandere un progetto cliccando il segno pi (+) alla sinistra del nome del
progetto nella finestra di Gestione progetti. Si pu ridurre il progetto cliccando il
segno meno (-) a sinistra del nome del progetto. Si pu anche usare il pulsante
Espandi/comprimi cartelle nella barra in cima alla finestra Gestione progetti per
espandere o ridurre il progetto. Se si prova a espandere un progetto protetto, viene
richiesta la password.

Uso avanzato di MS Excel

21

La figura seguente mostra una finestra di Gestione progetti.


Quando si attiva VBE, non detto che il codice del modulo che
viene mostrato corrisponda alloggetto evidenziato nella finestra
Gestione progetti. Per essere sicuri di lavorare nel codice del
modulo giusto, cliccare due volte loggetto nella finestra di Gestione
progetti.

Se sono aperti molti libri di lavoro, la finestra di Gestione progetti pu risultare un po


schiacciata. Sfortunatamente, non possibile nascondere il progetto nella finestra di
Gestione progetti.
Ogni progetto espanso mostra i capitoli di ogni libro di lavoro (ogni foglio
considerato un oggetto), e un altro oggetto chiamato ThisWorkbook (il quale
rappresenta loggetto ActiveWorkbook). Se il progetto ha qualche modulo VBA, il
progetto elencato mostra pure lelenco dei moduli. Un progetto pu anche contenere
gli oggetti denominati UserForm (anche conosciuti come abituali box di dialogo). Se il
progetto ha moduli di classe, mostrer anche un elenco dei moduli di classe.
In Excel 2002, aggiungere un riferimento ad un progetto
(usando il comando Strumenti/Riferimenti) causa la
comparsa di una voce in Gestione progetti. Ogni
riferimento elencato come oggetto separato.

Aggiungere un nuovo modulo VBA


Per aggiungere un nuovo modulo VBA ad un progetto selezionare il nome del
progetto nella finestra di Gestione progetti e scegliere Inserisci/Modulo. Oppure
cliccare col tasto destro sul nome del progetto e scegliere Inserisci/Modulo dal menu
di scelta rapida.
Quando si registra una macro, Excel automaticamente
inserisce un modulo VBA per mantenere il codice registrato.

Uso avanzato di MS Excel

22

Rimuovere un modulo VBA


Per rimuovere un modulo o un modulo classe da un progetto, selezionare il nome del
modulo nella finestra Gestione progetti e scegliere File/Rimuovi xxx (dove xxx il
nome del modulo). possibile anche cliccare col tasto destro del mouse sul nome
del modulo e scegliere Rimuovi xxx dal menu di scelta rapida. Non possibile
rimuovere il codice di moduli associati al libro di lavoro (il codice modulo
ThisWorkbook) o al foglio (per esempio il codice modulo Foglio1).

Esportare e importare oggetti


Esportare ed importare oggetti pu essere utile se si vuole usare un oggetto in un
progetto diverso (come ad esempio un modulo VBA o un UserForm).
Per esportare un oggetto, selezionare la finestra Gestione progetti e scegliere
File/Esporta file (o premere Ctrl+E). Apparir una finestra di dialogo che chiede il
nome del file. Da notare che loggetto esportato rimane comunque nel progetto di
origine (ne viene esportata solo una copia). Se si esporta un oggetto UserForm,
nessun codice associato con UserForm viene esportato.
Per importare un file in un progetto si seleziona il nome del progetto nella finestra
Gestione progetti e si sceglie File/Importa file. Si ottiene una finestra di dialogo che
richiede il nome del file. Si pu importare solo un file che stato esportato usando il
comando File/Esporta file.
Se si vuole copiare un modulo o un oggetto UserForm in
un altro progetto, non necessario esportare e poi
importare loggetto. Accertarsi che entrambi i progetti
siano aperti e semplicemente attivare le finestre
Gestione progetti e trascinare loggetto da un progetto
allaltro.

Le finestre di codice
A ogni oggetto associata una finestra di codice. Tali oggetti possono essere:
 Il libro di lavoro stesso (ThisWorkbook nella finestra Gestione progetti)
 Un foglio di lavoro o un foglio grafico nel libro di lavoro (per esempio, Foglio1
di Grafico1 nella finestra Gestione progetti)
 Un modulo VBA
 Un modulo di classe (uno speciale tipo di modulo che ti permette di creare
nuove classi di oggetto)
 Una UserForm

Minimizzare e massimizzare finestre


In certi momenti, VBE pu avere molte finestre di codice aperte. La figura che segue
mostra un esempio di che cosa si intende.

Uso avanzato di MS Excel

23

Le finestre di codice sono molto simili alle finestre del foglio di lavoro in Excel. Si
possono minimizzare, massimizzare, nascondere, riarrangiare e cos via. Molti utenti
trovano pi efficiente massimizzare la finestra di codice nella stanno lavorando. Per
massimizzare la finestra di codice, cliccare il pulsante Ingrandisci nel titolo della barra
o fare un doppio clic nel titolo della barra. Per ripristinare la finestra di codice,
cliccare sul tasto Ripristina nel titolo della sua barra.
Alle volte, pu essere utile avere due o pi finestre di codice visibili, ad esempio per
comparare il codice di due moduli, o copiare codice da un modulo allaltro.
Minimizzando una finestra di codice essa si localizza nella parte bassa dello
schermo. Premendo il tasto Chiudi nel titolo della barra della finestra di codice la
finestra si chiude completamente. Per aprirla nuovamente cliccare due volte loggetto
appropriato dalla finestra di Gestione progetti.
VBE non permette di chiudere un libro di lavoro. Occorre richiamare Excel e fare la
chiusura da qui. Comunque si pu usare la Finestra Immediata per chiudere un libro
di lavoro o aggiungerne uno. Appena attivata la Finestra Immediata, digitare
unespressione VBA simile a quella di seguito e premere Enter.
Workbooks(myaddin.xla).Close

Questa espressione esegue il metodo Chiudi delloggetto Workbook, il quale chiude


un libro di lavoro. In questo caso, viene chiuso un libro di lavoro che era stato
aggiunto.

Mantenimento del codice VBA


In generale una finestra di codice pu sostenere quattro tipologie di codice:

Uso avanzato di MS Excel

24

 Procedure sub. Una procedura una struttura di istruzioni che esegue alcune
azioni.
 Procedure funzioni. Una funzione un set di istruzioni che restituisce un
singolo valore o un ordine (concettualmente simile alla funzione di foglio di
lavoro come =SUM).
 Procedure propriet. Queste sono procedure speciali usate in moduli di
classe.
 Dichiarazioni. Una dichiarazione uninformazione circa una variabile fornita a
VBA. Per esempio, lutente pu dichiarare il tipo di dati per le variabili che
intende usare.
Un singolo modulo VBA pu mantenere qualunque passo di procedura Sub, Function
e dichiarazione. Come organizzare un modulo VBA compito dellutente. Alcuni
utenti preferiscono tenere tutto il loro codice VBA per una applicazione in un singolo
modulo VBA; ad altri piace suddividere il codice in numerosi differenti moduli.
Sebbene si abbiano molte possibilit su dove posizionare il
codice, ci sono alcune restrizioni. Procedure di gestione di eventi
devono essere poste nella finestra di codice relativa alloggetto
che risponde allevento. Per esempio, se si scrive una procedura
che viene eseguito nel momento in cui il libro di lavoro viene
aperto, questa procedura deve essere posta nella finestra di
codice delloggetto ThisWorkbook.

Entrando nel codice VBA


Prima di poter eseguire qualcosa di veramente significativo va scritta una certa
quantit di codice VBA nella finestra di codice. Il codice VBA deve essere dentro una
procedura. Una procedura una dichiarazione VBA. Per ora, focalizzeremo
lattenzione su uno dei tipi di finestre codice: il modulo VBA.
Si pu aggiungere codice ad un modulo VBA in tre maniere:
 Entrando nel codice nella vecchia maniera e cio digitandolo sulla tastiera.
 Usando il registratore di macro di Excel per registrare le azioni e convertirle
nel codice VBA.
 Copiando il codice da un altro modulo e incollandolo nel modulo in cui si sta
lavorando.
Entrare manualmente nel codice
Alle volte, la via pi diretta la migliore, ovvero digitare il codice usando la tastiera.
Si pu usare il tasto Tab per fare i rientri nelle righe che logicamente stanno insieme
per esempio, le condizioni di espressioni fra un If e un End If. Questo non
realmente necessario, ma rende il codice pi leggibile.
Una singola istruzione in VBA pu avere una lunghezza indefinita. Per una maggiore
leggibilit, comunque, possibile spezzare unistruzione lunga in due o pi righe. Per
fare ci, al termine di una linea di istruzioni si aggiunge uno spazio seguito dal
carattere underscore (_), poi si preme Invio e si continua listruzione nella linea
seguente. Il seguente codice, per esempio, una unica dichiarazione suddivisa in 4
righe:
Uso avanzato di MS Excel

25

MsgBox Non trovato & Ucase(SHORTCUTMENUFILE) _


& vbCrLf & vbCrLf & Il file deve essere posizionato in _
& ThisWorkbook.Path & vbCrLf & vbCrLf & Pu essere _
necessario reinstallare BudgetMan, vbCritical, APPNAME

Notare il rientro delle tre linee dellespressione. una soluzione opzionale, ma aiuta
a capire che queste quattro righe in realt sono una singola dichiarazione.
Come Excel, VBE ha livelli multipli di Annulla e Ripeti. Perci se
si incontra unistruzione cancellata che invece non andava
cancellata, si pu premere ripetutamente il tasto Annulla (o
Ctrl+Z) fino a che listruzione non ritorna. Dopo lannullamento, si
pu premere il tasto Ripeti per cambiare quello che era stato
annullato.
Provare quanto segue: inserire un modulo VBA in un progetto, e poi entrare nella
seguente procedura nella finestra di codice del modulo:
Sub

End

TuoNome( )
Msg = Il tuo nome & Application.UserName & ?
Ans = MsgBox(Msg, vbYesNo)
If Ans = vbNo Then
MsgBox Oh, mi dispiace.
Else
MsgBox Devo essere telepatico!
End If
Sub

La figura seguente mostra come questo appare nel modulo VBA.


Entra nel codice si nota che VBE fa alcuni aggiustamento sul testo.
Esempio, se si omette lo spazio prima e dopo il segno uguale, VBE lo
inserisce. Inoltre, il colore di parte dei testi cambiato. Questo
normale, e sar apprezzato pi avanti.
Per eseguire la procedura TuoNome, accertarsi che il cursore sia posizionato in un
qualunque posto allinterno del testo digitato. Poi procedere con una delle seguenti
opzioni:
 Premere F5.
 Selezionare Esegui dal menu e scegliere il comando Esegui Sub/UserForm.
 Premere il pulsante Esegui Sub/UserForm ( ) sulla barra degli strumenti
standard.

Uso avanzato di MS Excel

26

La procedura viene eseguita e si pu rispondere a una semplice finestra di dialogo


(vedi figura seguente) che mostra il nome dellutente. Notare che Excel viene attivato
quando la macro eseguita.

Uso avanzato di MS Excel

27

Cosa significa scrivere una procedura Sub in VBA (anche detta macro)? Quando il
comando per eseguire la macro viene inviato, VBE velocemente compila il codice e
lo esegue. In altre parole, ogni istruzione viene valutata ed Excel svolge ci che
chiamato a fare.
Per registrare questa semplice procedura:







Dichiarare la procedura (prima linea)


Assegnare un valore alle variabili (Msg e Ans)
Concatenare le stringhe (usando loperatore &)
Usare la funzione built-in di VBA (MsgBox)
Usare una costruzione If-Then-Else
Concludere la procedura (ultima linea)

Usare il registratore di macro


Unaltra modalit per ottenere codice nel modulo VBA di registrare le azioni usando
il registratore di macro Excel.
Questo prossimo esempio mostra come registrare una macro che semplicemente
cambia la disposizione dellorientamento della pagina da verticale in orizzontale.
1. Attivare un foglio di lavoro attraverso il libro di lavoro.
2. Selezionare Strumenti/Macro/Registra Nuova Macro.
Excel mostra la finestra di dialogo della macro da registrare.
3. Premere OK per accettare i defaults.
Excel automaticamente inserisce un nuovo modulo VBA nel progetto.
Da questo punto in poi, Excel converte le azioni eseguite in codice
VBA. Mentre la macro viene registrata, Excel mostra una piccola
finestra fluttuante di barra strumenti che contiene due bottoni della
barra degli strumenti (Interrompi registrazione e Riferimento relativo).
4. Selezionare il comando File/Imposta pagina.
5. Selezionare lopzione Orizzontale e premere OK per chiudere la finestra
di dialogo.
6. Premere il tasto Interrompi registrazione sulla finestra fluttuante della
barra
strumenti
(o
selezionare
Strumenti/Macro/Interrompi
registrazione).
Excel interrompe la registrazione delle azioni.
Per dare uno sguardo alla macro, attivare il VBE (Alt+F11) e trovare il progetto
relativo nella finestra Gestione progetti. Cliccare il Modulo1 per mostrare la finestra di
codice (se il progetto ha gi un Modulo1, la nuova macro sar Modulo2). Il codice
generato da un singolo comando mostrato nella Lista 1. Per coloro che usano una
versione di Excel che non Excel2002, il codice pu variare leggermente.

Uso avanzato di MS Excel

28

Lista 1 - Macro per variare lorientamento della pagina in orizzontale


Sub Macro1()
'
' Macro1 Macro
' Macro registrata il 18/11/2002 da MAESTRINI
'
'
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.787401575)
.RightMargin = Application.InchesToPoints(0.787401575)
.TopMargin = Application.InchesToPoints(0.984251969)
.BottomMargin = Application.InchesToPoints(0.984251969)
.HeaderMargin = Application.InchesToPoints(0.5)
.FooterMargin = Application.InchesToPoints(0.5)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 300
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
End With
End Sub

Sebbene cambi solo un semplice settaggio nella finestra di dialogo dellimpostazione


della pagina, Excel genera un codice che riproduce tutti i settaggi nella finestra di
dialogo. Questo porta ad un importante concetto. Spesso il codice prodotto quando si
registra una macro eccessivo. Si pu ottenere la modalit orizzontale
semplificando considerevolmente la macro cancellando codice estraneo. La macro
diventa pi semplice da leggere e viene eseguita pi velocemente. La precedente
macro pu essere semplificata come segue:
Sub Macro1()
With ActiveSheet.PageSetup
.Orientation = xlLandscape
End With
End Sub

stato cancellato tutto il codice in eccesso mediante listruzione che setta la


propriet Orientation. In realt, questa macro pu essere semplificata ancora di pi
Uso avanzato di MS Excel

29

perch la costruzione With-EndWith non necessaria quando si modifica una sola


propriet:
Sub
Macro1( )
ActiveSheet.PageSetup.Orientation = xlLandscape
End
Sub

In questo esempio, la macro cambia la propriet Orientation delloggetto Imposta


pagina nel foglio attivo. Listruzione xlLandscape una costante che provvede a
semplificare le cose. La variabile xlLandscape ha valore 2, e xlPortrait ha valore 1.
La seguente macro lavora come la precedente Macro1.
Sub
Macro1( )
ActiveSheet.PageSetup.Orientation = 2
End
Sub

Si pu usare lhelp in linea per imparare le costanti relative ad un particolare


comando.
Si pu entrare in questa procedura direttamente nel modulo VBA, ma occorre sapere
quali oggetti, propriet e metodi usare. Ovviamente, molto pi veloce registrare
macro da cui si impara inoltre che loggetto PageSetup ha una propriet Orientation.
Registrare le azioni la modalit migliore per imparare VBA, sebbene
il risultato possa non essere esattamente ci si desidera. Si pu usare
lhelp in linea per controllare gli oggetti, le propriet e i metodi che
appaiono nel codice registrato.

Copiare il codice VBA


Fino ad ora abbiamo esaminato come lavorare direttamente sul codice e registrare le
azioni per generare codice VBA. Lultimo metodo quello di prendere il codice nel
modulo VBA e di copiarlo da un altro modulo. Per esempio, una procedura potrebbe
essere gi scritta per un progetto e risultare utile anche nel progetto corrente.
Piuttosto che rientrare nel codice, si pu pi semplicemente aprire il libro di lavoro,
attivare il modulo e usare la normale prassi copia incolla per copiare il codice nel
corrente modulo. Dopo averlo incollato, si puoi modificare il codice come si
preferisce.
Come gi detto in questo capitolo, si pu anche importare un
modulo intero che stato esportato su un file.

Personalizzare lambiente VBE


VBE offre numerose opzioni per la personalizzazione dellambiente.
Quando VBE attivo, scegliere Strumenti/Opzioni. Si apre una finestra di dialogo
con 4 schede: Editor, Formato Editor, Generale, Ancoraggio.

La scheda Editor
La figura seguente mostra le opzioni a cui si pu accedere cliccando il tab Editor
dalla finestra di dialogo Opzioni.
Uso avanzato di MS Excel

30

Controllo automatico sintassi


Lopzione Controllo automatico sintassi controlla automaticamente errori di sintassi
mentre si sta lavorando nel codice VBA. Una finestra di dialogo avverte sul tipo di
problema. Se non si sceglie questo settaggio, VBE mostra gli errori di sintassi in un
colore differente dal resto del codice e non appare nessuna finestra di dialogo sul
monitor.
Dichiarazione di variabili obbligatoria
Se lopzione Dichiarazione di variabili obbligatoria settata, VBE inserisce la
seguente dichiarazione allinizio di ogni nuovo modulo VBA:
Option Explicit

Se ci appare, obbligatorio definire ogni variabile che viene usata. Questa una
eccellente abitudine da prendere, bench richieda alcuni sforzi in pi da parte
dellutente. Se le variabili non vengono dichiarate, tutti i dati sonodi di tipo Variant, e
ci non efficiente.
Cambiare
lopzione
Dichiarazione
di
variabili
obbligatoria riguarda solo moduli nuovi, non quelli gi
esistenti.

Elenco membri automatico


Se questa opzione settata, VBE offre qualche aiuto quando si entra nel codice
VBA, mostrando una lista di capitoli per oggetto.
La figura seguente mostra un esempio di Elenco membri automatico. VBE mostra
una lista di componenti per loggetto Application. possibile selezionare un
Uso avanzato di MS Excel

31

elemento dalla lista ed evitare di scriverlo (questo assicura anche che venga
correttamente digitato).

Informazioni rapide automatiche


Se questa opzione settata, VBE informa circa gli argomenti disponibili per funzioni,
propriet e metodi appena vengono digitati. La figura che segue mostra questa
caratteristica in azione per la propriet Range.

Descrizione dati automatica


Se lopzione settata, VBE mostra il valore della variabile sulla quale il cursore
posto quando si sta lavorando nel codice.
Rientro automatico
Il settaggio Rientro automatico determina se VBE automaticamente deve far rientrare
ogni nuova linea di codice alla stessa maniera come la linea precedente. Si pu
anche specificare il numero di caratteri di rientro (di default sono 4).

Uso avanzato di MS Excel

32

Usare la chiave Tab per rientrare nel codice e non la


barra spazio. Con Shift+Tab si rimuove il rientro delle
linee di codice. Queste chiavi lavorano anche su
selezioni di pi linee.

Trascinamento della selezione


Lopzione Trascinamento della selezione permette di copiare e muovere testo
trascinando e rilasciando.
Visualizza modulo intero
Questa opzione specifica come le procedure vengono mostrate. Se settata, la
procedura nella finestra di codice appare come una singola finestra scorribile. Se
lopzione disattivata, si pu visualizzare solo una procedura alla volta.
Separa routine
Quando lopzione Separa routine attivata, vengono mostrate linee di separazione
alla fine di ogni procedura nella finestra di codice.

La scheda Formato editor


La figura seguente mostra lopzione della scheda Formato editor della finestra di
dialogo delle Opzioni.

Colori codice
Lopzione Colori codice permette di settare il colore del testo (primo piano e sfondo)
e indicare il colore mostrato per vari elementi di codice di VBA.
Uso avanzato di MS Excel

33

Tipo di carattere
Lopzione Tipo di carattere permette di impostare il carattere del testo che si usa nei
moduli VBA.
Dimensione
La dimensione specifica la grandezza del carattere nei moduli VBA.
Barra indicatori
Questa opzione controlla la disposizione del margine verticale dellindicatore della
barra nei moduli.

La scheda Generale
La figura seguente mostra le opzioni disponibili sotto lo schema Generale nella
finestra di dialogo delle opzioni. Quasi in ogni caso i settaggi di default sono
adeguati.

La scheda Ancoraggio
La figura seguente mostra la scheda Ancoraggio della finsetra di dialogo delle
Opzioni. Queste opzioni determinano il comportamento delle diverse finestre in VBE.
Quando una finestra ancorata, viene fissata lungo uno dei margini della finestra di
VBE. Questo facilita lidentificazione e il posizionamento di una particolare finestra.
Senza la modalit ancoraggio, si genera una disposizione disordinata delle finestre.

Uso avanzato di MS Excel

34

Oggetti e Collezioni
In questa sezione sono riportato maggiori dettagli rispetto ai precedenti capitoli
relativamente agli oggetti e alle collezioni di oggetti.
Gli oggetti vanno immaginati in termini di gerarchia. In cima alla gerarchia c
loggetto Application nel nostro caso Excel stesso. Ma se si programma in VBA
usando Microsoft Word, loggetto Application Word.

Loggetto gerarchia
Loggetto Application (che Excel) contiene altri oggetti. Qui ci sono solo pochi
esempi di oggetti contenuti nelloggetto Application:
Workbooks (una collezione di tutti gli oggetti Workbook)
Windows (una collezione di tutti gli oggetti Window)
AddIns (una collezione di tutti gli oggetti AddIn)

Alcuni oggetti contengono altri oggetti. Per esempio, la collezione Workbooks consiste
di tutti gli oggetti Workbook aperti, e loggetto Workbook contiene altri oggetti, alcuni
dei quali sono i seguenti:
Worksheets (una collezione di oggetti Worksheet)
Charts (una collezione di oggetti Chart)
Names (una collezione di oggetti Name)
Ognuno di questi oggetti, a sua volta, pu contenere altri oggetti. La collezione
Worksheets consiste di tutti gli oggetti Worksheet in un Workbook. Un oggetto
Worksheet contiene molti altri oggetti, i quali includono i seguenti:
ChartObjects
Range
PageSetup
Uso avanzato di MS Excel

(una collezione di oggetto ChartObject)

35

PivotTables

(una collezione di oggetti PivotTable)

Il completo modello oggetto Excel rappresentato schematicamente nel sistema di


help in linea.

Le collezioni
Un altro concetto chiave nella programmazione di VBA rappresentato dalle
collezioni. Una collezione un insieme di oggetti della stessa classe (e una
collezione anchessa un oggetto). Come scritto sopra, Workbooks una collezione
di tutti gli oggetti Workbook, correntemente aperti. Worksheets una collezione di tutti
gli oggetti Worksheet contenuti in un particolare oggetto Workbook. Si pu lavorare
con una intera collezione di oggetti o con un oggetto individuale di una collezione.
Per fare riferimento ad un singolo oggetto di una collezione, mettere il nome
delloggetto o il numero di indice fra parentesi dopo il nome della collezione, come
segue:
Worsheets(Sheet1)

Se Sheet1 il primo foglio di lavoro nella collezione, si pu alternativamente usare il


seguente riferimento:
Worksheets(1)

Si fa riferimento al secondo foglio di lavoro in un Workbook con Worksheet(2), e cos


via.
C unaltra collezione chiamata Sheets, che linsieme di tutti i fogli in un libro di
lavoro, sia fogli di lavoro sia fogli grafici. Se Sheet1 il primo foglio nel tuo libro di
lavoro, si pu scrivere come segue:
Sheets(1)

Riferimento alloggetto
Quando ci si riferisce ad un oggetto usando VBA, spesso si deve qualificare loggetto
connettendo i nomi delloggetto con un periodo (anche conosciuto come operatore
punto). Per esempio, si hanno due libri di lavoro aperti ed in entrambi contenuto
un foglio di lavoro chiamato Sheet1. Il singolo foglio si identifica facendo riferimento
al contenitore delloggetto, come segue:
Workbooks(Book1).Worksheets(Sheet1)

Senza il libro di lavoro qualificatore, VBA vedrebbe Sheet1 nel libro di lavoro attivo.
Per far riferimento ad uno specifico intervallo (come pu essere la cella A1) su un
foglio di lavoro chiamato Sheet1 in un libro di lavoro chiamato Book1, si pu usare la
seguente espressione:
Workbooks(Book1).Worksheets(Sheet1).Range(A1)

I riferimenti del precedente esempio includono anche loggetto Application, come


segue:
Uso avanzato di MS Excel

36

Application.Workbooks(Book1).Worksheets(Sheet1).Range(A1)

Molte volte, comunque, il riferimento alloggetto Application pu essere omesso


(esso gi assunto). Se loggetto Book1 il libro di lavoro attivo, si pu anche
omettere il riferimento di quelloggetto e usare:
Worksheets(Sheet1).Range(A1)

Ancora, se Sheet1 il foglio di lavoro attivo, si pu usare una espressione ancora pi


semplificata:
Range(A1)

Excel non ha un oggetto che fa riferimento ad una


singola cella. Una cella un oggetto Range.
I semplici riferimenti agli oggetti (come in questi esempi) non comportanoo alcuna
esecuzione. Per permettere esecuzioni, occorre associare ad un oggetto le sue
propriet, o specificare un metodo che deve essere usato con quelloggetto.

Propriet e Metodi
In questa sezione descriveremo come accedere alle propriet e ai metodi degli
oggetti.

Propriet degli oggetti


Ogni oggetto ha delle propriet. Per esempio, un oggetto Range ha una propriet
chiamata Value. Si pu scrivere il codice VBA per mostrare la propriet Value o
scrivere un codice VBA per settare la propriet Value per uno specifico valore. Quella
che segue una procedura che usa la funzione VBA MsgBox per fare apparire una
finestra che visualizza il valore nella cella A1 del foglio 1 del libro di lavoro attivo:
Sub
End

ShowValue( )
MsgBox Worksheets(Foglio1).Range(A1).Value
Sub

una funzione utile per mostrare risultati mentre


il codice VBA in esecuzione.

MsgBox

Il codice nel precedente esempio mostra il settaggio corrente della propriet Value di
una cella specifica: cella A1 nel foglio di lavoro chiamato Foglio1 nel libro di lavoro
attivo. Nota che se il libro di lavoro attivo non ha un foglio chiamato Foglio1, la
macro generer un errore.
La seguente procedura cambia il valore mostrato nella cella A1 cambiando la
propriet Value della cella.
Sub
End

ChangeValue( )
Worksheets(Foglio1).Range(A1).Value = 123
Sub

Uso avanzato di MS Excel

37

Dopo lesecuzione di questo processo, la cella A1 sul foglio 1 assume il valore 123.
Molti oggetti hanno propriet di default. Per loggetto Range, la
propriet di default la propriet Value. Perci si pu anche omette la
parte .Value dal codice ed ottenere lo stesso effetto. Comunque, da
considerare buona pratica di programmazione quella di includere la
propriet, anche se gi definita di default.

Metodi degli oggetti


Un metodo una azione che si esegue con un oggetto. Seguono semplici esempi
che usano il metodo Clear su un oggetto Range. Dopo aver eseguito la procedura, le
celle dellintervallo A1:C3 sul foglio 1 saranno vuote, e il contenuto delle celle
formattate sar rimosso.
Sub ZapRange()
Worksheets("Foglio1").Range("A1:C3").Clear
End Sub

Se se preferisse cancellare i valori nellintervallo e mantenere la formattazione, usare


il metodo ClearContents delloggetto Range.
Molti metodi gestiscono argomenti per definire ulteriori azioni. Segue un esempio che
copia la cella A1 nella cella B1 usando il metodo Copy delloggetto Range. In questo
esempio, il metodo Copy ha un argomento (la destinazione della copia):
Sub CopyOne()
Worksheets("Foglio1").Range("A1").Copy Worksheets("Foglio1").Range("B1")
End Sub

Gli oggetti Range


Molto del lavoro che viene svolto in VBA coinvolge celle e intervalli in fogli di lavoro.
Un oggetto Range contenuto in un oggetto Worksheet, e consiste di una singola
cella o intervallo di celle su un singolo foglio di lavoro. Nella sezione che segue,
trattiamo tre modalit per far riferimento agli oggetti Range nel codice VBA:
 La propriet Range di un oggetto class Worksheet o Range
 La propriet Range di un oggetto Worksheet
 La propriet Range di un oggetto Range

La propriet Range
La propriet Range restituisce loggetto Range. Questa propriet ha due sintassi:
object.Range(cell1)
object.Range(cell1, cell2)

La propriet Range si applica per due tipi di oggetti, loggetto Worksheet o loggetto
Range. Qui cell1 e cell2 si riferiscono allo spazio che identifica lintervallo (una cella
nel primo caso, pi celle nel secondo caso). Di seguito ci sono alcuni esempi sulluso
del metodo Range.
Listruzione che segue restituisce un valore in una cella specificata, in questo caso il
valore 1 nella cella A1 su Foglio1 del libro di lavoro attivo:
Uso avanzato di MS Excel

38

Worksheets(Foglio1).Range(A1).Value = 1
La propriet Range riconosce anche i nomi definiti in un libro di lavoro. Perci se una
cella chiamata Input, si pu usare la seguente espressione per entrare nel valore
della cella cos denominata:
Worksheets(Foglio1).Range(Input).Value = 1

Lesempio che segue restituisce un medesimo valore in un intervallo di 20 celle sul


foglio attivo. Se il foglio attivo non il foglio di lavoro, questo causa un messaggio di
errore:
ActiveSheet.Range(A1:B10).Value = 2

Il prossimo esempio produce esattamente lo stesso risultato come lesempio


precedente:
Range(A1, B10) = 2

Il foglio di riferimento tralasciato, cos viene preso il foglio attivo. Anche la propriet
valore tralasciata e lascia il posto alla propriet di default (nel caso di oggetto Range
Value). Questo esempio usa anche la seconda sintassi per la propriet Range. Con
questa sintassi, il primo argomento la cella in alto a sinistra dell intervallo e il
secondo argomento la cella in basso a destra dellintervallo.
Lesempio seguente usa loperatore di intersezione di range di Excel (uno spazio) per
restituire lintersezione di due intervalli. In questo caso, lintersezione una singola
cella, C6. Perci, lespressione pone 3 nella cella C6:
Range(C1:C10 A6:E6) = 3

Ed infine, il prossimo esempio, pone il valore 4 dentro 5 celle, in un intervallo noncontiguo. La virgola serve come operatore di unione.
Range (A1, A3, A5, A7, A9) = 4
Tutti gli esempi hanno usato la propriet Range su un oggetto Worksheet. Ti ricordo
che puoi anche usare la propriet Range su un oggetto Range.
Quel che segue un esempio di uso della propriet Range su oggetto Range (in
questo caso, loggetto Range la cella attiva). Questo esempio tratta loggetto Range
come se fosse la cella superiore a sinistra nel foglio di lavoro, e poi pone il valore 5
nella cella che sarebbe la cella B2. In altre parole, il riferimento restituito relativo
allangolo superiore sinistro delloggetto Range. Perci, lespressione che segue
pone il valore 5 nella cella direttamente alla destra e una riga sotto la cella attiva:
ActiveCell.Range(B2) = 5

Ci sono molte modalit per accedere a celle relative a intervalli, chiamate propriet
Offset, di cui si parler pi avanti.

Uso avanzato di MS Excel

39

La propriet celle
Unaltra modalit che fa riferimento ad intervalli quella che fa uso della propriet
Cells. Come la propriet Range, si pu usare la propriet Cells su oggetti Worksheet
e oggetti Range. La propriet Cells ha tre sintassi:
object.Cells(rowIndex, columnIndex)
object.Cells(rowIndex)
object.Cells

Mostreremo alcuni esempi sulluso della propriet Cells. Il primo esempio riceve il
valore 9 nella cella 1 sul foglio 1. In questo caso, si usa la prima sintassi, che accetta
il numero di indice di riga (da 1 a 65536) e di colonna (da 1 a 256):
Worksheets(Foglio1).Cells(1, 1) = 9

Segue un esempio che riporta il valore 7 nella cella D3 (che , riga 3, colonna 4) nel
foglio di lavoro attivo:
ActiveSheet.Cells(3, 4) = 7

Si pu anche usare la propriet Cells su un oggetto Range. Cos facendo, loggetto


Range restituito dalla propriet Cells relativo alla cella in alto a sinistra del
riferimento Range. Per esempio, la seguente istruzione registra il valore 5 nella cella
attiva. In questo caso la cella attiva trattata come se fosse la cella A1 nel foglio di
lavoro:
ActiveCell.Cells(1, 1) = 5

Il reale vantaggio di questo tipo riferimento alle celle sar


apprezzato nella discussione delle variabili e del looping (capitolo
successivo).
Per registrare il valore 5 nella cella direttamente sotto la cella attiva, si pu usare
listruzione:
ActiveCell.Cells(2, 1) = 5

Il precedente esempio recita: Inizia con la cella attiva e considera questa cella come
cella A1. Registra la cella nella seconda riga e nella prima colonna.
La seconda sintassi del metodo Cells usa un singolo argomento con intervallo da 1
a 16777216. Questo numero corrisponde al numero delle celle in un foglio di lavoro
(65536 righe per 256 colonne). Le celle sono numerate partendo da A1 e
continuando a destra e poi sotto nella riga successiva. La 256ma cella IV1 e la
257ma A2.
Il prossimo esempio registra il valore 2 nella cella H3 (la quale la 520ma cella nel
foglio di lavoro) del foglio di lavoro attivo:
ActiveSheet.Cells(520) = 2

Per mostrare il valore nellultima cella del foglio di lavoro (IV65536) usa questa
espressione:

Uso avanzato di MS Excel

40

MsgBox ActiveSheet.Cells(16777216)

La sintassi pu essere anche usata con un oggetto Range. In questo caso, la cella
restituita relativa alloggetto Range restituito. Per esempio, se loggetto Range
A1:D10 (40 celle), la propriet Cells pu avere un argomento da 1 a 40 e restituisce
una delle celle nelloggetto Range. Nel seguente esempio, viene registrato il valore
2000 nella cella A2 perch A2 la quinta cella (contando dallalto e a destra, poi
andando in basso) nellintervallo di riferimento:
Range (A1:D10).Cells(5) = 2000

Nel precedente esempio, largomento per la propriet Cells non ha limiti


di valori fra 1 e 40. Se largomento eccede il numero delle celle
nellintervallo, il calcolo continua come se lintervallo fosse pi largo
dellattuale. Perci, con una dichiarazione come la precedente si
potrebbe cambiare il valore in una cella esterna allintervallo A1:D10.
La terza sintassi per la propriet Cells restituisce tutte le celle sul foglio di lavoro di
riferimento. Al contrario delle altre due sintassi, in questa, i dati non sono restituiti in
una singola cella. Questo esempio usa il metodo ClearContents sullintervallo
restituito usando la propriet Cells su un foglio di lavoro attivo. Il risultato che i
contenuti di ogni cella sul foglio di lavoro vengono cancellati:
ActiveSheet.Cells.ClearContents

Cosa sapere degli oggetti


Nelle sezioni precedenti sono stati introdotti sommariamente gli oggetti (incluse le
collezioni), le propriet e i metodi. In questa sezione vengono aggiunti altri concetti
essenziali:

Concetti essenziali da ricordare


 Gli oggetti hanno propriet e metodi unici.
 Ogni oggetto ha il suo insieme di propriet e metodi. Alcuni oggetti, come
sempre, condividono alcune propriet (esempio Name) e alcuni metodi
(esempio Delete).
 Si possono manipolare oggetti senza selezionarli.
Di fatto molto pi efficiente eseguire azioni su oggetti senza selezionarli
prima. Quando si registra una macro, generalmente Excel seleziona il primo
oggetto. Questo non necessario e potrebbe effettivamente far eseguire la
macro pi lentamente.
 importante capire il concetto di collezioni.

Uso avanzato di MS Excel

41

Molte volte lutente accede ad un oggetto indirettamente, riferendosi invece


alla relativa collezione. Per esempio, per accedere alloggetto chiamato Myfile
di un Workbook, si fa riferimento alla collezione Workbooks come segue:
Workbooks(Myfile.xls)

Questa specifica si riferisce ad un oggetto, che nel libro di lavoro.


 Propriet possono restituire un riferimento ad un altro oggetto. Per esempio,
nella seguente espressione, la propriet Font restituisce un oggetto Font
contenuto in un oggetto Range:
Range(A1).Font.Bold = True

 Ci possono essere diverse modalit per riferirsi allo stesso oggetto.


Si supponga di avere un libro di lavoro chiamato Sales, e non il solo libro di
lavoro aperto. Se questo libro di lavoro ha un foglio di lavoro chiamato
Summary, si pu fare riferimento al foglio in ciascuna delle seguenti modalit:
Workbooks(Sales.xls).Worksheets(Summary)
Workbooks(1).Worksheets(1)
Workbooks(1).Sheets(1)
Application.ActiveWorkbook.ActiveSheet
ActiveWorkbook.ActiveSheet
ActiveSheet

Se per esempio ci sono pi libri di lavoro aperti, il secondo e il terzo metodo


non sono realizzabile. Se si vuole lavorare con il foglio attivo (qualunque esso
sia), non sono utilizzabili gli ultimi tre metodi. Per essere assolutamente sicuri
di riferirsi ad un determinato foglio in un determinato libro di lavoro, il primo
metodo quello migliore.

Uso avanzato di MS Excel

42

VBA: Programmazione Fondamentale


Questo capitolo riporta alcuni elementi chiave del linguaggio e i concetti della
programmazione in VBA.

Elementi di linguaggio VBA: una panoramica


VBA ha poche particolarit rispetto ad altri linguaggi. Nel capitolo precedente stata
presentata una panoramica di oggetti, propriet e metodi. Ma non abbiamo detto
molto su come manipolare gli oggetti in maniera che essi facciano qualcosa di
specifico. Questo capitolo indirizza in questo senso, esplorando elementi di
linguaggio in VBA, parole chiave e strutture di controllo che usati abitualmente per
scrivere in VBA.
La semplice procedura che segue si trova nel modulo VBA e calcola la somma dei
primi 100 interi. Quando eseguita, la procedura mostra una finestra che visualizza il
risultato (5050).
Sub

End

VBA_Demo ( )
Questo un semplice esempio VBA
Dim Totale As Integer, I As Integer
Totale = 0
For i = 1 to 100
Totale = Totale + i
Next i
MsgBox Totale
Sub

Questa procedura utilizza alcuni elementi comuni di linguaggio, includendo un


commento (la linea preceduta dallapostrofo), una variabile (Totale), due espressioni
assegnate (Totale = 0 e Totale = Totale + i), una struttura in via di sviluppo
(For-Next), e uno stato di VBA (MsgBox).
Le procedure VBA non hanno bisogno di manipolare nessun oggetto. La
procedura precedente, per esempio, non fa niente con gli oggetti. Lavora
solo con i numeri

Commenti
Un commento un testo descrittivo impresso allinterno del codice. Il testo di un
commento completamente ignorato dal VBA. buona cosa usare commenti
liberamente per descrivere cosa si sta facendo (listruzione con cui si intende fare
qualcosa non sempre cos ovvia).
Si possono utilizzare linee intere per il commento o inserire un commento dopo una
istruzione sulla stessa linea. Un commento viene indicato con un apostrofo. VBA non
prende in considerazione il testo che segue un apostrofo eccetto quando
lapostrofo si trova fra virgolette fino a fine linea. Per esempio, la seguente
affermazione non contiene un commento, sebbene contenga un apostrofo:
MsgBox = Non posso continuare

Lesempio seguente mostra una procedura VBA con tre commenti:


Uso avanzato di MS Excel

43

Sub Commenti ( )

Questa procedura non restituisce valori


x = 0
x rappresenta il nulla

Mostra i risultati
MsgBox x
End
Sub

Sebbene lapostrofo da preferire come indicatore, si pu anche utilizzare la parola


chiave Rem per segnalare una linea di commento. Per esempio:
Rem

- -

La dichiarazione seguente richiede allutente il nome di un file

La parola chiave Rem essenzialmente un richiamo dalle vecchie versioni di BASIC;


essa viene inclusa in VBA grazie alla sua compatibilit. A differenza dellapostrofo,
Rem pu essere scritto solo allinizio della linea, non nella stessa linea di unaltra
istruzione.
Utilizzare commenti in definitiva una buona idea, ma non tutti i commenti sono di
uguale beneficio. Per essere utili, i commenti devono contenere informazioni che,
leggendo il codice, non siano immediatamente ovvi. Altrimenti si sprecano preziosi
bytes. La seguente procedura, per esempio, contiene molti commenti, nessuno dei
quali realmente aggiunge qualcosa di valore:
Sub CattiviCommenti ( )

Dichiara le variabili
Dim x As Integer
Dim y As Integer
Dim z As Integer

Inizia la routine
x = 100 Assign 100 to x
y = 200 Assign 200 to y

Aggiungi x e y e metti in z
z = x + y

Mostra i risultati
MsgBox z
End Sub

Ispezione del codice VBA


Il codice VBA, che si trova in un modulo VBA, contiene istruzioni. buona pratica
usare una istruzione per linea. Questo standard non comunque richiesto. Si
possono usare i due punti per separare istruzioni multiple su una singola linea.
Lesempio seguente combina quattro istruzioni su una unica linea:
Sub OneLine ( )
x= 1: y= 2: z= 3: MsgBox x + y + z
End Sub

Molti programmatori convengono che questo codice sarebbe pi semplice da leggere


se si utilizzasse una istruzione per linea:
Sub OneLine ( )
x= 1
y= 2
z= 3
MsgBox x + y + z
Uso avanzato di MS Excel

44

End Sub

Ogni linea pu essere lunga quanto si desidera; la finestra di modulo VBA prosegue
a sinistra, fintanto non si raggiunge la parte destra. Per linee lunghe, si puoi usare la
sequenza continua di linea di VBA: un trattino in basso (_) preceduto da uno spazio.
Per esempio:
Sub LineaLunga ( )
ValoreEstivo =
Worksheets (Foglio1). Range (A1). Value + _
Worksheets (Foglio2). Range (A1). Value
End Sub

Quando si registrano delle macro, Excel spesso usa il trattino underscore per
spezzare una espressione lunga in linee multiple. Dopo essere entrati nellistruzione,
VBA esegue le seguenti azioni per facilitarne la lettura:
 Inserisce spazi tra operatori. Se si scrive Ans=1+2 (senza spazi), per esempio,
VBA converte in
Ans = 1 + 2

 VBA ordina il tipo di lettere per parole chiave, propriet e metodi. Se si registra
il seguente testo:
Results=activesheet.range (a1).value=12

VBA converte in:


Results = ActiveSheet.Range (a1).Value = 12

Da notare che il testo che si trova tra le virgolette (in questo caso a1) non
cambiato.
 Perch il nome delle variabili di VBA non sia un elemento suscettibile,
linterprete di default registra i nomi di tutte le variabili con le stesse lettere
cos che il loro carattere incontra il carattere recentemente digitato. Per
esempio se prima si specifica una variabile come myvalue (tutto minuscolo) e
poi si accede alla variabile come MyValue (un po minuscolo e maiuscolo), VBA
cambia tutto in MyValue. Si fa eccezione se si dichiara la variabile con Dim o
espressione simile; in questo caso, il nome della variabile apparir sempre
come stato dichiarato.
 VBA esamina attentamente listruzione per verificare che non ci siano errori di
sintassi. Se VBA trova un errore, automaticamente cambia il colore della linea
e pu visualizzare un messaggio che sta a significare che c un problema.
Utilizzare il comando VBE Strumenti/Opzioni per visualizzare la casella di
dialogo delle opzioni, dove si controlla il colore dellerrore e dove ogni
messaggio di errore viene visualizzato (usare lopzione Controllo automatico
sintassi della scheda Editor).
Di seguito ci sono pochi generali suggerimenti su come utilizzare al meglio i
commenti
Uso avanzato di MS Excel

45








Usare i commenti per descrivere brevemente lo scopo di ogni procedura.


Usare i commenti per descrivere le modifiche fatte nella procedura.
Usare i commenti per indicare luso di funzioni non in modalit non standard.
Usare i commenti per descrivere lo scopo delle variabili.
Usare i commenti per descrivere il lavoro fatto per superare gli errori di Excel.
Scrivere subito i commenti sulle specifiche della propria programmazione.
Se si vuole testare una procedura che non include particolari
istruzioni o gruppi di istruzioni, invece di cancellare
listruzione, si pu ritornare sullistruzione inserendo un
apostrofo allinizio. VBA allora ignora listruzione/i quando la
procedura viene eseguita. Per riconvertire il commento in
unistruzione, eliminare lapostrofo.

La barra di apertura degli strumenti di VBE contiene due utili pulsanti. Selezionare un
gruppo di istruzioni e poi utilizza il pulsante Commento per convertire le istruzioni in
commenti. Il pulsante Rimuovi commento, al contrario, converte un gruppo di
commenti in istruzioni.

Variabili, tipi di dati e costanti


Scopo principale di VBA quello di manipolare dati. Alcuni dati si trovano negli
oggetti, come ad esempio le pagine di lavoro in successione. Altri dati vengono
depositati nelle variabili che create.
Una variabile consiste nel denominare un luogo nella memoria del computer ove
allocare dati. Le variabili possono accogliere una ampia variet di tipi di dati da
semplici valori booleani (True or False) a valori a doppia-precisione (vedere sezione
seguente). Utilizzando gli stessi segni operatori si assegna un valore ad una variabile
(se ne parler pi avanti).
opportuno assegnare a ogni variabile un nome il pi descrittivo possibile. VBA,
comunque, ha poche regole riguardanti i nomi delle variabili.
 Sipossono utilizzare caratteri alfabetici, numeri e alcuni caratteri di
punteggiatura, ma il primo carattere deve essere di tipo alfabetico.
 VBA non fa distinzione fra maiuscolo e minuscolo. Per rendere maggiormente
interpretabile una variabile, il programmatore spesso usa caratteri misti (per
esempio TassoInteresse piuttosto che Tassointeresse).
 Non si possono utilizzare spazi o punti. Per rendere pi chiare alla lettura le
variabili, il programmatore spesso utilizza il carattere underscore
(Tasso_Interesse).
 Caratteri speciali come #, $, %, &, or !, non possono essere inclusi nel
nome di una variabile.
 Il nome di una variabile pu comprendere fino a 254 caratteri.
La seguente lista contiene alcuni esempi di dichiarazioni che usano diverse tipologie
di variabili. I nome delle variabili sono alla sinistra dei segni di uguale. Ogni

Uso avanzato di MS Excel

46

dichiarazione assegna al valore alla destra del segno di uguale la variabile a sinistra.
Es.:

X = 1
TassoInteresse = 0.075
RataAffitto = 243089
IngressoDati = False
X = x + 1
MioNumero = TuoNumero * 1.25
NomeUtente = Bob Johnson
DataInizio = #3/14/98#
VBA ha molte parole riservate (protette), che non si possono usare per nominare
variabili o procedure. Se si provi ad usarne una, appare un messaggio di errore. Per
esempio, sebbene la parola riservata Next possa costituire un nome di variabile
descrittiva, ci genera un errore di sintassi:
Next = 132

Sfortunatamente, il messaggio di errore di sintassi non sempre chiaro. La


precedente istruzione genera questo messaggio di errore: Errore di compilazione:
Previsto: identificatore. Sarebbe interessante se nel messaggio di errore ci fosse
scitto qualcosaltro tipo Parola riservata assegnata a una variabile. Cos se una
istruzione produce un messaggio di errore insolito, si pu controllare lhelp in linea
per conoscere se il nome della variabile non abbia un uso speciale in VBA.

Definizione del tipo di dati


VBA semplifica la vita ai programmatori perch pu automaticamente manipolare
tutti i dettagli coinvolti in rapporto con i dati. Non tutti i linguaggi di programmazione
fanno questo cos facilmente. Per esempio, alcuni linguaggi prevedono una scrittura
rigorosa del codice, il che significa che il programmatore deve esplicitamente definire
il tipo di dati per ogni variabile usata.
Per tipo di dati si intende come i dati vengono immagazzinati nella memoria come
interi, numeri reali, stringhe e cos via. Sebbene VBA faccia attenzione ai dati scritti
automaticamente, questo ha un costo: lenta esecuzione e bassa efficienza di utilizzo
della memoria. Il risultato che, permettendo VBA la manipolazione del tipo di dati,
pu presentare problemi qualora si avvii una applicazione lunga e complessa. Un
altro vantaggio nellesplicitare la dichiarazione delle variabili come un particolare tipo
di dati che VBA pu eseguire il controllo degli errori in fase di compilazione. Questi
errori potrebbero altrimenti essere difficili da individuare.

Uso avanzato di MS Excel

47

Varie modalit di incorporamento di tipo di dati in VBA


Tipo di dati

Integer
Long
Single

Bytes
utilizzati
1 byte
2 byte
Vero o Falso
2 bytes
4 bytes
4 bytes

Double

8 bytes

Currency

8 bytes

Decimal

14 bytes

Date
Object
String
(lunghezza
variabile)
String
(lunghezza fissa)
Variant
(con numeri)
Variant
(con caratteri)
User-defined

8 bytes
4 bytes
10 bytes
string length

Byte
Boolean

Length
string
16 bytes
22 bytes
string length
Varies

Tipi di dati in VBA


Intervallo dei valori
Da 0 a 255
Da -32.768 a 32.767
Da -2.147.483.648 a 2.147.483.647
Da -3,402823E38 a 1,401298E-45 (per valori
negativi); da 1,401298E-45 a 3,402823E38 (per
valori positivi)
Da -1,79769313486232E308 a 4,94065645841247E-324 (per valori negativi);
da 4,94065645841247E-324 a
1,79769313486232E308 (per valori positivi)
Da -922.337.203.685.477,5808 a
922.337.203.685.477,5807
+/- 79.228.162.514.264.337.593.543.950.335
con nessun punto decimale;
+/- 7,9228162514264337593543950335 con 28
decimali
Dal 1 Gennaio 0100 al 31 Dicembre 9999
Nessun oggetto di riferimento
+ Da 0 ad approssimativamente 2 miliardi
of Da 1 ad approssimativamente 65.400
Nessun valore numerico al di fuori del range dei
dati Double
+ Da 0 ad approssimativamente 2 miliardi
Vario a seconda dellelemento

I tipi di dati decimali furono introdotti in Excel 2000, e non possono


essere usati in versioni precedenti. Questo un tipo di dato
piuttosto anomalo perch attualmente non pu essere dichiarato.
Infatti, esso un sotto-tipo di Variant. Occorre usare la funzione
VBA CDec per convertire un dato di tipo Variant in dato di tipo
decimale.
Generalmente meglio usare tipo di dati che utilizzano il minor numero di bytes
perch ancora possa manipolare tutti i dati ad esso affidati. Quando VBA lavora con
dati, la velocit di esecuzione in funzione del numero di bytes che ha a sua
disposizione. In altre parole, meno sono i bytes utilizzati per i dati, pi veloce VBA
nellaccedere ai dati e e manipolarli.

Uso avanzato di MS Excel

48

Per i fogli di calcolo, Excel utilizza tipi di dati Double, cos che double una buona
scelta per operazioni con numeri in VBA per non perdere in precisione. Per calcoli di
interi si pu usare il tipo di dati Integer, se si certi che i valori non siano superiori a
32.767, altrimenti usare il tipo Long. Quando si trattano numeri di righe con fogli
Excel, va usato il tipo di dati Long perch il numero di righe per pagina di lavoro
superiore al massimo valore assegnato al tipo di dati interi.

Dichiarazione di variabili
Se non si dichiari il tipo di dati per una variabile utilizzata in una routine, VBA usa i
tipi di dati di default, Variant. I dati archiviati come Variant cambiano tipologia in
funzione di come vengono utilizzati. La seguente procedura dimostra come una
variabile possa assumere differenti tipi di dato.
Sub

VariantDemo ( )
MyVar = 123
MyVar = MyVar / 2
MyVar = Answer: & MyVar
MsgBox MyVar
End Sub

Nella procedura VariantDemo, MyVar comincia come stringa a tre caratteri. Quindi la
stringa divisa in due ed inizia con dati di tipo numerico. Successivamente, MyVar
apposta ad una stringa, convertendo MyVar si ritorna alla stringa. Il MsgBox
mostra sul display la stringa finale: Answer: 61.5
Per dimostrare ulteriormente i possibili problemi dati dal tipo di dati variant, proviamo
ad eseguire questa procedura:
Sub

VariantDemo2 ()
MyVar = 123
MyVar = MyVar + MyVar
MyVar = Risposta: & MyVar
MsgBox MyVar
End Sub
Il messaggio che verr visualizzato sar: Risposta: 123123. Quando si tratta con
dati Variant che contengono stringhe di testo, loperatore + esegue una stringa di
concatenamento.

Uso avanzato di MS Excel

49

Uso di componenti esterne


Una delle caratteristiche pi utili che derivano dallimplementazione di VBA in Excel
la possibilit di utilizzare componenti esterne, sotto forma di DLL (Dynamic Link
Libraries), vale a dire di componenti software che mettono a disposizione di una
applicazione (Excel nel nostro caso) delle funzionalit di elaborazione dati,
manipolazione testi ecc. . Le DLL possono essere sviluppate in diversi linguaggi di
programmazione (C++, Delphi, Visual Basic 6, ecc), ma risultano comunque
utilizzabili in Excel. Quando queste DLL sono sviluppate secondo il modello COM
della Microsoft, il loro uso allinterno di Excel risulta notevolmente semplificato. In
questo capitolo vedremo come utilizzare tre DLL sviluppate specificamente per lo
sviluppo di modelli agro-ecologici.

Lettura di files meteo con PAR_CSDLL.dll


Per utilizzare questa DLL dobbiamo prima installarla sul nostro PC. Via internet ci
colleghiamo a http://www.isci.it/tools e scarichiamo linstallazione di PAR_CSDLL.
Linstallazione richiede pochi minuti. Fatta linstallazione, apriamo una nuova cartella
di lavoro Excel, e ci spostiamo nel VBA editor. Qui clicchiamo su
Strumenti/Riferimenti. Cerchiamo e selezioniamo la componente PAR_CSVB6 come
da figura:

Adesso vogliamo vedere quali oggetti, e quindi quali metodi e quali propriet, ci
mette a disposizione questa DLL. Sempre dallambiente VBA, con il tasto F2,
attiviamo lobject browser. Selezioniamo la libreria PAR_CSVB6, e questo ci fa
vedere le classi contenute nella libreria. Clicchiamo sulla classe CS_Met, e questo ci
mostrer i membri della classe. Cerchiamo e selezioniamo il metodo ReadMetFile, e
possiamo vedere la sintassi del metodo in basso (Function ReadMetFile(.) as long)

Uso avanzato di MS Excel

50

Nel frattempo avremo dato unocchiata al file di help contenuto nellinstallazione


(PAR_CSDLL.chm), e in particolare:

Leggiamo che il metodo ReadMetFile serve per leggere i dati da un file meteo, e che,
a lettura avvenuta, i dati ed alcune elaborazioni sono rese disponibili attraverso le
propriet della classe. Sempre nel file di help, leggeremo quale deve essere il
formato del file con i dati meteorologici (un file di esempio fornito con
lapplicazione). Bene, non ci resta che scrivere poche linee di codice per utilizzare le
capacit della classe CS_Met.
Torniamo al nostro file Excel. Ci spostiamo dallambiente VBA al foglio di lavoro.
Passiamo in Modalit Progettazione, e poniamo un pulsante sul foglio di lavoro.
Clicchiamo con il tasto destro sul pulsante e, nella finestra propriet, cambiamo il
valore di Name a cmdReadFile e di Caption a Read File. Chiudiamo la finestra delle
Uso avanzato di MS Excel

51

propriet e facciamo un doppio click sul pulsante. Ci ritroviamo nellambiente VBA


con il cursore allinterno della procedura Private sub cmdReadFile_click.
Scriviamo il codice:
Private sub cmdReadFile_Click
Dim
Dim
Dim
Dim

iIndx As Integer
fname As String
dat As CS_Met
result As Long

With CommonDialog1
.Filter = "CS met files (*.dat, *.gen)|*.dat;*.gen"
.ShowOpen
fname= .Filename
End With
Foglio1.Cells(2, 2).Value = fname

scrive nome file met su foglio1

Set dat = New CS_Met


result = dat.ReadMetFile(fname)
'write daily
With Foglio1
For iIndx = 1 To
.Cells(iIndx
.Cells(iIndx
.Cells(iIndx
.Cells(iIndx
.Cells(iIndx
.Cells(iIndx
.Cells(iIndx
.Cells(iIndx
Next iIndx
End With

crea oggetto tipo CS_Met


legge file met

scrive valori giornalieri su foglio1


366
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,

1).Value
2).Value
3).Value
4).Value
5).Value
6).Value
7).Value
8).Value

=
=
=
=
=
=
=
=

iIndx
dat.Rain(iIndx)
dat.Tmax(iIndx)
dat.Tmin(iIndx)
dat.Rad(iIndx)
dat.Hmax(iIndx)
dat.Hmin(iIndx)
dat.WSpeed(iIndx)

With Foglio
scrive valori annuali, mensili, decadali su foglio2
'write annual
.Cells(3, 2).Value = dat.RainA
.Cells(3, 3).Value = dat.TmaxA
.Cells(3, 4).Value = dat.TminA
.Cells(3, 5).Value = dat.RadA
.Cells(3, 6).Value = dat.HmaxA
.Cells(3, 7).Value = dat.HminA
.Cells(3, 8).Value = dat.WSpeedA
'write monthly
For iIndx = 1 To 12
.Cells(iIndx + 5, 2).Value = dat.RainM(iIndx)
.Cells(iIndx + 5, 3).Value = dat.TmaxM(iIndx)
.Cells(iIndx + 5, 4).Value = dat.TminM(iIndx)
.Cells(iIndx + 5, 5).Value = dat.RadM(iIndx)
.Cells(iIndx + 5, 6).Value = dat.HmaxM(iIndx)
.Cells(iIndx + 5, 7).Value = dat.HminM(iIndx)
.Cells(iIndx + 5, 8).Value = dat.WSpeedM(iIndx)
Next iIndx
'write 10 days
For iIndx = 1 To 36
.Cells(iIndx + 19, 2).Value = dat.Rain10(iIndx)
.Cells(iIndx + 19, 3).Value = dat.Tmax10(iIndx)
.Cells(iIndx + 19, 4).Value = dat.Tmin10(iIndx)
.Cells(iIndx + 19, 5).Value = dat.Rad10(iIndx)
.Cells(iIndx + 19, 6).Value = dat.Hmax10(iIndx)
Uso avanzato di MS Excel

52

.Cells(iIndx + 19, 7).Value = dat.Hmin10(iIndx)


.Cells(iIndx + 19, 8).Value = dat.WSpeed10(iIndx)
Next iIndx
End With
Set dat = Nothing

cancella oggetto dalla memoria

End Sub

Mentre scriviamo il codice, notiamo che, una volta istanziato loggetto


dat come oggetto di tipo CS_Met, ogni volta che scrviamo dat. Ci
appaiono metodi e propriet delloggetto, in questo caso tutti i valori
delle variabili meteorologiche dinteresse. Il valore di queste variabili appunto
memorizzato nelle propriet di sola lettura che abbiamo visto nel visualizzatore di
oggetti.

Calcolo evapotraspirazione con ET_CSDLL.dll


Per utilizzare questa DLL dobbiamo prima installarla sul nostro PC. Via internet ci
colleghiamo a http://www.isci.it/tools e scarichiamo linstallazione di ET_CSDLL.
Linstallazione richiede pochi minuti. Fatta linstallazione, questa volta apriamo la
cartella di lavoro Excel fornita come esempio nellinstallazione (ETCS_DLL.xls), e ci
spostiamo nel VBA editor. Con F2 attiviami il visualizzatore di oggetti e selezioniamo
la libreria ETCS_100. In questo caso notiamo che c solo una classe, ETCS_dll, e
un oggetto, ET_CSinputs. ET_CSinputs una variabile user defined, o Type.

Uso avanzato di MS Excel

53

Una variabile user defined contiene una serie di variabili, come ad esempio nella
finestra dellobject browser relativamente ad ET_CSinputs. Vedremo nelle righe
successive perch un Type molto utile. Intanto, dal file di help della DLL, vediamo
in che collezione di variabili consiste ET_CSinputs:

Notate che la variabile ET_Method definita come ET_CSmethods, vale


a dire come Enum anchesso disponibile. Gli Enum permettono di
associare stringhe a costanti numeriche, aumentando la leggibilit del
codice.
Per assegnare valori ad un Type bisogna rispettare il
dimensionamento delle variabili interne. Per esempio, nel nostro
caso:

Dim ET_input As ET_CSinputs


With ActiveWorkbook.Worksheets(1)
If .Cells(2, 2).Value = "PENMAN_MONTEITH" Then
ET_input.ET_method = PENMAN_MONTEITH
Else
ET_input.ET_method = PRIESTLEY_TAYLOR
Uso avanzato di MS Excel

54

End If
ET_input.DOY = .Cells(3, 2).Value
ET_input.Tmax = .Cells(4, 2).Value
ET_input.Tmin = .Cells(5, 2).Value
ET_input.Tdew = .Cells(18, 2).Value
ET_input.RAD = .Cells(6, 2).Value
ET_input.WSpeed = .Cells(7, 2).Value
ET_input.Hmax = .Cells(8, 2).Value
ET_input.Hmin = .Cells(9, 2).Value
ET_input.WMeasHeight = .Cells(10, 2).Value
ET_input.LAI = .Cells(11, 2).Value
ET_input.kc = .Cells(12, 2).Value
ET_input.k = .Cells(13, 2).Value
ET_input.PTconstant = .Cells(14, 2).Value
ET_input.aridity_factor = .Cells(15, 2).Value
ET_input.latitude = .Cells(16, 2).Value
ET_input.Elevation = .Cells(17, 2).Value
End With

Assumiamo che i valori che sono assegnati dalle celle siano corrispondenti ai valori
richiesti delle variabili, altrimenti (per esempio, una stringa al posto di una variabile
numerica) avremo un errore durante lesecuzione.
Sempre nel visualizzatore di oggetti nella finestra VBA della nostra cartella, adesso
clicchiamo sulla classe ETCS_dll, e poi sul metodo start_PET:
.

Uso avanzato di MS Excel

55

Notate che linput previsto per start_PET ET_CSinputs. Quindi, quando faremo
una chiamata al metodo start_PET, passeremo un tipo ET_CSinputs che avremo
prima definito e a cui avremmo assegnato i valori dinteresse. Questo ci che
accade nel codice della cartella esempio della DLL:
Private Sub cmdCalcola_Click()
Dim ob As ETCS_dll
Dim FReturnLong As Long
Dim ET_input As ET_CSinputs
With ActiveWorkbook.Worksheets(1)
If .Cells(2, 2).Value = "PENMAN_MONTEITH" Then
ET_input.ET_method = PENMAN_MONTEITH
Else
ET_input.ET_method = PRIESTLEY_TAYLOR
End If
ET_input.DOY = .Cells(3, 2).Value
ET_input.Tmax = .Cells(4, 2).Value
ET_input.Tmin = .Cells(5, 2).Value
ET_input.Tdew = .Cells(18, 2).Value
ET_input.RAD = .Cells(6, 2).Value
ET_input.WSpeed = .Cells(7, 2).Value
ET_input.Hmax = .Cells(8, 2).Value
ET_input.Hmin = .Cells(9, 2).Value
ET_input.WMeasHeight = .Cells(10, 2).Value
ET_input.LAI = .Cells(11, 2).Value
ET_input.kc = .Cells(12, 2).Value
ET_input.k = .Cells(13, 2).Value
ET_input.PTconstant = .Cells(14, 2).Value
ET_input.aridity_factor = .Cells(15, 2).Value
ET_input.latitude = .Cells(16, 2).Value
ET_input.Elevation = .Cells(17, 2).Value
End With
Set ob = New ETCS_dll
FReturn = ob.start_PET(ET_input)
With ActiveWorkbook.Worksheets(1)
.Cells(2, 7).Value = Format(ob.get_refPET, "#0.00")
.Cells(3, 7).Value = Format(ob.get_cropPET, "#0.00")
.Cells(4, 7).Value = Format(ob.get_PTR, "#0.00")
.Cells(5, 7).Value = Format(ob.get_PEV, "#0.00")
.Cells(6, 7).Value = Format(ob.get_Aereoynamic_Resistance, "#0.00")
.Cells(7, 7).Value = Format(ob.get_Isothermal_LWNR, "#0.00")
.Cells(8, 7).Value = Format(ob.get_Latent_Heat_Vapour, "#0.00")
.Cells(9, 7).Value = Format(ob.get_LightInterception, "#0.00")
.Cells(10, 7).Value = Format(ob.get_NetRadiation, "#0.00")
.Cells(11, 7).Value = Format(ob.get_PotRad, "#0.00")
.Cells(12, 7).Value = Format(ob.get_DayLenght, "#0.00")
.Cells(13, 7).Value = Format(ob.get_SVP, "#0.00")
.Cells(14, 7).Value = Format(ob.get_slopeSVP, "#0.00")
.Cells(15, 7).Value = Format(ob.get_Vol_Heat_Capacity, "0.00000")
.Cells(16, 7).Value = Format(ob.get_VPD, "#0.00")
.Cells(17, 7).Value = Format(ob.get_VPDmax, "#0.00")
.Cells(18, 7).Value = Format(ob.get_AirHumidityCorrFact, "#0.00")
.Cells(19, 7).Value = Format(ob.get_ActualVapourPressure, "#0.00")
End With

Uso avanzato di MS Excel

56

Set ob = Nothing
End Sub

Uso avanzato di MS Excel

57