Introduzione all`utilizzo di Visual Basic for Application

Transcript

Introduzione all`utilizzo di Visual Basic for Application
Introduzione all’utilizzo
di Visual Basic for
Application
Utilizzo del linguaggio Basic utilizzando l’interfaccia di
Excel
Silvia Patacchini
PROGRAMMAZIONE
Insieme delle attività da svolgersi per creare un
programma.
Attività di programmazione
Creazione del CODICE SORGENTE
(codice scritto e comprensibile al programmatore)
La programmazione
CODICE SORGENTE
Sarà tradotto in Codice Macchina tramite
COMPILATORI
INTERPRETI
la CPU elabora il linguaggio macchina
I programmi interpretati sono caratterizzati da
maggiore semplicità
Sono dotati di estrema versatilità su diversi sistemi operativi
(necessità dello stesso interprete)
Esempi di codici interpretati: Basic, Visual Basic, Phyton
Ogni linguaggio di programmazione gestisce vari
tipi di informazione: VBA è un linguaggio
utilizzabile in Excel e di conseguenza essenziale
se si vogliono creare programmi che
interagiscono con celle, fogli e cartelle.
Può contenere differenti valori e che quindi può
utilizzare subroutine attivabili dal programma.
Il linguaggio Visual Basic utilizzato per excel
viene comunemente chiamato Visual Basic For
Application (VBA) .
Il linguaggio VBA
Le principali differenze tra il VBA ed il Visual
Basic sono:
I programmi scritti con VBA vengono
memorizzati all’interno dell’applicazione stessa e
non è possibile accedere a questi senza aver
lanciato precedentemente l’applicazione;
I comandi specifici di una versione VBA non sono
riconosciuti dalle altre, per cui i programmi che li
utilizzano potranno essere eseguiti
esclusivamente nell’applicazione per la quale
sono stati creati.
Visual Basic for Application &
Visual Basic
MACRO:
sono la forma principale con cui si
esprime il linguaggio VBA.
Rappresentano una sequenza di
operazioni che sono state memorizzate
attraverso il regime di macro al fine di
poterle eseguire automaticamente;
Un programma scritto in VB viene
eseguito all’interno di Excel.
Concetti chiave
Importante a fini pratici è capire la differenza tra:
Routine: insieme di istruzioni VB strutturate per ottenere un
determinato risultato o elaborazione; è il termine più corretto per
identificare una macro.
Funzione: simile alla routine; riceve generalmente dei valori che
elabora per restituire un risultato.
Programma: insieme strutturato di istruzioni abitualmente
raggruppate in numerose subroutine e funzioni.
Modulo: sorta di documento al cui interno si inseriscono programmi
secondo un concetto di omogeneità.
Debug: attività del programmatore atta ad individuare ed eliminare
le anomalie che abitualmente i programmatori presentano durante la
fase di sviluppo e nel periodo di collaudo.
Ciclo: serie di istruzioni che vengono continuamente ripetute
(equivalente dell’inglese loop).
Concetti chiave
Lanciare VBA:
l’avvio del VB Editor avviene utilizzando due differenti
sistemi tra loro equivalenti ed intercambiabili:
Menù Strumenti>Macro>Visual Basic Editor (su Excel
2003; in Excel di versione successiva si trova su
Developer)
Combinazione tasti Alt+F11
Una volta aperto il VB editor si presenta
come una finestra indipendente da Excel
nella quale compaiono altre tre finestre:
Progetto> elenco in cui sono visibili tutti gli
oggetti aperti in Excel e i loro componenti:
◦ Eurotool;
◦ VBA Project; +Foglio
Proprietà
Codice
Tutte le routine vengono memorizzate
all’interno del modulo. Il linguaggio chiede
di utilizzare due parole chiave per scrivere
le routine:
◦ SUB punto di inizio di una routine che deve
essere seguita da uno spazio e dal nome che si
assegna alla routine. Dopo il nome vanno
inserite due parentesi, una aperta ed una
chiusa ();
◦ END SUB figura nell’ultima riga della routine e
ne indica la fine;
Caratteristiche Routine
I dati inseriti all’interno del linguaggio vengono suddivisi in
categorie in base al loro tipo o natura.
Le categorie a disposizione del programmatore possono
essere limitate o numerose in relazione al tipo di linguaggio
che si adopera:
type
Parola chiave
Tipo di informazione
Intervallo
Byte
Integer
Long
Currency
Numeri interi positivi
Numeri interi
Numeri interi
Importo monetario
Single
Numeri con decimali
in singola precisione
Double
Numeri con decimali
in doppia precisione
Da 0 a 255
-32.768 a +32.767
-2.147.483.648 a +2.147.483.647
-922.337.203.685.477,5808 a +
922.337.203.685.477,5807
Valori negativi -3,402823E38 a 1,401298E-45
Valori positivi: +1,401298E-45 a
+3,402823E38
-1,79769313486231E308 a
-4,94065645841247E-324
+4,94065645841247E-324
+1,79769313486231E308
Numero di cifre
decimali
Nessuno
Nessuno
Nessuno
4
6
14
Per le variabili con dati testuali quali nomi, indirizzi,
annotazioni o altro si ricorre alle variabili di tipo String
(per le variabili con lunghezza fissa per le stringhe si
inserisce un asterisco * e si indica il numero di caratteri da
inserire, tipicamente 10 0 20 quindi String*10).
Per le variabili di tipo Date si deve ricorrere ad una
sintassi particolare che prevede di racchiudere la data tra
una copia di caratteri #.
Esempio
Dim Data as Date
Data = #31/01/2011#
Tipologia di variabili
Variabili Booleane
Rappresentatate esclusivamente da due valori:
False
True
Sono utilizzati in varie situazioni e rappresentano un
buon sistema per rappresentare determinate
condizioni o situazioni, indicando se sono vere o false.
L’utilizzo delle variabili booleane semplifica
notevolmente la scrittura e la leggibilità delle
condizioni in quanto può essere omesso il controllo
sul valore; in pratica, le seguenti istruzioni di verifica
sono fra loro identiche e intercambiabili.
Tipologia di variabili
Variabili Variant
Tipologia di linguaggio con cui si possono
memorizzare tutti i tipi di valori ammessi da
Visual Basic, infatti il linguaggio si fa carico di
eseguire tutte le operazioni di conversione
necessarie.
Questi benefici hanno un costo per il
programmatore che perde il supporto del
compilatore per eventuali segnalazioni di errori
nell’assegnazione di valori diversi da quelli
previsti.
Variabili Variant
Variabili Object
I tipi di Object individuano variabili che contengono
oggetti. Funzionano come indici verso altre variabili.
Per chi ha confidenza con il concetto di puntatori, si
può segnalare che questo tipo si comporta in modo
assimilabile ad essi.
Overflow>>> è un termine che in ambito informatico
viene utilizzato per indicare una situazione in cui un
valore che si sta cercando di assegnare, eccede la
capacità dell’oggetto di destinazione.
Variabili Object
MATRICI o ARRAY
Sono strumenti che affiancano le variabili che si
rivelano estremamente utili in molteplici situazioni.
Possono essere considerati come variabili in grado di
memorizzare un determinato numero di valori dello
stesso tipo.
Alle matrici si affianca il concetto di indice, ovvero un
numero che permette di identificare ogni elemento
della matrice. Nella sintassi di VBA l’indice figura
racchiuso tra parentesi tonde.
Matrici ed Array
COSTANTI
Le costanti sono valori inseriti nel programma che non
devono essere modificati e vengono utilizzati attraverso un
nome convenzionale che viene definito dal programmatore
all’atto della sua dichiarazione.
La dichiarazione delle costanti si effettua con i seguenti
elementi:
La parola chiave Const;
Il nome da assegnare alla costante;
La parola chiave As;
La parola chiave definente il tipo di valore che la costante
conterrà;
Il carattere =;
Il valore da assegnare alla costante.
Le costanti
MACRO
A. REGISTRATE:
Nel caso in cui ci siano altre macro registrate la nuova
macro viene inserita all'interno del modulo in cui
sono salvate le precedenti, altrimenti il registratore
provvede a creare un modulo nuovo, cui
automaticamente il sistema associa il nome Modulo
cui segue un numero progressivo;
Automaticamente il sistema associa alla macro un
nome composto dalla parola Macro seguita da un
numero sequenziale il cui scopo è evitare omonimie
con altre macro presenti all’interno dello stesso
modulo.
Le macro
Casi di omonimie:
È possibile avere macro con le stesso nome contenute
in cartelle diverse;
È possibile avere macro con lo stesso nome contenute
in moduli diversi.
Modifiche al nome della macro:
non ci sono problemi a meno che la macro non sia
richiamata da altre macro, per cui all’interno è stato
trascritto il nome che si desidera modificare.
Gestione omonimie
Limitazioni sintattiche del nome:
Lunghezza <64 caratteri;
Deve iniziare con una lettera;
Ammissibilità combinazione lettere maiuscole, minuscole,
cifre, carattere underscore;
Per vedere il codice creato dal registratore di macro è
necessario prima attivare il Visual Basic Editor e poi
accedere al modulo: si accede al modulo tramite la
combinazione di tasti Alt+F11 oppure tramite il comando
Strumenti>>Macro>>Visual Basic Editor.
B. MACRO NON REGISTRATE
Va quindi inserita una routine (ricorda SUB; END SUB).
Ogni volta si introduce un’istruzione errata, un’apposita
finestra segnala l’errore indicando il tipo di problema e il
testo dell’istruzione viene segnalato in rosso.
L’utilizzo di Excel porta ad una naturale familiarità con
le funzioni, in quanto rappresentano uno dei punti di
forza dei fogli elettronici. Nella programmazione di
Excel le routine sono piccoli programmi che eseguono
una determinata elaborazione con diversi scopi
quali: visualizzare un messaggio, eseguire un calcolo
da inserire in una variabile. Le subroutine
costituiscono un incrocio fra le routine e le funzioni.
ROUTINE: piccoli programmi che eseguono una
determinata elaborazione con il solo scopo di
restituire un valore che essa ha elaborato in base ad
informazioni che ha ricevuto come parametri oppure
utilizzando variabili pubbliche
FUNZIONI ROUTINE E
SUBROUTINE
FUNZIONI: piccoli programmi che eseguono una
determinata elaborazione con il solo scopo di
restituire un valore che essa ha elaborato in base ad
informazioni che ha ricevuto come parametri,
oppure utilizzando variabili pubbliche.
SUBROUTINE: costituiscono un incrocio fra routine e
funzioni; i generi di elaborazioni che i programmatori
fanno svolgere alla subroutine possono essere quelle
equivalenti di una funzione o di una routine, ma con il
vantaggio che esse accettano i parametri anche se
non restituiscono valori al chiamante.
Funzioni e subroutine
Quando si creano delle funzioni possono
essere inserite nella finestra codice di un
modulo oppure di una form. La forma
sintattica più semplice prevede in sequenza:
La parola Function;
Il nome;
Parentesi tonda aperta;
Eventuali parametri separati da virgola;
Parentesi tonda chiusa;
Tipo di valore da restituire;
Corpo;
Parola End Function.
Function
ESECUZIONE CONDIZIONALE E CICLICA DELLE
ISTRUZIONI
All’interno di un programma è possibile definire dei test mediante
i quali è possibile decidere le istruzioni che il programma deve
eseguire.
Il VBA dispone di diverse istruzioni per la gestione di alcuni test,
in particolare si segnalano:
If
Select case
Ed istruzioni per poter rappresentare i cicli:
For/next
For each/next
While/wend
Do/Loop
Esecuzione condizionale
In particolare:
IF:
è composta dalle seguenti parti:
Test riconducibile a valori booleani o numerici;
Utilizzo della parola “Then” al termine della
condizione;
Istruzioni da eseguire in caso di test positivo;
“Else” seguito da istruzioni da eseguire in caso
negativo;
“End”
Ovvero
IF (condizione) THEN
Istruzioni in caso la condizione sia verificata (…)
ELSE
Istruzioni in caso la condizione non sia verificata (…)
END IF
Il risultato del test può essere un risultato numerico oppure booleano ed in
quel caso il valore True;
altrimenti il valore restituito sarà un valore numerico oppure un valore
booleano pari a False.
Le principali forme condizionali:
-If…Then/End If;
-If…Then/Else/End If;
È una forma molto comune in quanto permette di scegliere fra un’alternativa di
due blocchi di istruzioni, basandosi sul risultato di un’espressione inserita nella
riga IF.
Il concetto da sottolineare è che solo uno dei due blocchi di istruzioni sarà
eseguito in base all’esito dei test:
If…Then/End IF.
Forma compatta di codice che utilizza una sola
linea sia per la condizione sia per le istruzioni da
eseguire in caso di esito positivo del test. Questo
ci permette di evitare l’istruzione End if.
Per esempio:
If a=b Then c=0
Che è l’equivalente di
If a=b Then
c=0
End If
IF….THEN
Le If annidate non sono un altro tipo di If ma semplicemente il
termine con cui si indicano le istruzioni If che, nel gruppo delle
istruzioni, contengono altre If come nel seguente esempio.
If (condizione)…then
If (condizione2) then
If (condizione 3) then
Else
(alternativa3)
End If
Else
(alternativa 2)
End If
Else
(alternativa1)
End If
IF annidate
SELECT CASE
È utile nella maggioranza dei casi in cui si dovrebbero
costruire una serie di If nelle quali il test si basa sulla
valutazione del risultato della stessa espressione.
Si compone di:
◦ Parola chiave Select Case seguita da una espressione;
◦ Parola chiave Case con il valore o un insieme di valori che essa
gestisce seguita da una o più righe che costituiscono le istruzioni
che verranno eseguite nel caso il valore dell’espressione presente
in Select Case dia un risultato che essa gestisce.
◦ Un blocco di istruzioni che verranno eseguite se nessuna istruzione
Case gestisce il valore dell’espressione della Select Case, esse
appariranno dopo l’istruzione Case Else che deve essere l’ultima
Case;
◦ L’istruzione End Select che indica la fine della Select Case.
Select Case
Offre la possibilità di costruire dei cicli: ovvero
una o più operazioni da ripetere più volte.
Il ciclo si ripete fino a che non è raggiunta la
condizione di fine che può essere:
- Condizione di tipo booleano (false oppure
numerico =0);
- Numero di cicli predefinito;
- Istruzione specifica che ne determina la fine,
indipendentemente dal valore della condizione o
dal numero di cicli già compiuto.
CICLO LOOP
FOR/NEXT
È il più semplice da apprendere perché serve ad eseguire il ciclo un
numero predefinito di volte. L’istruzione FOR richiede:
La parola chiave FOR;
Una variabile numerica utilizzata per memorizzare il numero del
ciclo in esecuzione;
Il carattere =
Il limite iniziale del ciclo (es. for i=0 oppure for i=1….)
La parola TO;
Il limite finale del ciclo.
N.B. se il ciclo deve lavorare sugli elementi di una matrice è
possibile utilizzare le funzioni LBOUND() e UBOUND() per indicare
il valore iniziale e finale del ciclo.
For…Next
È l’estensione del ciclo For/next. L’aggiunta
della clausola Step sta ad indicare un
incremento o decremento diverso da quello
standard ovvero, +1.
Step è utile per eseguire:
- Cicli in cui il valore iniziale è (a differenza della
prassi) inferiore al valore finale, impostando Step
con un valore negativo;
- Cicli in cui l’incremento della variabile sia definito
da uno specifico valore come 2,3,5 oppure decimale
come 1.5, 3.4 etc etc;
FOR…STEP/NEXT
Si evita al programmatore d’impostare il
limite di partenza e quello di arrivo in
quanto automaticamente gestiti (si usa
tipicamente con le matrici).
Richiede:
◦
◦
◦
◦
For each;
Utilizzo di variabili Variant;
La parola chiave in;
Nome dell’insieme per il quale ogni singolo
elemento sarà oggetto di una elaborazione del ciclo.
FOR EACH/NEXT
Il ciclo While/Wend viene utilizzato per indicare
un blocco di istruzioni la cui esecuzione inizia ed
è ripetuta fino a quando la condizione indicata
dall’istruzione While è vera.
Si utilizza questa tipologia per:
- Numero di volte non specificato (potrebbe non
avere mai inizio);
- Quindi il ciclo While/Wend determina se il blocco
delle istruzioni deve essere eseguito o meno in
relazione al test che viene valutato prima di
iniziare ad elaborare.
WHILE/WEND
DO WHILE/LOOP
Definisce un insieme di istruzioni che verranno eseguite
solo e fino quando la condizione riportata nella riga Do
While risulterà vera .
La differenza con la condizione While/Wend non presenta
differenze, ma va sottolineato che supporta l’istruzione Exit
Do per forzare l’uscita anticipata dal loop,
indipendentemente dalla condizione di test.
DO UNTIL/LOOP
Definisce un insieme di istruzioni che verranno eseguite
solo e fino a quando la condizione riportata nella riga Do
Until risulterà falsa.
Altri cicli…
DO/LOOP WHILE
Il ciclo Do/Loop While permette di definire un
insieme di istruzioni che verranno ripetute fino a
quando risulta vera la condizione che appare
dopo la parola chiave While.
DO/LOOP UNTIL
Il ciclo Do/Loop Until permette di definire un
insieme di istruzioni che verranno ripetute fino a
quando risulta vera la condizione che appare
dopo la parola chiave Until.
Altri cicli…