57
Fondamenti di programmazione II Introduzione al VBA 24/01/2020 1

Fondamenti di programmazione II...Fondamenti di programmazione II Introduzione al VBA 24/01/2020 1 Linguaggi di programmazione • Un linguaggio di programmazione è costituito, come

  • Upload
    others

  • View
    16

  • Download
    3

Embed Size (px)

Citation preview

  • Fondamenti di programmazione II

    Introduzione al VBA

    24/01/2020 1

  • Linguaggi di programmazione

    • Un linguaggio di programmazione è costituito, come ogni altro tipo di linguaggio, da un alfabeto con cui viene costruito un insieme di parole chiave(il vocabolario) e da un insieme di regole sintattiche(la grammatica) per l’uso corretto delle parole del linguaggio

    • I microprocessori presenti all’interno della macchina sono stati progettati per riconoscere ed eseguire un insieme piuttosto ristretto di istruzioni; tali istruzioni costituiscono il cosiddetto linguaggio macchina

    • Il linguaggio macchina è basato su una codifica estremamente compatta e poco intuitiva

    24/01/2020 2

  • Linguaggi di programmazione

    • Codificare un programma utilizzando il linguaggio macchina è assai arduo e richiede una conoscenza approfondita del funzionamento di un particolare calcolatore (o meglio: del microprocessore che costituisce la CPU della macchina)

    • Per ovviare a questo problema, che ha costituito per molti anni un grosso limite alla diffusione della programmazione e quindi anche dell’uso dei calcolatori, sono stati sviluppati dei linguaggi di programmazione più evoluti, che si pongono a metà strada fra il nostro linguaggio naturale ed il linguaggio macchina

    • Sono semplici e poveri(poche parole chiave, poche regole), ma privi di qualsiasi ambiguità

    24/01/2020 3

  • Linguaggi di programmazione • In informatica si parla di programmazione a basso livello quando si utilizza un

    linguaggio molto vicino alla macchina, al suo funzionamento interno

    • Si parla invece di programmazione ad alto livello quando si utilizzano linguaggi più sofisticati ed astratti, slegati dal funzionamento fisico della macchina

    • Si viene così a creare una gerarchia di linguaggi, dai meno evoluti (il linguaggio macchinae l’assembler) a quelli più evoluti (Pascal, VBA, Fortran, Cobol, Java, Perl, Python, Go, ...)

    • Il linguaggio C pone ad un livello intermedio

    24/01/2020 4

  • Linguaggi di programmazione • La programmazione a basso livello è più ardua e meno intuitiva, ma consente di

    sviluppare programmi molto efficienti su uno specifico sistema hardware/software, sfruttandone a fondo le caratteristiche

    • Ad alto livello la programmazione è più “naturale” e rapida, ma è possibile che non consenta di produrre software particolarmente efficiente

    24/01/2020 5

  • Linguaggi di programmazione

    • Possiamo aggregare i numerosi linguaggi di programmazione esistenti sulla base del paradigma di programmazioneche sottintendono e che è necessario adottare per utilizzarli

    24/01/2020 6

  • Tipi di linguaggi di programmazione • Linguaggi imperativi: Il modello computazionale è basato sui cambiamenti di stato della memoria

    della macchina

    • È centrale il concetto di assegnazione di un valore ad una locazione di memoria (variabile) • Il compito del programmatore è costruire una sequenza di assegnazioni (spesso reiterandole più

    volte) che producano lo stato finale (in modo tale che questo rappresenti la soluzione del problema)

    • Linguaggi dichiarativi: Il modello computazionale è basato sui concetti di funzione e relazione • Il programmatore non ragiona in termini di assegnazioni di valori, ma di relazioni fra entità e di

    valori di una funzione

    • Linguaggi a oggetti: Ilmodello computazionale è basato sul concetto di classe(insieme) di oggetti con cui sono definite le strutture dati per la rappresentazione delle informazioni su cui opera il programma

    • Le funzioni e le procedure sono metodi definiti per operare su specifici oggetti • O Si basano sui concetti di incapsulamento(un oggetto presenta una interfaccia con cui può essere

    usato e non rende visibile la propria implementazione), ereditarietà(le classi di oggetti possono essere definite estendendo le caratteristiche di altre classi di oggetti), polimorfismo(uno stesso metodo può avere comportamenti diversi su oggetti di classi differenti)

    24/01/2020 7

  • Tipi di linguaggi di programmazione, Variabili

    • Una variabile, in informatica, è un contenitore di dati situato in una porzione di memoria destinata a contenere valori, suscettibili di modifica nel corso dell'esecuzione di un programma.

    • Una variabile è caratterizzata da un nome (in VBA lettere o gruppi di lettere minuscole).

    • Una variabile da punto di vista fisico indica (punta) una cella di memoria che può contenere dati.

    a Celle di memoria (le celle sono individuate da un indirizzo binario a 64 bit)

    24/01/2020 8

  • Tipi di linguaggi di programmazione

    • Sulla base dell’ambito in cui è necessario risolvere il problema, è opportuno adottare un linguaggi piuttosto che un altro:

    • Calcolo scientifico: Fortran, C, Python, Mathematica, Matlab • Intelligenza Artificiale: Prolog, Lisp, Python • Applicazioni gestionali: Cobol, SQL, C, C++, C#, VBA • Sistemi, device driver: Assembler, C • Applicazioni client visuali: Java, JavaScript, Visual Basic, C++, C#, C • Applicazioni su Web: Perl, PHP, Python, ASP/ASPX, Java, JavaScript, C#, Ruby • Applicazioni distribuite: Java, C, C++, C# • Applicazioni mobile: Java, JavaScript, C++, C#, Swift

    24/01/2020 9

  • Compilatori ed interpreti

    • Un programma è la codifica di un algoritmo eseguita utilizzando un linguaggio di programmazione

    • L’unico linguaggio che la macchina è in grado di interpretare è il linguaggio macchina

    • Per eseguire un programma scritto in un linguaggio di alto livello è necessario dunque tradurlo in linguaggio macchina

    • Naturalmente è possibile eseguire la traduzione in modo automatico utilizzando un programma “traduttore” (un compilatore o un interprete)

    • Ogni traduttore è in grado di interpretare e tradurre un solo linguaggio (compilatore C, interprete Python, compilatore Fortran, ecc.)

    24/01/2020 10

  • Compilatori ed interpreti

    • • Interprete: itera più volte questo processo • o Legge un’istruzione del programma “sorgente” • o Traduce l’istruzione in linguaggio macchina • o Esegue l’istruzione • o Passa all’interpretazione dell’istruzione successiva • • Al termine di questa operazione, del programma in linguaggio macchina non

    rimane alcuna traccia (la traduzione non viene memorizzata)

    • • Se il programma torna più volte su una stessa istruzione, questa verrà tradotta (ed eseguita) ogni volta

    • • È necessario disporre dell’interprete per poter eseguire il programma 24/01/2020 11

  • Compilatori ed interpreti

    • Compilatore: esegue una sola volta il processo • Legge tutte le istruzioni del programma “sorgente”, ne verifica la correttezza

    sintattica e le traduce in linguaggio macchina

    • Memorizza su disco il programma “eseguibile” tradotto in linguaggio macchina • Al termine della compilazione avremo un programma “eseguibile” in linguaggio

    macchina

    • La traduzione di ogni istruzione del programma avviene una sola volta, anche se una stessa istruzione viene ripetuta più volte all’interno del programma

    • Non ho bisogno di avere il compilatore ed il “sorgente” per eseguire il programma: mi basta il programma “eseguibile”

    24/01/2020 12

  • Compilatori ed interpreti • Il linguaggio macchina è diverso a seconda del microprocessore (il tipo di CPU)

    presente nel calcolatore

    • Quindi i programmi eseguibili (in linguaggio macchina) sono strettamente dipendenti dalla piattaforma hardware (oltre che dal particolare sistema operativo adottato)

    • I linguaggi di alto livello sono simili (esistono delle differenze) tra piattaforme differenti

    • Un grande problema è la portabilità del software da una piattaforma ad un’altra: • Se le piattaforme sono uguali o compatibili potrò distribuire il programma in

    formato eseguibile

    • Se le piattaforme sono incompatibili dovrò distribuire il programma in formato sorgente 24/01/2020 13

  • Che cos’è VBA?

    • Vba è l’acronimo di Visual Basic for Application e in sintesi è l’utilizzo del Visual Basic per la realizzazione e l’esecuzione di routine dentro l’ambiente di lavoro di Microsoft Office.

    • Il Visual Basic è il linguaggio a oggetti realizzato da Microsoft all’inizio degli anni 90 per la creazione di programmi per windows, il suo sistema operativo, derivato a sua volta dal vecchio Basic. Nel 1992 Microsoft rilasciò il Visual Basic e nel 1995 impose un linguaggio standard di programmazione per i suoi software a partire dall’Office: il Visual Basic for Applications.

    24/01/2020 14

  • Che cos’è VBA?

    • Vba è un linguaggio interpretato ma anche compilato (potremmo dire misto), infatti:

    • Il sorgente VB.NET è trasformato in IL (Intermediate Language) dal compilatore. • Il corrispondente codice IL viene trasformato in codice macchina ed eseguito dal

    compilatore JIT (Just In Time).

    • Quindi le performance sono drasticamente migliori di un interprete e simili a quelle di un vero compilatore dato che l'immagine compilata viene mantenuta in una cache fino a quando non varia.

    24/01/2020 15

  • Variabili e costanti • La differenza tra costanti e variabili è questa: le costanti, come dice il nome

    stesso, una volta impostate non sono più modificabili, mentre le variabili (anche in questo caso il nome è illuminante) possono essere modificati ogni volta che si desidera.

    • Ad esempio, se creiamo (tra poco vedremo come) una costante di nome Pippo e impostiamo il suo valore su 10, in seguito non possiamo modificarla, quindi tale costante varrà 10 per tutta l’esecuzione del programma. Se, invece, abbiamo una variabile Pluto, possiamo modificare il suo valore in ogni momento, quindi possiamo inizialmente assegnarli il valore 4, poi 9, poi 3, e così via.

    • Un altro punto nodale in qualsiasi linguaggio di programmazione è la distinzione dei tipi di dato. Come è facile intuire, un programma lavora con dati di tipo diverso, cioè stringhe (ovvero sequenze di caratteri) e numeri; questi ultimi, poi, si dividono ulteriormente a seconda che siano numeri interi, decimali, che indichino valute, etc 24/01/2020 16

  • Variabili e costanti

    • In ogni linguaggio di programmazione che si rispetti, ci troveremo a gestire una classe variegata di informazioni:

    • numeri

    • stringhe, ossia dati alfanumerici (composto da numeri e lettere);

    • data e ora

    • informazioni booleane (di tipo True oppure False)

    • tipi di dati definiti dall'utente

    • tipi di dati strutturati (array monodimensionali e pluridimensionali)

    • Gli array pluridimensionali sono le matrici. Gli array ad una sola dimensione sono detti anche vettori.

    24/01/2020 17

  • Variabili e costanti

    • Per gestire questo mixing di informazioni, nella creazione di programmi si richiede la memorizzazione dei valori in variabili.

    • Una variabile VBA è identificata da tre elementi: • un nome con una serie di vincoli che poi vedremo; • un valore; • un tipo.

    24/01/2020 18

  • Variabili e costanti • Ai fini di rendere il codice autodocumentato dobbiamo prestare attenzione a:

    1. inserire dei commenti alle procedure che stiamo realizzando. Basta inserire prima del commento un segno di apostrofo. Vedrete il commento colorato di verde;

    2. all'assegnazione di nomi alle variabili. Il nome della variabile vi deve evocare il contenuto che andrete a memorizzare. Es. areaquadrato, arearettangolo, cognome, nome, datanascita;

    3. non creare variabili a casaccio. Mi sto riferendo alla dichiarazione obbligatoria delle variabili, in modo da generare errore quando avete utilizzato una variabile e questa non sia stata dichiarata.

    24/01/2020 19

  • Variabili e costanti

    • I vincoli ai quali si è assoggettati, per l'assegnazione di un nome ad una variabile sono:

    1. il nome non può essere superiore ai 255 caratteri; 2. il nome non può contenere spazi o segni di punteggiatura o caratteri

    riservati dal linguaggio stesso (es: operatori aritmetici di cui parleremo);

    3. non può iniziare con un numero.

    24/01/2020 20

  • Variabili e costanti

    • A differenza del linguaggio C o C++, il VBA essendo di derivazione stretta del Visual Basic, nella scrittura del nome di una variabile, possiamo editarlo maiuscolo, o minuscolo, sarà sempre riscritto come viene dichiarato. Si dice che i nomi sono considerati 'case insensitive'.

    24/01/2020 21

  • Variabili e costanti • Le costanti si dichiarano in questo modo: • Const Nome [As Tipo] = valore • Const è una parola chiave riservata di VB che si usa per definire una costante. Nome è il nome

    che si sceglie di attribuire alla costante. Nella scelta dei nomi (sia delle costanti, delle variabili,

    ma anche delle procedure, delle funzioni e dei controlli, che vedremo più avanti), è necessario

    seguire alcune regole. I nomi non devono essere più lunghi di 40 caratteri, non posso iniziare con

    un numero nè contenere spazi e caratteri come ?, !, :, ;, . e ,.

    • Visual Basic, al contrario di altri linguaggi come il C o Java, non fa differenza tra maiuscole e minuscole.

    • As è un parametro opzionale che indica il Tipo di dato contenuto nella costante; se non viene specificato, il compilatore lo determinerà sulla base del valore assegnato alla costante stessa.

    valore è il valore vero e proprio della costante. Ecco alcuni esempi di dichiarazioni di costanti:

    • Const PI = 3.14 Const Nome As String = "Marco"

    24/01/2020 22

  • Variabili e costanti • Una sintassi analoga è quella che permette di dichiarare le variabili: • Dim nome [As Tipo] • In questo caso si usa la parola chiave Dim per indicare al compilatore che quella che si

    sta per definire è una variabile. Le convenzioni per il nome sono le stesse che sono state

    accennate a proposito delle costanti. Anche per le variabili il parametro As è opzionale:

    se non viene specificato, la variabile verrà dichiarata di tipo Variant, un particolare tipo

    che può contenere dati di tutti i tipi. È sconsigliabile definire variabili di tipo Variant, se

    non espressamente necessario, dal momento che questo tipo di dato occupa molta

    memoria. Ecco alcuni esempi di dichiarazioni di variabili.

    • Dim Utenti As Integer • Dim Nome As String, Cognome As String

    24/01/2020 23

  • Variabili e costanti • Per dichiarare una variabile si utilizza l'istruzione Dim: • Dim Nome as Tipo

    • In contrapposizione con le variabili, le informazioni, che non saranno soggetti a cambiamenti nel corso di esecuzione

    dell'applicazione, sono denominate costanti

    • Per dichiarare una costante ci sono due tecniche:

    • Const nome=Valore

    • oppure

    • Const nome as Tipo=Valore

    • Questa forma permette di rendere esplicita la dichiarazione del tipo per una costante. La prima forma, anch'essa corretta, può essere utilizzata in virtù del fatto che i tipi delle costanti sono dedotti in base al valore assegnato.

    24/01/2020 24

  • Variabili e costanti • E' giunto adesso il momento di produrre una tabella riassuntiva dei tipi di dati elementari disponibili

    in VBA:

    Tipi di dati Descrizione Dati rappresentati

    Boolean Memorizza valori dell'Algebra di Boole

    True oppure False

    Byte Memorizza valori naturali intervallo di valori compresi tra 0 e 255

    Currency Memorizza valori monetari compresi 4 cifre decimali

    Intervallo compreso tra -922... a +922...

    Date Memorizza informazioni circa data e orario compreso

    Dal 1 gennaio 100 al 31 dicembre 9999

    Double Memorizza valori decimali a precisione doppia

    Intervallo numeri negativi da -1,797679E308 a -4,94065E-324 Intervallo numeri positivi da da 4,04065E-324 A 1,79679E308

    Integer Valori naturali con segno Intervallo -32.768 a + 32.767

    Long Valori naturali con segno Intervallo -2.147.... a + 2.147....

    Object Memorizza un riferimento all'oggetto

    Dipende dalla natura dell'oggetto

    Single Valori decimali a singola precisione

    Intervallo numeri negativi: da -3,4028... a -1,4012... Intervallo numeri positivi da 1,4012... a 3,4028...

    String Memorizza stringhe alfnumeriche

    Memorizza qualsiasi stringa di caratteri

    Variant (*) Memorizza qualsiasi tipo Il dato rappresentato dipende dal tipo rappresentato.

    24/01/2020 25

  • Procedure e funzioni

    • Le procedure e le funzioni si tratta, in entrambi i casi, di una sorta di “raggruppamento” di istruzioni che svolgono un’operazione comune.

    • Come vedremo meglio più avanti, praticamente tutto il codice di un programma Visual Basic è contenuto all’interno di funzioni e procedure (chiamate

    genericamente routine).

    • La differenza fondamentale tra procedure e funzioni è che le seconde possono restituire dei valori, ad esempio il risultato di un’elaborazione oppure un valore

    di ritorno che determina se la routine ha avuto successo, mentre le procedure

    no. 24/01/2020 26

  • Procedure e funzioni

    • Le procedure • Iniziamo esaminando la dichiarazione di una procedura: • Sub ([Parametro As , ...]) • ... • End Sub • Tutte le dichiarazioni di procedura iniziano con la parole chiave Sub. Segue il nome

    della routine, che deve rispettare le convenzione analizzate precedente a proposito delle costanti. Il nome deve essere seguito da parentesi, al cui interno è possibile inserire i parametri (opzionali) richiesti della procedura; non c’è limite al numero di parametri che si possono definire. Tali parametri possono essere visti come variabili (ritorneremo tra poco su questo punto).

    • La scritta End Sub è composta di parole riservate di VB e indica la fine di una procedura. 24/01/2020 27

  • Procedure e funzioni • Le Vediamo ora un esempio di procedura, anche per illustrare meglio l’utilizzo dei parametri. Supponiamo di dover calcolare

    l’area di un cerchio: la formula è sempre la stessa, quello che cambia è solo la misura del raggio. Per tale motivo, invece di riscrivere ogni volta la formula, possiamo scrivere una procedura che richieda come parametro proprio la lunghezza del raggio:

    • Sub AreaCerchio(Raggio As Double) • … • End Sub • Supponiamo ancora di voler scrivere un programma che chiede all’utente la lunghezza del raggio e sulla base di questa calcola

    l’area del cerchio. Dopo aver definito la procedura come sopra descritto, ci basterà richiamarla passandogli come argomento la lunghezza del raggio; ad esempio:

    • Sub AreaCerchio(Raggio As Double) • ... • End Sub • Queste sono tre chiamate alla procedura con parametri diversi. Nel primo caso, Raggio varrà 5.4, nel secondo 11 e nel terzo 6.9.

    Ecco quindi come potrebbe risultare la procedura AreaCerchio completa: • AreaCerchio 5.4 • AreaCerchio 11 • AreaCerchio 6.9 • In questo esempio è stata usata la funzione MsgBox, che visualizza un messaggio in una finestra di dialogo e attende che

    l’utente prema un tasto. A questo punto, utilizzando le tre chiamate sopra definite, otterremo questi risultati: 24/01/2020 28

  • Procedure e funzioni

    • Le funzioni • La dichiarazione di una funzione è questa: • Function ([Parametro As , ...]) [As ] • ... • End Function • Come si vede, in questo caso invece della parola chiave Sub si usa Function. • La cosa nuova, cui si è già accennato, è che le funzioni possono restituire un valore. • Nella dichiarazione, infatti, possiamo notare che, dopo l’elenco (opzionale) dei

    parametri c’è un ulteriore argomento opzionale, ancora una volta As : esso

    indica il tipo di dato restituito dalla funzione. Come per le variabili, se non viene

    specificato tale parametro il valore restituito sarà di tipo Variant. 24/01/2020 29

  • Procedure e funzioni

    • Le funzioni • Riprendiamo l’esempio di prima e trasformiamo la procedura AreaCerchio in una funzione: • Function AreaCerchio(Raggio As Double) As Double • AreaCerchio = Raggio * Raggio * 3.14 • End Function • Quando si richiama questa funzione, AreaCerchio contiene il valore dell’area del cerchio.

    Vediamo ora come si utilizzano le funzioni, basandoci come sempre sull’esempio.

    • Dim Area1 As Double, Area2 As Double, Area3 As Double • Area1 = AreaCerchio(5.4) 'Area1 vale 91,5624 • Area2 = AreaCerchio(11) 'Area2 vale 379,94 • Area3 = AreaCerchio(6.9) 'Area3 vale 149,4954

    24/01/2020 30

  • Assegnazioni

    • In informatica l’assegnazione è una operazione fondamentale. • Si utilizza il simbolo di = ma non ha lo stesso significato che in algebra. • Per esempio x=5 significa che nella cella puntata dalla variabile x inserirò il

    valore 5.

    X

    24/01/2020 31

    5

  • Assegnazioni

    • Questo permette di fare questa operazione (continua dalla slide precedente) • x=x+7 Che porterà al seguente risultato

    Perché?

    24/01/2020 32

    12 X

  • Esempio • Si osservi il seguente esempio. • Private Sub CommandButton1_Click() • Dim c1, c2, ipot As Single • c1 = Range("B1") • c2 = Range("B2") • ipot = Sqr(c1 ^ 2 + c2 ^ 2) • Range("B3") = ipot • End Sub

    24/01/2020 33

  • Esempio

    • Parole chiave nell’esempio • Private Sub: identifica il tipo di programma. • Dim: dichiarazione di variabile, i termini successivi sono variabili. • As Single: identifica il tipo di variabile (il tipo di dato che può essere inserito

    nella variabile)

    • Dim c1, c2, ipot As Single • End Sub: fine programma

    24/01/2020 34

  • ISTRUZIONI E PAROLE CHIAVE FONDAMENTALI DI VBA

    1.Parole Inizio e termine programma: • Private Sub Prova, inizio un nuovo programma che chiamo prova • End Sub termino il programma.

    2. DICHIARAZIONE DI VARIABILE

    • Dim X As Integer la variabile che ho chiamato X è di tipo intero. Ora in X c’è l’indirizzo di una locazione di memoria che può contenere dati di tipo intero.

    24/01/2020 35

  • ISTRUZIONI E PAROLE CHIAVE FONDAMENTALI DI VBA

    3. INPUT OUTPUT, inserisco o recupero dati.

    • Uso dell’istruzione Range

    Input: X=Range(“B1”), nella variabile X inserisco il contenuto della cella B1

    Output: Range (“B2”)=X, dentro la cella B2 inserisco il contenuto della variabile X

    • Uso dell’istruzione Cells, sintassi: Cells(riga,colonna). L’istruzione si usa come la Range solo che gli indici di riga e colonna sono entrambi numeri.

    Input: X=Cells(1,5), nella variabile X inserisco il contenuto della cella di coordinate 1,5

    Output: Cells (2,5)=X, dentro la cella di coordinate 2,5 inserisco il contenuto della variabile X

    24/01/2020 36

  • ISTRUZIONI E PAROLE CHIAVE FONDAMENTALI DI VBA

    4. Istruzioni di assegnazione si usano quando si devono fare calcoli e/o operazioni.

    X=Z*Y

    X=Z/Y

    X=X-Y

    X=Sqr(Y)

    X=Y^2

    24/01/2020 37

  • Che cos’è una MACRO?

    • La macro è una versione automatica di una serie di istruzioni elementari per eseguire un compito preciso tramite un unico comando.

    • Il termine macro è un’abbreviazione di macro-istruzione. L’origine della parola viene dal greco “μακρός” che significa lungo o largo.

    • Il programma più comune per lo sfruttamento delle macro è Excel, però sono moltissimi i programmi che le supportano.

    • Possono essere create in vari modi, un modo molto importante è il linguaggio VBA.

    24/01/2020 38

  • Come inserisco il codice VBA in Excel? • Aprite la cartella di lavoro di Excel • Premete Alt + F11 per aprire il Visual Basic Editor (VBE)

    24/01/2020 39

  • Come inserisco il codice VBA in Excel?

    • Fate clic destro sul nome della vostra cartella di lavoro nel riquadro “Progetto-VBAProject” (in alto a sinistra della finestra dell’editor) e selezionate Inserisci -> userform dal menu di scelta rapida

    • Selezionate poi comanbotton • Cliccate due volte su commandButton1

    24/01/2020 40

  • Come inserisco il codice VBA in Excel?

    • Copiate il codice VBA (ad es. da una pagina web)

    24/01/2020 41

  • Come inserisco il codice VBA in Excel?

    • Copiate il codice VBA (ad es. da una pagina web)

    24/01/2020 42

  • Come inserisco il codice VBA in Excel? • Cliccate su esegui o sulla freccia verde.

    24/01/2020 43

  • Come inserisco il codice VBA in Excel?

    Occorre poi procedere con questi ultimi passaggi:

    • Salvate la cartella di lavoro come “Cartella di lavoro con attivazione macro di Excel”. • Premete Crl + S, quindi fare clic sul pulsante “No” nella finestra di dialogo “Impossibile salvare le

    caratteristiche seguenti in cartelle di lavoro senza macro”.

    • Si aprirà la finestra di dialogo “Salva con nome”. Scegliete “Cartella di lavoro con attivazione macro di Excel” dall’elenco a discesa “Salva come” e fate clic sul pulsante Salva.

    • Premete Alt + Q per chiudere la finestra dell’Editor e tornare alla cartella di lavoro

    24/01/2020 44

  • Come eseguire le macro VBA in Excel Quando vorrete eseguire il codice VBA che avete aggiunto premete Alt + F8 per aprire la finestra di dialogo “Macro”.

    Quindi selezionate la macro desiderata dall’elenco “Nome macro” e fate clic sul pulsante “Esegui“.

    24/01/2020 45

  • Ambiente di sviluppo VBA L’ambiente di sviluppo di Visual Basic For Application è facilmente accessibile dal menù "Strumenti"; "Macro"; "Visual Basic Editor". Qui avremo modo di progettare e sviluppare programmi in Visual Basic per soddisfare le nostre esigenze, in virtù del fatto che gli strumenti sono perfettamente integrati con Microsoft Excel.

    I progetti realizzabili con VBA possono essere di tre tipi:

    • Progetto di documento • Progetto di modello • Progetto di componente aggiuntivo dell’applicazione Nei "Progetti di documento" tutti i componenti del progetto sono legati alla cartella di lavoro utilizzata al momento, e non andranno ad intaccare ne l’applicazione Excel, ne i suoi modelli generali; quindi il codice rimarrà confinato nel file aperto. Nel momento in cui il file cambierà posizione il nostro progetto si sposterà con esso. Di conseguenza, quando chiuderemo la nostra cartella e ne apriremo una nuova non avremo a disposizione il progetto da noi creato.

    Nei "Progetti di modello" invece il codice generato è associato al modello generale di Microsoft Excel, quindi aprendo una nuova cartella Excel o qualsiasi cartella esistente avremo sempre a disposizione il nostro progetto VBA.

    I componenti aggiuntivi sono strumenti per ampliare le funzionalità di Microsoft Excel, come, ad esempio, un comando personalizzato richiamabile dalla barra degli strumenti o da una voce di menù. Anche questa tipologia di progetto non è legata solamente al documento corrente ma direttamente all’applicazione Excel.

    Nello specifico noi tratteremo solamente i "Progetti di documento".

    24/01/2020 46

  • Ambiente di sviluppo VBA La piattaforma di sviluppo

    • L’editor visual Basic offre numerosi strumenti avanzati di sviluppo e programmazione:

    1. Finestra di progetto: mostra l’elenco gerarchico dei progetti aperti e di tutti i moduli di codice e finestre di interfaccia appartenenti ad un determinato progetto. Ad ogni progetto sono associate quattro cartelle a seconda del tipo di modulo che viene sviluppato.

    • Microsoft Excel oggetti: contiene il codice legato ai fogli ed alla cartella di lavoro. • Form: contiene le interfaccia utente associate al progetto. • Moduli: contiene i moduli di codice generici. • Moduli di classe: contiene i moduli per la creazione di nuove classi di oggetti.

    24/01/2020 47

  • Ambiente di sviluppo VBA

    La piattaforma di sviluppo

    2. Finestra Userform (interfaccia utente): Questa finestra ci permette di creare finestre di interfaccia utente personalizzate da applicare ai programmi VBA, simili in tutto e per tutto a quelle proprie di Microsoft Excel.

    3. Finestra delle proprietà: mostra l’elenco, alfabetico o per categorie, di tutte le proprietà (altezza, larghezza, colori, font, descrizioni, ecc…) appartenenti ad un controllo contenuto in uno "UserForm" o ad uno "UserForm" stesso.

    4. Modulo di codice: Luogo dove viene scritto il codice Visual Basic. Esistono tre tipi di moduli di codice: generici, di classe e di userform.

    5. Casella degli strumenti: contiene una serie di controlli necessari per costruire l’interfaccia utente. Per spostare i controlli nella "UserForm" basta cliccare sull’oggetto interessato e mantenendo premuto il tasto sinistro trascinarlo sulla finestra Userform.

    6. Finestra immediata; Finestra Variabili locali; Finestra espressioni di controllo: Finestre usate per il Debug (eliminazione degli errori sintattici e logici) del codice.

    7. Visualizzatore degli oggetti: elenco di tutti gli oggetti, metodi, proprietà ed eventi appartenenti ad un controllo o all’applicazione Excel.

    24/01/2020 48

  • Istruzioni e costrutti condizionali

    • VBA utilizza il costrutto If - Then - Else per effettuare controlli. • La sintassi base è la seguente: If condizione

    Then (se vero)

    espressione

    Else (se falso)

    espressione alternativa

    End If

    24/01/2020 49

  • Come si può implementare? Si analizzi il seguente esempio

    • Con Excell • SE(P>S;Pf=P*0,9;Pf=P*0,95)

    24/01/2020 50

    P S Pf

    100 50 SE(A2>B2;A2*0,9;A2*0,95)

  • Come si può implementare con VBA?

    • IL frammento di programma VBA che realizza l’algoritmo è quello sottostante, in verde i commenti.

    ……………………………

    'selezione sconto

    If P > S Then

    'se vero

    Pf = P * 0.95

    Else

    'se falso

    Pf = P * 0.9

    End If

    …………………………………………………… 24/01/2020 51

  • Dal problema al programma

    • Determinare il minimo tra tre numeri interi ( X, Y, Z) • Come continuo?

    24/01/2020 52

    LEGGI (x)

    LEGGI (y)

    INIZIO

    LEGGI (Z)

  • Dal problema al programma

    24/01/2020 53

    F V

    V F F V

    LEGGI (x)

    LEGGI (y)

    X

  • Dal problema al programma: come traduco l’algoritmo in un programma?

    • Il programma potrebbe iniziare così: Private Sub CommandButton1_Click()

    Dim X, Y, Z As Single

    X = Range("B1")

    ……………………………

    If X

  • Costrutti ciclici

    • Ripetizioni per vero

    24/01/2020 55

    Vero Falso

    Test Istruzioni

  • Costrutti ciclici

    • Ripetizioni per vero

    • Istruzioni VBA

    …………………

    Do While Test

    Istruzioni

    Loop

    ………………

    Esempio:

    Do While X>10

    X=X-1

    Range(“B2”)=X

    Loop

    24/01/2020 56

  • Costrutti ciclici

    • Ciclo FOR: • Si usa tutte le volte che si deve ripetere una

    sequenza di operazioni un numero predeterminato e prevedibile di volte.

    • Istruzioni VBA For Contatore (una variabile intera) = inizio TO valore finale

    Istruzioni

    Istruzioni

    Next Contatore (una variabile intera)

    Esempio:

    …………………………………

    For i = 1 To 10

    Cells(i, 5) = i ^ 2

    Next i

    …………………………………

    24/01/2020 57