Come usare il vba per realizzare macro Excel

By | 29 Nov 2018

macro ExcelCome si progettano le macro per Excel? Quale struttura hanno? Nei post precedenti abbiamo visto un poco del vocabolario, della sintassi e degli strumenti del Vba. Abbiamo visto cos’è la programmazione a oggetti, come si dichiarano gli oggetti e di conseguenza le proprietà e i metodi. In questa terza parte dell’introduzione al vba parliamo di metodo e strategie per creare macro Excel.

Prima della scrittura il progetto

Vuoi realizzare una macro per Excel? Bene, qual è la cosa che devi fare prima di iniziare a scrivere il codice? Bravo. Definire l’obiettivo da realizzare. E poi? Il secondo passo? Valutare costi–benefici e la fattibilità. Certo, è consigliabile. E una volta confermata la bontà della scelta di fare la macro? Progettare la macro. Perfetto.

Realizzare una macro Excel, non due righe di codice, intendo una macro vera, richiede una fase di progetto in cui definiamo: cosa vogliamo realizzare e come lo vogliamo realizzare.

Un progetto ha molteplici vantaggi: riduce i costi e gli sprechi (es: tempo), dà una traccia da seguire, rende più efficiente l’esecuzione, ci prepara agli imprevisti, spinge a ottimizzare e molto altro. Se sai prima cosa fare e dove andare, allora l’esecuzione sarà più efficace ed efficiente.

Come si progetta una macro?

Prendi qualcosa su cui scrivere (es: carta, word o excel), dieci minuti di tempo e rispondi a poche domande.

  1. Definisci l’obiettivo

Qual è l’obiettivo della macro che vuoi realizzare? Scrivilo. Scrivi l’obiettivo in modo preciso. Per esempio: “Voglio una macro che imposti nella pagina attiva una testata di 3 righe bloccate con un titolo, una descrizione, istruzioni per l’uso e una formattazione precisa”.

  1. Valuti costi e benefici

Prima di iniziare a lavorare sul progetto, fai una valutazione dei costi e dei benefici della macro. Confronta il vantaggio che ottiene dalla macro, con il costo per realizzarla. Serve a evitare di sprecare tempo in macro poco utili o troppo costose, ma soprattutto serve per confermare la tua decisione di realizzare la macro per Excel. Per farlo rispondi a queste domande:

  1. Quale utilizzo penso di farne?
  2. Quanto tempo la userò?
  3. Quante volte la userò?
  4. Quanto tempo mi permette di risparmiare?
  5. Quanto tempo devo spendere per realizzarla?
  6. Raggiunge il mio obiettivo? Soddisfa pienamente lo scopo?
  7. Ci sono altri modi o strumenti per ottenere lo stesso risultato?
  8. Sono più o meno efficaci, efficienti, onerosi?

Lo scopo è comprendere se la macro è effettivamente la migliore soluzione al problema, il miglior strumento per raggiungere il tuo obiettivo, quindi se vale la pena spenderci tempo e risorse.

Per esempio, forse è poco utile impostare una “testata” nelle pagine Excel, forse è più efficace copia–incollarla da una pagina predisposta, o usare un foglio di lavoro pronto, eccetera.

La decisione è tua. Se confermi la scelta di realizzare la macro è tempo di progettarla.

  1. Definisci con precisione il risultato della macro

Prendi l’obiettivo e riscrivilo descrivendo ogni minimo particolare del risultato. Per esempio: “Voglio una macro che imposti nella pagina attiva: colore fondo bianco, una testata di 3 righe bloccate, con nella cella A1 “Titolo pagina”, grandezza font 14, font Arial, eccetera”.

  1. Definisci cosa deve fare la macro per ottenere il risultato descritto

Ora definisci cosa deve essere fatto per ottenere ogni aspetto del risultato atteso, quindi ogni singola attività che deve essere realizzata. Fai un elenco delle attività precise, definendo le loro relazioni e descrivendo: decisioni necessarie, input, interazioni, risultati intermedi.

Torniamo all’esempio iniziale: “Voglio una macro che imposti nella pagina attiva: colore fondo bianco su tutte le celle, blocchi lo scorrimento alla quarta riga, scriva nella cella A1 “Titolo pagina”, imposti nella cella A1 grandezza font 14, font Arial, eccetera”.

  1. Definisci come realizzare ogni singola attività

A fianco di ogni attività elementare, scrivi come realizzarla. Scrivi qualche parola chiave, o anche qualche riga di spiegazione per indicare come realizzerai il codice per quella attività. Per esempio, “cells.interior.tintandshade=0” o in modo più discorsivo “imposta il colore di fondo bianco a tutte le celle”. Oppure “seleziona riga 4 + blocca riquadri” per bloccare le prime 3 righe in alto, e così via.

Nella maggior parte dei casi il “come” è implicito nel “cosa”, ma via via che le attività diventeranno complesse, la risposta non sarà così immediata. In tal caso ti invito a indicare per ogni attività:

  1. oggetti e strumenti coinvolti (fogli, tabelle, grafici, ecc),
  2. input necessari (dati, valori, kpi, ecc),
  3. controlli da eseguire (sulle condizioni, sui dati, sui risultati, ecc),
  4. decisioni da gestire e condizioni relative,
  5. attività alternative,
  6. output attesi e inattesi/prevedibili.

Questo per ottenere una mappa che descrive con precisione il tuo progetto. Naturalmente tutto questo ha poco significato per obiettivi minimi e semplici, per esempio stampare una pagina, salvare il foglio e uscire, ma in caso di macro Excel complesse, diventa uno strumento utile che si ripaga tutto in fase di realizzazione.

Questa fase serve ai principianti che ancora non hanno il controllo degli strumenti e non sanno ancora con chiarezza come realizzare le singole attività. Li costringe a cercare il modo per realizzarlo, a studiare il linguaggio. Per gli esperti questa fase è di solito opzionale, a meno di progetti complessi o innovativi.

Hai scritto tutto?

Bravo, hai il tuo progetto. Ora devi realizzarlo.

Cosa dici? Come so cosa fare e come farlo?

Come ho appena detto, se sei agli inizi questo metodo ti costringe a confrontarti con quello che non sai, quindi se non conosci abbastanza Excel, il vba o gli strumenti relativi, dovrai studiare per completare un pezzo alla volta la mappa. Quando realizzerai un progetto senza chiederti “Come so” allora non sarai più un principiante.

struttura

La struttura delle macro Excel

All’inizio abbiamo accennato alla modalità della scrittura del codice e alla struttura delle macro. Abbiamo visto che le macro hanno un inizio, un corpo e una fine, un preciso obiettivo, partono da condizioni iniziali e seguono un ordine, una struttura logica di attività o blocchi di codice con relazioni precise.

Questa struttura non è visibile nelle macro piccole, dirette, operative, mentre diventa evidente nelle macro più grandi. A livello di codice sono definibili molteplici attività di diversa natura, la maggior parte delle quali possono essere classificabili in:

  1. dichiarazioni delle variabili, per gestire informazioni che devono essere utilizzate più volte, elaborate, ecc;
  2. controlli di varia natura e scopo;
  3. interazioni con l’operatore per comunicare informazioni o ricevere input (conferme, informazioni, o decisioni),
  4. attività operative dirette o condizionate,
  5. decisioni basate sulle condizioni di lavoro che gestiscono il codice e le attività,
  6. gestione degli eventuali errori imprevisti,

Questa semplificazione delle attività realizzate dal codice è fatta per chi si avvicina alla scrittura del codice e cerca indicazioni da seguire.

Approfondiamo ruolo e scopo di ogni macroattività:

1. Dichiarazioni

Una dichiarazione consiste nella creazione di un contenitore teorico che riserva una porzione della memoria per conservare e quindi poter gestire un’informazione che il codice della macro deve ricordare, poterla usare più volte, elaborare, comunicare, eccetera.

Nella pratica consiste nella dichiarazione del nome preciso di variabili e costanti e del loro tipo, cioè della porzione di memoria da assegnare loro e del modo con cui devono essere gestite.

È necessario dichiarare?

No, Excel si occupa in automatico di qualsiasi variabile che inseriamo nel codice, ma lo farà in modo dispendioso, con un impegno notevole di memoria, poco efficiente, generando variabili di vita breve.

In quale posizione della macro devo fare le dichiarazioni?

Di solito vengono poste all’inizio della macro, ma in realtà le dichiarazioni puoi posizionarle:

  1. nel codice della macro, prima delle righe che la utilizzano naturalmente,
  2. all’inizio della macro prima del codice, posizione naturale per le dichiarazioni di variabili locali,
  3. all’inizio del modulo, fuori da qualunque macro, per essere disponibili a tutte le macro del modulo, quindi con dichiarazione privata (private),
  4. sempre all’inizio del modulo, fuori da qualunque macro, ma dichiarate pubbliche (public), cioè visibili a tutte le macro di tutti i moduli.

2. Controlli

Sono tutte le attività di verifica relative a valori, oggetti, input, proprietà, condizioni, risultati, eccetera. Per esempio un controllo è la verifica dell’esistenza degli oggetti richiamati dal codice, o il controllo del valore delle variabili principali durante l’esecuzione, o la verifica delig input forniti dall’operatore, ecc.

A livello di codice un controllo richiede blocchi di istruzioni caratterizzati dall’impiego di una o più funzioni di test delle condizioni (es: If/Then) e, dov’è necessario fare controlli su gruppi di valori, oggetti, eccetera, richiede l’uso di cicli (loop). Può essere accompagnato da interazioni con l’operatore e da cambi del flusso di esecuzione della macro Excel (uscite e salti).

È necessario fare controlli?

In teoria non è necessario, soprattutto se si lavora in un ambiente chiuso e se si ha la certezza delle condizioni. Se usiamo la macro per un’attività specifica di un singolo foglio di lavoro possiamo fare a meno di controlli.

Se invece realizziamo macro che vogliamo installare in molti fogli diversi, che vogliamo funzionino in situazioni diverse e sappiano gestire gli imprevisti, allora i controlli sono uno degli strumenti fondamentali per realizzarle.

I controlli sono uno degli ingredienti che rendono le macro per Excel intelligenti e flessibili. Per questo i controlli sono consigliati per macro significative e necessari per gestire situazioni, macro e fogli di lavoro complessi.

In quale posizione della macro vengono posti i controlli?

Dipende dal ruolo dei controlli, per esempio:

  1. i controlli delle condizioni iniziali sono posti all’inizio, di solito dopo le dichiarazioni,
  2. il controllo degli input dell’operatore è inserito di seguito all’interazione con l’operatore, per gestire il flusso del codice a seconda delle decisioni comunicate dall’operatore, o per controllare il valore inserito dall’operatore (es: se coerente, già presente, entro i valori previsti, ecc);
  3. quelli delle condizioni di lavoro sono inseriti prima di porzioni specifiche di codice operative, per verificare lo stato di variabili, la presenza di imprevisti, o altro;
  4. mentre il controllo dei risultati è posto dopo le attività operative, per controllare se il risultato è quello atteso, o eseguire codice aggiuntivo per comunicare all’operatore anomalie e imprevisti.

Controlli

3. Interazione con l’operatore

L’interazione con l’operatore serve di solito per:

  1. richiedere informazioni precise, per esempio un valore da elaborare, l’intervallo di tempo che si vuole visualizzare, ecc; se numerose o ripetute queste interazioni possono essere gestite in mo diverso, per esempio delegate a un sistema di “configurazione” che conserva le informazioni su una pagina del foglio di lavoro, o su un foglio o file esterno;
  2. gestire imprevisti, di solito il cambiamento delle condizioni di lavoro attese, per esempio l’assenza della tabella su cui la macro deve lavorare, o la presenza di un valore imprevisto; sono di solito interazioni attivate da controlli che hanno dato risultati inattesi;
  3. gestire decisioni, complesse, con troppi parametri, che richiederebbero troppo codice, o parametri non oggettivi e misurabili, come per esempio la valutazione della significatività di un grafico, o la definizione dei livelli di sicurezza degli stock a magazzino;
  4. richiedere conferma su determinate attività, di solito di tipo “irreversibile”, per esempio se si sta per sostituire l’intera base dati, o se si vuole cancellare un’analisi precedente; servono a prevenire difficoltà causate da un’esecuzione accidentale o inconsapevole.

L’interazione con l’utente richiede principalmente l’utilizzo di finestre di dialogo (Msgbox e Inputbox) che permettono di scegliere tra risposte predefinite o di inserire valori, di solito accompagnate da test (If/Then else) per controllare le risposte e gestire le scelte comunicate e quindi il flusso dell’esecuzione del codice.

È necessario interagire con l’operatore?

Un tempo pensavo che gli automatismi dovessero fare il più possibile da soli, meglio tutto, senza far spendere tempo all’operatore. In realtà la necessità di interagire con l’operatore dipende dalla macro, dall’obiettivo, dagli strumenti impiegati e altro ancora. Il consiglio è interagire quando serve.

Per esempio è necessario per gestire errori e imprevisti, ma non è detto sia necessario per avere input, per esempio la macro potrebbe ottenerle tramite pagine o file di configurazione. Oggi ne consiglio l’uso per comunicare all’utente l’avvenuta esecuzione della macro, dove non ci sono segni evidenti del risultato, o lo svolgimento dell’esecuzione dove il tempo di lavoro della macro è lungo.

In quale posizione della macro devo fare interazioni?

Dipende dallo scopo dell’interazione, per esempio:

  1. all’inizio per chiedere input o conferme,
  2. prima dell’esecuzione di attività operative critiche per avere conferma,
  3. durante le attività operative per gestire gli imprevisti,
  4. alla fine per comunicare l’avvenuta esecuzione,
  5. alla fine per gestire gli errori,
  6. e in molte altri occasioni.

4. Attività operative

È il codice che agisce, elabora, chiama altre macro/funzioni, esegue metodi e modifica proprietà. Tutto il resto gira attorno a questo codice, è il cuore della macro, sono le istruzioni che servono a realizzare le attività che la macro deve svolgere: dalla creazione di oggetti (es: tabelle, pagine, ecc), alla modifica di proprietà, attributi, valori e caratteristiche degli oggetti, dall’elaborazione diretta di dati, alla revisione delle pagine, alla gestione dei file, e così via.

Ho raggruppato forzatamente attività tanto diverse e disparate, che a loro volta hanno una classificazione ampia e articolata, solo per semplificare il discorso della struttura del codice a beneficio di chi è agli inizi. Approfondiremo questo argomento in altri post.

Il codice relativo varia in modo notevole a seconda del tipo di attività, è comunque basato su modifiche delle proprietà degli oggetti e soprattutto metodi applicati agli oggetti, accompagnati dalle funzioni necessarie. Per esempio se l’attività riguarda molti oggetti o dati, saranno presenti cicli (loop), mentre se richiede valutazioni interne allora presenterà test per il controllo per gestire il flusso.

Consiglio di dividere il codice per la realizzazione delle attività operative in moduli definiti da commenti e spazi, che si occupano delle singole attività. Per esempio, un blocco di codice per la creazione di una nuova pagina, uno per importare i dati, uno per la creazione della tabella excel, eccetera.

Nel caso il codice diventi lungo e complesso è opportuno considerare di dividere la macro in parti per semplificarne la stesura, gestione e comprensione.

In quale posizione metto il codice operativo?

Al centro della macro, dopo dichiarazioni e controlli iniziali, prima della chiusura e della gestione degli errori.

Oggetti vba

5. Valutazioni e decisioni

Inseriamo codice per gestire decisioni quando decidiamo di affidare alla macro una scelta basata su condizioni definite e misurabili. Come il valore del fatturato medio del mese precente, o il numero di resi per l’anno in corso. Per esempio possiamo modificare il report, aggiungendo una tabella e un grafico, a seconda del valore dei resi.

Le decisioni non sono i controlli, anche se i controlli possono richiedere decisioni su come gestire i risultati, e le decisioni spesso richiedono controlli per verificare le condizioni.

Il codice per le decisioni si basa principalmente su test delle condizioni (If/Then o Select Case), spesso accompagnati da cicli (es: For Each/Next, For/Next, ecc).

È necessario che la macro prenda decisioni?

È necessario se lo richiede l’obiettivo e il progetto della macro. Se vuoi che la macro di Excel si assuma una parte delle decisioni che di solito gestisci tu, determinate dalla variabilità o dell’incertezza di condizioni, risultati e dati, allora sì.

In quale posizione della macro sono inserite le decisioni?

Talvolta prima del codice operativo per decidere sulla sua esecuzione, o su quale delle alternative predisposte eseguire, di solito all’interno del codice operativo per decidere su singole attività o sull’esecuzione del resto della macro.

6. Gestione degli errori

È quella porzione di codice che si occupa di gestire gli errori provocati dagli imprevisti, intercettandoli e permettendo l’esecuzione di codice aggiuntivo predisposto dallo sviluppatore. La gestione di solito si limita alla comunicazione dell’errore all’operatore con le indicazioni sul comportamento da tenere e a chi rivolgersi per ricevere assistenza. In realtà offre molte possibilità, per esempio quella di analizzare la causa dell’errore, eseguire codice dedicato per ottenere almeno una parte del risultato atteso, oppure riprendere l’esecuzione del codice da una posizione precisa.

Il codice per le decisioni si basa principalmente sulle funzioni predisposte per la gestione degli errori (es: On Error, Resume, Err.Number, Err.Description, ecc) e su finestre di dialogo (Msgbox). In caso di gestione più evoluta, il codice sarà caratterizzato in modo significativo da test delle condizioni (If/Then o Select Case).

È necessario che la macro gestisca gli errori?

No, anzi di solito è considerata una perdita di tempo, in quanto è codice che verrà eseguito solo in caso di imprevisti. Perché spendere tempo per qualcosa che serve raramente? Eppure senza questo codice la macro non sarà in grado di affrontare nessun errore, limitandosi a mostrare la classica finestra di sistema.

Di conseguenza la gestione degli errori è assente nelle macro piccole e operative. Invece nelle macro Excel di media grandezza e complessità, spesso ci si limita a ignorare l’errore e a far proseguire l’esecuzione, rischiando però di presentare risultati errati o provocare danni. I più esperti preparano un blocco di codice dedicato, sempre uguale che aggiungono in automatico nelle macro che possono averne bisogno.

In quale posizione della macro devo inserire la gestione degli errori?

La gestione degli errori è composta da:

  1. una dichiarazione all’inizio della macro che indica il modo di gestione e il punto del codice a cui riferirsi
  2. un punto a cui salta il codice alla comparsa dell’errore, seguito dal codice per la gestione, di solito posto alla fine della macro, dopo il codice vero e proprio.

Concludendo

No, non siamo ancora alla fine di questa introduzione al vba. Nel primo post abbiamo visto cos’è il vba. Nel post precedente abbiamo avuto un assaggio del linguaggio e della programmazione ad oggetti. In questo post abbiamo visto come si progettano e strutturano le macro di Excel. Nel prossimo post parliamo di variabili, errori e di come si impara il vba.

Qui trovi il primo post e qui il secondo, qui puoi trovare l’ultimo post di questa guida.

 

 

PS: Se questo post ti è piaciuto o ti è stato utile, condividilo con gli amici sui social.

Puoi farlo attraverso i pulsanti qui di seguito. Grazie.

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.