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…