Sei sulla pagina 1di 92
Uso avanzato di MS Excel 1

Uso avanzato di MS Excel

1

LE BASI DEL FOGLIO ELETTRONICO EXCEL

5

GLI ELEMENTI FONDAMENTALI

5

LE FORMULE

5

RIFERIMENTI

6

NOMI

7

TRIDIMENSIONALITÀ

7

RIFERIMENTI AD ALTRE CARTELLE

8

LE FUNZIONI

8

Funzioni di base

8

Funzioni logiche

9

Funzione di ricerca verticale

10

Funzioni del tempo

10

VISUAL BASIC PER APPLICAZIONI

11

PREMESSE

11

ESEMPI BREVI

11

Esempio 1 – Creare una macro dall’editor VBA

11

Esempio 2 – La funzione MsgBox

12

Esempio 2 – Personalizzazione della barra del titolo di Excel

13

Esempio 3 – Individuazione di colonne nascoste

13

Esempio 4 – Eliminazione di un foglio

13

Esempio 5 – Protezione di una macro

14

Esempio 6 – Esecuzione automatica di una macro all’apertura

14

Esempio 7 – Conteggio del numero di righe, colonne e fogli

14

Esempio 8 – Copia di dati

15

Esempio 9 – Inserimento della data corrente

15

Esempio 10 – Controllo del contenuto di una cella

15

Esempio 11 – Controllo della posizione di una cella

16

Esempio 12 – Eliminazione delle celle vuote

16

Esempio 13 – Funzioni

16

LE BASI DI VBA

17

L’EDITOR DI VISUAL BASIC

19

Attivazione di VBE

19

Le finestre VBE

20

Barra menu

20

Barre degli strumenti

20

Finestra di Gestione progetti

20

Finestra

codice

20

Finestra

immediata

20

GESTIONE PROGETTI

21

Aggiungere un nuovo modulo VBA

22

Rimuovere un modulo VBA

22

Esportare e importare oggetti

22

LE FINESTRE DI CODICE

22

Minimizzare e massimizzare finestre

23

Mantenimento del codice VBA

24

Entrando nel codice VBA

24

Entrare manualmente nel codice

24

Usare il registratore di macro

27

Copiare il codice VBA

29

PERSONALIZZARE LAMBIENTE VBE

29

La scheda Editor

29

Controllo automatico sintassi

30

Dichiarazione di variabili obbligatoria

30

Elenco membri automatico

30

I

31

nformazioni rapide automatiche

31

Descrizione

dati automatica

31

Rientro automatico

31

Trascinamento della selezione

32

Visualizza modulo intero

32

Separa routine

32

La scheda Formato editor

Uso avanzato di MS Excel

32

2

Colori

33

codice

33

Tipo di carattere

33

Dimensione

33

Barra indicatori

33

La scheda Generale

33

La scheda Ancoraggio

33

OGGETTI E COLLEZIONI

34

L’oggetto gerarchia

34

Le collezioni

35

Riferimento all’oggetto

35

PROPRIETÀ E METODI

36

Proprietà degli oggetti

36

Metodi degli oggetti

37

GLI OGGETTI RANGE

37

La proprietà Range

37

La proprietà celle

39

COSA SAPERE DEGLI OGGETTI

40

Concetti essenziali da ricordare

40

VBA: PROGRAMMAZIONE FONDAMENTALE

42

ELEMENTI DI LINGUAGGIO VBA: UNA PANORAMICA

42

COMMENTI

42

Ispezione del codice VBA

43

VARIABILI, TIPI DI DATI E COSTANTI

45

Definizione del tipo di dati

46

Dichiarazione di variabili

48

Determinare il tipo di dati

48

Forzatura a dichiarare tutte le variabili

50

Scopo delle variabili

50

Variabili local

50

Variabili modulewide

52

Variabili public

52

Variabili static

53

Lavorare con le costanti

53

Dichiarazione di costanti

53

Costanti predefinite

54

Le stringhe

54

Le date

55

DICHIARAZIONI DI ASSEGNAZIONE

56

VETTORI

57

Dichiarare vettori

57

Dichiarare vettori multidimensionali

58

VARIABILI OGGETTO

58

TIPI DI DATI DEFINITI DALLUTENTE

59

FUNZIONI BUILT-IN

60

MANIPOLARE OGGETTI E COLLEZIONI

64

Costruzioni With-End With

64

Istruzioni Each-Next

65

CONTROLLO DELLESECUZIONE

67

Dichiarazione GoTo

67

Istruzioni If-Then

67

Istruzione Select Case

71

Looping di blocchi di istruzioni

73

Loops For-Next

74

Loops Do While

76

Loops Do Until

78

USO DI COMPONENTI ESTERNE

79

LETTURA DI FILES METEO CON PAR_CSDLL.DLL

79

CALCOLO EVAPOTRASPIRAZIONE CON ET_CSDLL.DLL

82

VALUTAZIONE DELLA PERFORMANCE DEI MODELLI CON IRENE_DLL.DLL

86

1) Caricamento dei

87

Uso avanzato di MS Excel

3

Es. 1 – Caricamento dati

87

2) Calcolo delle statistiche

Es. 2 – Calcolo dei parametri di regressione

3) Gestione degli output

Es. 3 – Display dei risultati

Altro esempio applicativo

Uso avanzato di MS Excel

87

89

90

90

90

4

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). L’elemento 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 all’incrocio 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. L’addizione è 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. Quest’ultima 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: +, -, *, /. L’espressione: =10+5*2 dà come risultato 20. L’espressione: =(10+5)*2 come risultato 30. Una formula può anche gestire valori di testo. Se la cella A1 contiene il nome Modello, introducendo la formula =A1 in un’altra cella, anch’essa visualizzerà Modello. Questo è un valore stringa.

Uso avanzato di MS Excel

5

È possibile concatenare (unire) diversi valori di testo usando l’operatore

spaziale & (e commerciale). Avendo in A1 Modello e in B1 colturale, introducendo in un’altra cella la formula =A1&B1 si ottiene Modellocolturale. Per inserire uno spazio tra sostantivo e aggettivo, la formula va modificata come: =A1&” “&B1. Quest’ultima formula usa due operatori di concatenamento (&) e una costante di stringa, cioè lo spazio racchiuso tra le doppie virgolette. L’operatore & può concatenare anche celle contenenti valori numerici. Se la cella A1 contiene 10 e la cella B1 5, inserendo la formula =A1&B1 in un’altra 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 l’opzione 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

Nell’uso 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 un’altra 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 l’opzione 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 aggiornare il risultato.

In base all’operazione 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

per

F9
F9

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 l’adeguamento 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,

Uso avanzato di MS Excel

6

cioè il cambiamento di colonna e si bloccano gli spostamenti verticali, cioè i cambi di riga. Il riferimento $C5 opera esattamente il contrario.

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

Barra della formula . Digitare il nome desider ato e premere INVIO. Se si denominano Bob

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 all’utilizzo 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 dell’anno (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

premere il tasto

finiti

i

+ +
+
+

, attivare il foglio Feb e poi la cella F10;

, attivare il foglio Dic e poi la cella F10;

quali

si

vogliono

sommare

i

valori,

fogli

dei

si

l’immissione della formula con un

INVIO.
INVIO.

conferma

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.

Uso avanzato di MS Excel

7

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 nome Elenco.xls, sempre collocata sul Desktop, si digita:

=[Elenco.xls]Films’!D3. Dopo aver confermato la formula la sintassi viene adeguata con l’intero 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 all’altra 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., un’analisi 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 dell’intervallo 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

rispettivamente, il valore massimo, minimo e medio dei valori contenuti nelle prime quattro celle delle colonne A, B e C.

MEDIA(A1:C4) restituiscono,

=MAX(A1:C4),

=MIN(A1:C4),

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.

Uso avanzato di MS Excel

8

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.

 

OPERATORI DI CONFRONTO

 

Maggiore

>

 

Diverso Maggiore o uguale Minore o uguale

<>

Minore

<

>=

Uguale

=

<=

La sintassi generale della funzione logica SE è: =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 all’occorrenza 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. La funzione logica E ha la sintassi generale =E(Condizione1,Condizione2), che restituisce:

=E(Vero,Vero)

VERO

=E(Vero,Falso)

FALSO

=E(Falso,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 dell’esempio. La funzione logica O la sintassi generale =O(Condizione1,Condizione2), che restituisce

=O(Vero,Vero)

VERO

=O(Vero,Falso)

VERO

=O(Falso,Falso)

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”)

Uso avanzato di MS Excel

9

In questo caso la funzione SE deve avvalersi della funzione E perché non riesce a testare più condizioni da sola. L’uso di una o più funzioni all’interno di un’altra 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 nidificazione della funzione SE inserendo al suo interno un’altra funzione SE con l’ausilio 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: all’interno di un argomento, vero o falso, anche di un SE già nidificato, si può porre un’altra 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)

L’argomento intervallo è facoltativo e può assumere il valore di VERO o FALSO. L’esempio =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 l’argomento 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 l’argomento 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

10

Visual Basic per Applicazioni

Premesse

Molti programmatori non considerano l’ipotesi di programmare in BASIC. Il nome stesso (acronimo di Beginner’s 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. All’inizio 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 sull’uso 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 dall’editor VBA

L’apprendimento 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

11

Scrivete “Comunicare” nella finestra Nome macro: e quindi Crea. Si entra nell’ambiente VBA, costituito da

Scrivete “Comunicare” nella finestra Nome macro: e quindi Crea. Si entra nell’ambiente 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 un’immagine (ad esempio una clipart:

Inserisci/Immagine/Clipart). Posizionando il puntatore del mouse sopra l’immagine.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 l’immagine compare una mano e cliccando viene eseguita la macro (ovvero l’insieme 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 sull’immagine 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 nell’esempio seguente:

Uso avanzato di MS Excel

12

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 l’eliminazione 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 l’esecuzione della macro determina l’eliminazione 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 End Sub

Uso avanzato di MS Excel

13

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 l’editor di VBA e dal suo menu Strumenti selezionare la voce Proprietà di VBAProject. Scegliere la scheda Protezione ove è possibile immettere la password per proteggere l’accesso al codice della macro.

Esempio 6 – Esecuzione automatica di una macro all’apertura

Per far eseguire una macro all’apertura 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” dall’editor di VBA, finestra a sinistra denominata Progetto – VBAProject (se non è visibile richiamarla da Visualizza/Gestione progetti). Cliccare il menu in alto denominato (generale) e scegliere Workbook. Sull’editor compare il seguente codice:

Private Sub Workbook_Open()

End Sub

Immettere l’istruzione 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 dell’intervallo 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) End Sub

Uso avanzato di MS Excel

14

Esempio 8 – Copia di dati

La copia di dati contenuti in un intervallo di seguente macro:

Sub CopiaRange() Range("A1:A3").Copy Destination:=ActiveCell End Sub

In particolare i dati contenuti nell’intervallo di celle A1:A3 vengono copiati in un intervallo corrispondente che ha inizio dalla cella attiva. L’attivazione 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, l’esecuzione 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:

celle può essere fatta con la

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 l’istruzione Range("A1") = Now. Il codice completo risulta:

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

L’esecuzione 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 End Sub

Uso avanzato di MS Excel

15

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 dall’utente:

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 dall’aggiornamento e dal tremolio e assicura l’esecuzione 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 da contatore in un intervallo selezionato e causano l’interruzione 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. Nell’esempio 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 'in questo caso è 550 Case Else tax = (income - 7500) * 0.25 + 550 End Select

End Function

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

Uso avanzato di MS Excel

16

Le basi di VBA

L’elenco 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

Test( )

End

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 un vettore). Una funzione può essere chiamata da un’altra 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 all’interno dell’ambiente in cui si lavora (in questo caso Excel è l’ospite dell’applicazione). Excel offre più di 100 classi di oggetti da manipolare. Esempi di oggetti sono il libro di lavoro, il foglio di lavoro, l’intervallo 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. L’oggetto Workbook può contenere altri oggetti, come Worksheet

e Chart. L’oggetto 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.

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 dall’elemento.

Uso avanzato di MS Excel

17

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 nell’oggetto Excel Application. Estendendo questo ad un altro livello, si può far riferimento a Foglio1 in Book1 come:

Application.Workbooks(“Book1.xls”).Worksheets(“Foglio”).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(“Foglio1”).Range(“A1”)

Se Foglio1 è 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 l’oggetto con la proprietà, separandoli con un punto. Per esempio, si può far riferimento al valore nella cella A1 nel foglio 1 come:

Worksheets(“Foglio1”).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(“Foglio1”).Range(“A1”).Value

Gli oggetti hanno metodi. Un metodo è un’azione che compie l’oggetto. Per esempio, uno dei metodi per l’oggetto Range è ClearContents. Questo metodo cancella il contenuto dell’intervallo.

I metodi vengono indicati combinando l’oggetto con il metodo, separandoli con un punto. 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 vettori, loop, e così via.

Fino qui è stata fornita una descrizione a grandi linee di VBA. Ora è il momento di entrare nel dettaglio.

Uso avanzato di MS Excel

18

L’editor 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 all’uso 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. 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

strumenti di Visual Basic.

posto

nella

barra

degli

Editor strumenti di Visual Basic. posto nella barra degli Non bisogna confondere Visual Basic Editor e

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.

mostrata in figura. Le finestre si possono nascondere, ridurre, ingrandire e riorganizzare. Uso avanzato di MS

Uso avanzato di MS Excel

19

Le finestre VBE

VBE è costituito da diversi componenti cui, di seguito, ne viene fornita una breve descrizione.

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.

Visualizza/Finestra Immediata ha come via breve Ctrl+G. VBE configura i menu abbreviati. Ci ccando con il

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.

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 l’oggetto nella finestra Gestione progetti. Per esempio per vedere la finestra di codice dell’oggetto Foglio 1, si clicca due volte Foglio1 nella finestra Gestione progetti.

Un’altra strada per vedere la finestra di codice di un oggetto è quella di selezionare l’oggetto 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

20

Uso avanzato di MS Excel

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.

La figura seguente mostra una finestra di Gestione progetti.

figura seguente mostra una finestra di Gestione progetti . Quando si attiva VBE, non è detto

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

due volte l’oggetto nella finestra di Gestione progetti . Se sono aperti molt i libri di

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 l’oggetto ActiveWorkbook). Se il progetto ha qualche modulo VBA, il progetto elencato mostra pure l’elenco dei moduli. Un progetto può anche contenere gli oggetti denominati UserForm (anche conosciuti come finestre di dialogo). Se il progetto ha moduli di classe, mostrerà anche un elenco dei moduli di classe.

di classe, mostrerà anche un elenco dei moduli di classe. Uso avanzato di MS Excel In

Uso avanzato di MS Excel

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.

21

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.

e scegliere Inserisci/Modulo dal menu di scelta rapida. Quando si registra una macro, Excel automaticamente

Quando si registra una macro, Excel automaticamente inserisce un modulo VBA per mantenere il codice registrato.

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 una 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 l’oggetto 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.

è stato esportato usando il comando File/Esporta file . Se si vuole copiare un modulo o

Se si vuole copiare un modulo o un oggetto UserForm in un altro progetto, non è necessario esportare e poi importare l’oggetto. Accertarsi che entrambi i progetti siano aperti e semplicemente attivare le finestre Gestione progetti e trascinare l’oggetto da un progetto all’altro.

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)

Uso avanzato di MS Excel

22

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.

figura che segue mostra un esempio di che cosa si intende. Le finestre di codice sono

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 all’altro. 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 l’oggetto 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

un’espressione VBA simile a quella di seguito e premere Invio.

Uso avanzato di MS Excel

23

Workbooks(“myaddin.xla”).Close

Questa espressione esegue il metodo Chiudi dell’oggetto 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:

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 è un’informazione circa una variabile fornita a VBA. Per esempio, l’utente 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 dell’utente. 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.

piace suddividere il codice in numerosi differenti moduli. Sebbene si abbiano molte possibi lità su dove

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 all’oggetto che risponde all’evento. 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 dell’oggetto 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 l’attenzione 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

Uso avanzato di MS Excel

24

– 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 un’istruzione 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 l’istruzione nella linea seguente. Il seguente codice, per esempio, è una unica dichiarazione suddivisa in 4 righe:

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 dell’espressione. È una soluzione opzionale, ma aiuta a capire che queste quattro righe in realtà sono una singola dichiarazione.

quattro righe in realtà sono una singola dichiarazione. Come Excel, VBE ha livelli multipli di Annulla

Come Excel, VBE ha livelli multipli di Annulla e Ripeti. Perciò se si incontra un’istruzione cancellata che invece non andava cancellata, si può premere ripetutamente il tasto Annulla (o Ctrl+Z) fino a che l’istruzione non ritorna. Dopo l’annullamento, 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

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

End If

Sub

La figura seguente mostra come questo appare nel modulo VBA.

La figura seguente mostra come questo appare nel modulo VBA. Entra nel codice si nota che

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 all’interno 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 ( standard.

. Premere il pulsante Esegui Sub/UserForm ( standard. ) sulla barra degli strumenti Uso avanzato di

) sulla barra degli strumenti

Uso avanzato di MS Excel

25

La procedura viene eseguita e si può rispo ndere a una semplice finestra di dialogo

La procedura viene eseguita e si può rispondere a una semplice finestra di dialogo (vedi figura seguente) che mostra il nome dell’utente. Notare che Excel viene attivato quando la macro è eseguita.

ra il nome dell’utente. Notare che Excel viene attivato quando la macro è eseguita. Uso avanzato

Uso avanzato di MS Excel

26

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 l’operatore &) Usare la funzione built-in di VBA (MsgBox) Usare una costruzione If-Then-Else Concludere la procedura (ultima linea)

Usare il registratore di macro Un’altra 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 dell’orientamento 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 l’opzione 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

27

Lista 1 - Macro per variare l’orientamento 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 dell’impostazione 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 l’istruzione che setta la proprietà Orientation. In realtà, questa macro può essere semplificata ancora di più

Uso avanzato di MS Excel

28

perché la costruzione With-EndWith non è necessaria quando si modifica una sola proprietà:

Sub

ActiveSheet.PageSetup.Orientation = xlLandscape End Sub

Macro1( )

In questo esempio, la macro cambia la proprietà Orientation dell’oggetto Imposta pagina nel foglio attivo. L’istruzione 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

ActiveSheet.PageSetup.Orientation = 2 End Sub

Macro1( )

Si può usare l’help 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 l’oggetto PageSetup ha una proprietà Orientation.

a g e S e t u p ha una proprietà Orientation . Registrare le azioni

Registrare le azioni è la modalità migliore per imparare VBA, sebbene il risultato possa non essere esattamente ciò si desidera. Si può usare l’help 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. L’ultimo 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.

si puoi modifica re il codice come si preferisce. Come già detto in questo capito lo,

Come già detto in questo capitolo, si può anche importare un modulo intero che è stato esportato su un file.

Personalizzare l’ambiente VBE

VBE offre numerose opzioni per la personalizzazione dell’ambiente. 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

29

Controllo automatico sintassi L’opzione Controllo automatico sintassi controlla automaticamente errori di sintassi

Controllo automatico sintassi L’opzione 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 l’opzione Dichiarazione di variabili obbligatoria è settata, VBE inserisce la seguente dichiarazione all’inizio 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 dell’utente. Se le variabili non vengono dichiarate, tutti i dati sonodi di tipo Variant, e ciò non è efficiente.

i dati sonodi di tipo Variant, e ciò non è efficiente. Cambiare l’opzione Dichiarazione di variabili

Cambiare l’opzione 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 l’oggetto Application. È possibile selezionare un

Uso avanzato di MS Excel

30

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

(questo assicura anche che venga correttamente digitato). Informazioni rapide automatiche Se questa opzione è

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.

questa caratteristica in azione per la proprietà Range . Descrizione dati automatica Se l’opzione è settata,

Descrizione dati automatica Se l’opzione è 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. È possibile specificare il numero di caratteri di rientro (di default sono 4).

Uso avanzato di MS Excel

31

Usare la chiave Tab per rientra re nel codice e non la barra spazio. Con

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 L’opzione 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 l’opzione è disattivata, si può visualizzare solo una procedura alla volta.

Separa routine Quando l’opzione 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 l’opzione della scheda Formato editor della finestra di dialogo delle Opzioni.

l’opzione della scheda Formato editor della finestra di dialogo delle Opzioni . Uso avanzato di MS

Uso avanzato di MS Excel

32

Coloricodice

L’opzione 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.

Tipo di carattere L’opzione Tipo di carattere permette di impostare il carattere del testo che si usa nei moduli VBA.

Dimensione Specifica la grandezza del carattere nei moduli VBA.

Barra indicatori Questa opzione controlla la disposizione del margine verticale dell’indicatore 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.

Quasi in ogni caso i settaggi di default sono adeguati. La scheda Ancoraggio La figura seguente

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

Uso avanzato di MS Excel

33

VBE. Questo facilita l’identificazione e il posizionamento di una particolare finestra. Senza la modalità ancoraggio, si genera una disposizione disordinata delle finestre.

si genera una disposizione disordinata delle finestre. Oggetti e Collezioni In questa sezione sono riportato

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’è l’oggetto Application – nel nostro caso Excel stesso. Ma se si programma in VBA usando Microsoft Word, l’oggetto Application è Word.

L’oggetto gerarchia

L’oggetto Application (che è Excel) contiene altri oggetti. Qui ci sono solo pochi esempi di oggetti contenuti nell’oggetto 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 l’oggetto 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:

Uso avanzato di MS Excel

34

ChartObjects (una collezione di oggetto ChartObject)

Range

PageSetup

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 è anch’essa 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 dell’oggetto 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’è un’altra collezione chiamata Sheets, che è l’insieme di tutti i fogli in un libro di lavoro, sia fogli di lavoro sia fogli grafici. Se Foglio1 è il primo foglio nel tuo libro di lavoro, si può scrivere come segue:

Foglio(1)

Riferimento all’oggetto

Quando ci si riferisce ad un oggetto usando VBA, spesso si deve qualificare l’oggetto connettendo i nomi dell’oggetto 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 Foglio1. Il singolo foglio si identifica facendo riferimento

al contenitore dell’oggetto, come segue:

Workbooks(“Book1”).Worksheets(“Foglio1”)

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

Workbooks(“Book1”).Worksheets(“Foglio1”).Range(“A1”)

Uso avanzato di MS Excel

35

I

riferimenti del precedente esempio includono anche l’oggetto Application, come

segue:

Application.Workbooks(“Book1”).Worksheets(“Foglio1”).Range(“A1”)

Molte volte, comunque, il riferimento all’oggetto Application può essere omesso (esso è già assunto). Se l’oggetto Book1 è il libro di lavoro attivo, si può anche omettere il riferimento di quell’oggetto e usare:

Worksheets(“Foglio1”).Range(“A1”)

Ancora, se Foglio1 è 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 Excel non ha un oggetto che fa rife cella è un oggetto Range . 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 quell’oggetto.

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

ShowValue( )

End

MsgBox Worksheets(“Foglio1”).Range(“A1”).Value Sub

MsgBox è una funzione utile per mostrare risultati mentre il codice VBA MsgBox è una funzione utile per mostrare è in esecuzione. è in esecuzione.

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

ChangeValue( ) Worksheets(“Foglio1”).Range(“A1”).Value = 123

Uso avanzato di MS Excel

36

End

Sub

Dopo l’esecuzione di questo processo, la cella A1 sul foglio 1 assume il valore 123.

processo, la cella A1 sul foglio 1 assume il valore 123. Molti oggetti hanno proprietà di

Molti oggetti hanno proprietà di default. Per l’oggetto 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 dell’intervallo 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 nell’intervallo e mantenere la formattazione, usare il metodo ClearContents dell’oggetto Range. Molti metodi gestiscono argomenti per definire ulteriori azioni. Segue un esempio che copia la cella A1 nella cella B1 usando il metodo Copy dell’oggetto 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 l’oggetto Range. Questa proprietà ha due sintassi:

object.Range(cell1)

object.Range(cell1, cell2)

La proprietà Range si applica per due tipi di oggetti, l’oggetto Worksheet o l’oggetto Range. Qui cell1 e cell2 si riferiscono allo spazio che identifica l’intervallo (una cella nel primo caso, più celle nel secondo caso). Di seguito ci sono alcuni esempi sull’uso del metodo Range.

Uso avanzato di MS Excel

37

L’istruzione 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:

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

L’esempio 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

precedente:

prossimo

esempio

produce

Range(“A1”, “B10”) = 2

esattamente

lo

stesso

risultato

come

l’esempio

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 dell’intervallo. L’esempio seguente usa l’operatore di intersezione di range di Excel (uno spazio) per restituire l’intersezione di due intervalli. In questo caso, l’intersezione è una singola cella, C6. Perciò, l’espressione 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 non- contiguo. 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, l’oggetto Range è la cella attiva). Questo esempio tratta l’oggetto 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 all’angolo superiore sinistro dell’oggetto Range. Perciò, l’espressione 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

38

La proprietà celle

Un’altra 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 sull’uso 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, l’oggetto 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

cella A1 nel foglio di lavoro: ActiveCell.Cells(1, 1) = 5 Il reale vantaggio di questo tipo

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

l’istruzione:

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 256 ma cella è IV1 e la 257 ma è A2.

Il prossimo esempio registra il valore 2 nella cella H3 (la quale è la 520 ma cella nel foglio di lavoro) del foglio di lavoro attivo:

ActiveSheet.Cells(520) = 2

Per mostrare il valore nell’ultima cella del foglio di lavoro (IV65536) usa questa

espressione:

MsgBox ActiveSheet.Cells(16777216)

Uso avanzato di MS Excel

39

La sintassi può essere anche usata con un oggetto Range. In questo caso, la cella restituita è relativa all’oggetto Range restituito. Per esempio, se l’oggetto Range è A1:D10 (40 celle), la proprietà Cells può avere un argomento da 1 a 40 e restituisce una delle celle nell’oggetto Range. Nel seguente esempio, viene registrato il valore 2000 nella cella A2 perché A2 è la quinta cella (contando dall’alto e a destra, poi andando in basso) nell’intervallo di riferimento:

Range (“A1:D10”).Cells(5) = 2000

di riferimento: Range (“A1:D10”).Cells(5) = 2000 Nel precedente esempio, l’a rgomento per la proprietà

Nel precedente esempio, l’argomento per la proprietà Cells non ha limiti di valori fra 1 e 40. Se l’argomento eccede il numero delle celle nell’intervallo, il calcolo continua come se l’intervallo fosse più largo dell’attuale. Perciò, con una dichiarazione come la precedente si potrebbe cambiare il valore in una cella esterna all’intervallo 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 sull’intervallo restituito usando la pro