Qui parliamo di macro di Excel, cosa sono, come si creano, come si usano.
Cos’è una macro di Excel?
Il termine “macro” a livello informatico indica una procedura, cioè un insieme di comandi e istruzioni svolti durante l’esecuzione di un programma. Le macro permettono di realizzare una serie di attività con un singolo comando, quello dell’esecuzione della macro.
Tutti i programmi di Microsoft Office hanno un motore interno che permette di registrare, compilare ed eseguire macro vba che possono interagire con tutti i programmi di office (es: una macro su Excel può agire un foglio Word) e anche agire limitatamente su programmi e file esterni.
In realtà le macro non sono un’esclusiva di Office, ci sono o ci sono stati altri software con la stessa possibilità di creare ed eseguire macro con diversi linguaggi di programmazione, con l’obiettivo di automatizzare le attività ripetitive.
Tra i più noti, ricordiamo OpenOffice, pacchetto opensource per l’ufficio, nato da Staroffice e dotato di un’interfaccia apposita con cui creare e gestire macro in diversi linguaggi di programmazione; e il suo successore, Libreoffice, altro pacchetto opensource in grado anche di supportare le macro sviluppate in Vba. Inoltre esistono e sono esistiti anche editor di macro, cioè programmi dedicati in grado di creare macro in diversi linguaggi in grado di agire sul sistema operativo e programmi (es: AutoHotkey, AutoIt, iMacros, ecc).
Qual è lo scopo di una macro di Excel?
Chi lavora regolarmente con i fogli di calcolo sa quanto può essere noioso e impegnativo dover ripetere correttamente sempre le stesse attività. Le macro permettono di automatizzare queste attività.
In particolare una macro può:
- svolgere attività ripetitive e far risparmiare tempo all’operatore;
- creare nuovi strumenti, funzioni e comandi da aggiungere a quelli preesistenti.
L’obiettivo principale è il primo, ma talvolta le macro vengono realizzate per svolgere attività specifiche e nuove che non esistono in Excel. Come puoi immaginare, considerata l’età di Office, Excel raramente ha bisogno di nuovi strumenti, se non in casi molto particolari. E tipicamente sono funzioni.
Una macro si distingue in funzioni e routine. Le funzioni sono macro che svolgono elaborazioni specifiche su parametri ricevuti o variabili pubbliche con l’unico scopo di restituire un valore (parleremo di funzioni in un altro post). Invece le routine sono programmi che normalmente non accettano parametri e non restituiscono valori, ma visualizzano messaggi, elaborano dati, agiscono sugli oggetti di excel, appaiono nella finestra “Macro”. Qui parliamo di queste macro.
Vale la pena sottolineare che oltre a far risparmiare tempo le macro riducono gli errori, sempre presenti nelle attività di noi esseri umani, specialmente in quelle routinarie. Se vengono sviluppate e testate adeguatamente, le macro eseguono sempre correttamente le attività. O così dovrebbero. Il condizionale è dovuto al fatto che le macro le sviluppiamo noi esseri umani. Dedicheremo agli errori e alla loro gestione un post specifico.
Premesse per lavorare con le macro di Excel
Se non l’hai già fatto, prima di lavorare con le macro è necessario:
- abilitare la scheda sviluppo sulla barra multifunzione;
- regolare le impostazioni sulla sicurezza per abilitare il funzionamento delle macro.
Scheda “Sviluppo”: la scheda non viene visualizzata stabilmente nella barra multifunzione per impostazione predefinita, ma appare solo per eventi o “interazioni” specifiche (es: macro o controlli). È possibile renderla sempre presente in questo modo:
- clicca con il pulsante destro del mouse sulla barra multifunzione, per far apparire il menù relativo,
- clicca sul comando “Personalizzazione barra multifunzione”, per far comparire la finestra dedicata,
- nella parte destra, sotto a “personalizza barra multifunzione”, “schede principali”, cerca e tagga la scheda “sviluppo”.
In alternativa, clicca sulla scheda “File”, “Opzioni”, “Personalizzazione barra multifunzione”, nella finestra relativa a destra, sotto a “personalizza barra multifunzione”, “schede principali”, cerca e tagga la scheda “sviluppo”.
Impostazioni protezione: se Excel ha ancora le impostazioni di protezione di base non puoi usare le macro. Per poter lavorare devi modificare le impostazioni di sicurezza relative alle macro, in questo modo:
- vai alla barra multifunzione,
- seleziona la scheda “Sviluppo”,
- nel gruppo “Codice” della scheda clicca sul comando “Sicurezza macro”, si aprirà direttamente la finestra del centro protezione dedicata alle macro,
- tra le 4 alternative clicca su “Abilita le macro” per permetterne la libera esecuzione senza controlli, scelta che può diventare rischiosa se lavori con fogli di fonti sconosciute o non affidabili; in alternativa clicca su “Disabilita tutte le macro con notifica“, manterrà il controllo sulla presenza di macro nei fogli nuovi e ogni volta che aprirai un foglio con macro il sistema ne bloccherà l’uso e te lo notificherà dandoti la possibilità di assegnare il permesso di lanciarle alla successiva apertura; in tal caso le volte successive il foglio non verrà bloccato e le macro saranno utilizzabili.
- premi Ok per confermare.
In alternativa è possibile accedere al Centro protezione tramite il menù “File” (o il pulsante Office per Excel 2007), “Opzioni”, “Centro protezione” e pulsante “Impostazioni Centro protezione”.
Come si crea una macro vba in Office?
In office ci sono due modi per creare una macro:
- utilizzando il registratore di macro, un editor che genera codice Visual Basic in base alle attività svolte dall’utente attraverso mouse e tastiera sul programma;
- scrivendo il codice della macro attraverso l’editor vba
Il registratore di macro di Excel permette di tradurre le attività svolte su un foglio Excel in codice Vba, in quanto ogni attività che può essere eseguita dall’utente può essere eseguita anche da un’istruzione Vba. Questo permette di creare, senza dover conoscere il linguaggio vba, semplici macro che puoi usare subito nei tuoi fogli di lavoro. Ti invito a leggere il post “Il registratore di macro di Excel” per approfondire questa tecnica, utilizzabile anche dai principianti, ma con cui è possibile produrre solo macro limitate e poco intelligenti.
Il secondo modo è quello classico, che permette di ottenere il meglio dalle macro, ma richiede di conoscere il linguaggio Vba e l’esperienza sufficiente per utilizzarlo al meglio. Questo significa spendere centinaia di ore in studio e lavoro.
Non ci sono alternative?
Quella più ovvia è farti fare le macro da un esperto, risparmi il tempo, ma dovrai pagare per il servizio e non avrai controllo diretto sugli automatismi. L’ideale sarebbe avere un foglio di lavoro già automatizzato su cui lavorare, ma la realtà è che se vuoi un foglio automatizzato o te lo fai fare, o lo fai tu con macro “compatibili” e “flessibili” che hai creato o che ti sei procurato da chi da farlo.
La decisione spetta a te e ti invito a valutare con attenzione costi e benefici. Quanto tempo spendi su Excel al giorno? Ti sarà utile la nuova competenza? Quanto tempo spenderai e quanto ne risparmierai? Se usi Excel occasionalmente o poco ti consiglio di non pensarci neppure.
Detto questo, torniamo al codice e al Vba editor.
Come si lavora sul codice della macro vba?
Se vuoi creare e modificare il codice della macro devi usare l’editor vba. Cos’è il visual basic editor? È un ambiente di sviluppo e un set di strumenti utili per creare, testare e modificare macro e maschere con cui automatizzare il foglio di lavoro. Ti invito a leggere il post “Introduzione al Visual Basic Editor” per una prima infarinatura sull’editor.
Per aprire l’editor premi ALT+F11, oppure premi il comando “Visual Basic” della scheda “Sviluppo” della barra multifunzione, oppure dalla finestra “Macro” (Alt+F8) premi il pulsante “Modifica” se già sono presenti macro, o clicca su “Crea” se non ci sono per impostare il primo modulo, il contenitore delle macro, e aprire l’editor Vba. Attenzione la finestra “Macro” ti mostra tutte le macro di tutti i fogli Excel aperti.
Una volta aperto l’editor Vba, vedrai le macro nella finestra del codice, quella grande. Se non ci sono moduli o macro, vedrai solo bianco. Per creare il modulo, clicchi sul menù “Inserisci” e poi il comando “Modulo”, oppure vai alla finestra dei progetti in alto a sinistra, clicca con il pulsante destro del mouse sul nome del file excel, clicca su “Inserisci” e poi su “Modulo” per far comparire un nuovo modulo vuoto (“Modulo1”).
Se ci sono già delle macro, le puoi riconoscere dal nome, l’elenco lo trovi nella finestra “Macro” o lo puoi vedere cliccando sul menù a tendina sopra la finestra del codice in alto a destra. Il codice delle routine sono delimitate da “Sub NOMEMACRO()” ed “End sub”.
Le righe di colore verde sono righe di commento, non codice, utile per prendere note o descrivere le macro, per renderle comprensibili. Si creano scrivendo un apostrofo a inizio riga e poi il testo, ma nello stesso modo è possibile disattivare righe di codice escludendole provvisoriamente dall’elaborazione.
Secondo tradizione la prima macro da scrivere è:
Sub CiaoMondo()
MsgBox (“Ciao Mondo!”)
End Sub
Non copiarla, scrivila. Come vedi quando scrivi il titolo si compila anche l’ultima riga, Msgbox è il comando per far comparire una finestra a video con la scritta “Ciao Mondo!”. Ora chiudi l’editor vba, premi Alt+F8 per aprire la finestra “Macro”, seleziona “CiaoMondo” e clicca sul pulsante “Esegui”. Comparirà la finestra con il messaggio e un pulsante “Ok”. Premilo e scomparirà la finestra terminando l’esecuzione della macro.
Prima di passare alle cose serie, è importante sottolineare che un foglio di lavoro con una o più macro deve essere salvato in un formato apposito, l’ ”xslm”, come il sistema ti ricorderà quando cercherai di salvare il foglio.
Come è strutturata una macro?
Volendo semplificare ed essere sintetici, il codice di una macro standard ha più o meno questa struttura:
dichiarazioni (di variabili, costanti, matrici, ecc)
in teoria se ne può fare a meno e sarà il motore di excel a gestirle, ma con un impegno notevole di memoria e una vita breve; il mio consiglio è dichiararle, magari obbligandoti scrivendo un “Option Explicit” in cima al modulo; la dichiarazione (es: Dim NOME as TIPO) può essere:
- locale, cioè interna alla macro,
- in cima al modulo, per le macro del modulo (private),
- e in cima al modulo, ma pubbliche (public), cioè visibili a tutte le macro di tutti i moduli;
naturalmente alle dichiarazioni segue l’eventuale assegnazione dei valori di costanti e valori iniziali delle variabili;
controlli
sono tutte le procedure di verifica relative a valori, oggetti, proprietà, attributi e caratteristiche (es: verifica dell’esistenza degli oggetti coinvolti, o verifica della presenza o dei valori da elaborare), allo scopo di controllare che le condizioni di lavoro della macro siano quelle previste e prevenire eventuali errori; i controlli sono consigliati, necessari in caso di gestione di configurazioni o di fogli di lavoro complessi; il codice per eseguire i controlli è di solito caratterizzato da test per la gestione delle condizioni e delle alternative;
interazione con l’operatore
talvolta richiesta prima dei controlli, talvolta dopo, l’interazione con l’operatore serve di solito per:
- richiedere informazioni precise, per esempio il valore/nome di un oggetto o l’intervallo di tempo che si vuole visualizzare; se numerose o ripetute queste interazioni possono essere delegate a un sistema di “configurazione” che, per esempio, conserva le informazioni su una pagina del foglio di lavoro, o su un foglio o file esterno;
- 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;
- 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;
- 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 e risposte non definite, di solito accompagnate da test (if then else) per gestire le alternative;
valutazioni e decisioni
più è complesso il contesto e il foglio di lavoro, più le macro sono evolute, più è probabile che debbano gestire decisioni, ma per farlo è necessario che le decisioni si basino su parametri misurabili e condizioni definibili, per esempio tramite confronto fra due valori, o verifica della presenza di oggetti o di attributi; il codice per le decisioni si basa principalmente su test delle condizioni (if–then–else) spesso accompagnati da cicli (es: For Each, For next, ecc);
azioni, elaborazioni, chiamate ad altre macro
questo è il cuore della macro, cioè le procedure che servono a realizzare le attività che la macro deve gestire, dalla creazione di oggetti (es: tabelle, pagine, ecc), alla modifica di proprietà, attributi, valori e caratteristiche degli oggetti, dall’elaborazione diretta al lancio di funzioni, dalla revisione delle pagine alla gestione dei file e così via; il codice varia a seconda del tipo di attività, anche se di solito dominano cicli e funzioni; nel caso il codice diventi molto e complesso è opportuno considerare di dividere la macro in parti per semplificarne la stesura, gestione e comprensione;
chiusura
di solito inesistente, può prevedere:
- in presenza di codice per gestire gli errori, un comando per chiudere la macro (es: comando “Exit sub”),
- preceduto dall’eventuale ripristino dei messaggi di errore, aggiornamento schermo ed eventi, se disabilitati (es: Application.ScreenUpdating = True, Application.DisplayAlerts = True, Application.EnableEvents = True)
- eventualmente preceduto dall’eventuale messaggio all’utente di conferma dell’avvenuta esecuzione, per esempio nel caso di macro di lunga durata,
- preceduto dall’aggiornamento di eventuali parametri e indicatori sulle pagine (es: data di esecuzione)
gestione degli errori
di solito assente o risolta frettolosamente con il classico “On error resume next”, cioè in caso di errore vai avanti comunque, la gestione degli errori nelle macro dovrebbe prevedere:
- l’indicazione a inizio macro, dopo le dichiarazioni, del punto a cui saltare in caso di errore (es: “On error goto Gestionerrore”)
- il punto di salto indicato, di solito in fondo alla macro (es: “Gestionerrore:” )
- seguito dal codice per la gestione, cioè almeno l’uso di una finestra di dialogo per comunicare l’errore (usando per esempio err.number, err.description) e cosa deve fare l’operatore per gestire il problema,
- ed eventualmente da una chiusura alternativa gestita di seguito o in altra posizione (tramite Resume);
la gestione degli errori dei programmi è un argomento complesso che approfondiremo in un post dedicato.
È necessario che una macro abbia questa struttura?
No, molte macro sono fatte da una sola riga di codice, ma più una macro è grande ed evoluta più è probabile avrà una struttura simile a quella appena descritta, che ripeto vuol essere solo una traccia semplificata.
Cenni alla programmazione VBA
Due parole sulla programmazione in Vba e sul codice. Ricordo che excel è un ambiente di lavoro composto da oggetti, analogamente il linguaggio vba lavora su oggetti, che possono essere composti da altri oggetti, che hanno una gerarchia, che possiedono numerose proprietà e un set di funzioni/procedure chiamati metodi che possono essere associati a eventi. Per esempio, sono oggetti il foglio di lavoro, un pulsante di comando, le pagine, eccetera.
Cosa sono le proprietà di un oggetto?
Le proprietà rappresentano gli attributi e le caratteristiche che definiscono l’oggetto e lo distinguono dagli altri oggetti simili (es: grandezza del font, colore della cella, altezza della riga, ecc).
Cosa sono i metodi?
Sono le funzionalità degli oggetti, cioè l’elenco delle azioni che l’oggetto può compiere, di solito modifiche di proprietà, creazione o rimozione di oggetti.
Cosa sono gli eventi?
Sono situazioni generate da certe condizioni, spesso conseguenze delle attività dell’operatore, a cui è possibile associare metodi che modificano proprietà di oggetti.
Per esempio, una pagina di excel (worksheet) è un oggetto contenuto nel foglio di lavoro (workbook), parte di un insieme di pagine (worksheets), ed è composta e contiene oggetti come le celle (cells) o tabelle, per esempio, e tutti questi hanno proprietà, anzi una lista di proprietà come il valore delle celle (cells.value), o il nome delle pagine (worksheet.name), e una lista di funzionalità (i metodi) con cui è possibile agire sugli oggetti e sulle loro proprietà, per esempio aggiungere una pagina (worksheets.add), selezionarla (.select), copiarla (.copy) e via dicendo. La pagina dispone di eventi specifici (activate, change, ecc) a cui è possibile associare codice vba, per esempio per aggiornare le tabelle pivot contenute nella pagina.
Come ogni altra lingua, per imparare il linguaggio vba è necessario imparare a memoria i nomi degli oggetti, delle proprietà e dei metodi (il vocabolario), poi il loro funzionamento e le regole d’utilizzo (la sintassi). Inoltre come quando apprendi una nuova lingua, non basta imparare codice e regole, ma è necessario fare esercizio e pratica per poter parlare la lingua in modo fluente. Questo significa esercitarsi, a lungo, finché non diventi bravo a sufficienza per i tuoi scopi.
Come progetta e realizza una macro di Excel?
Prima di creare una macro è opportuno valutare il tuo obiettivo e confermare la tua scelta. Per farlo basta porsi e rispondere ad alcune domande:
- Qual è l’obiettivo della macro che voglio realizzare?
- Quale utilizzo penso di farne?
- Per quanto tempo la userò?
- Quanto tempo mi permette di risparmiare?
- Quanto tempo devo lavorarci per realizzare la macro?
- Risolve pienamente il mio bisogno? Raggiunge il mio obiettivo?
- Ci sono altri modi o strumenti per ottenere lo stesso risultato?
Lo scopo è evidente, no? Devi capire chiaramente 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. Forse ci sono alternative meno onerose, esterne a excel o alternative interne. Forse non ne vale la pena perché per realizzare la macro spenderesti più tempo di quello che risparmieresti.
Una volta che hai confermato la tua scelta, progetta la macro. Apri una pagina Excel vuota, o il tuo wordprocessor, o prendi carta e penna e poi scrivi:
- l’obiettivo,
per esempio “voglio che la macro aggiunga una pagina con un nome scelto da me e aggiunga un titolo uguale al nome”, - la lista delle attività da automatizzare nell’ordine corretto, per esempio:
- “chiedi all’operatore il nome della nuova pagina”,
- “aggiungi la pagina”,
- “dai alla nuova pagina il nome assegnato, se non è stato fornito un nome usane uno predefinito”
- “imposta nella prima cella della pagina un titolo uguale al nome della pagina”
- “comunica l’avvenuta esecuzione”;
- per ogni attività indica:
- un’alternativa all’attività o agli strumenti utilizzati, se disponibile,
- l’elenco degli oggetti e delle proprietà coinvolte (pagine, celle, tabelle, valori, eccetera), per esempio “nuova pagina”, “nome pagina”, “titolo pagina”,
- gli eventuali controlli da eseguire, per esempio “controlla che non sia già presente una pagina con lo stesso nome”,
- le interazioni con l’operatore, se necessarie, per esempio: “chiedi all’operatore il nome della pagina”,
- le eventuali decisioni che la macro deve gestire, se necessario,
- descrivi le condizioni delle decisioni e i parametri.
Una volta che messo per iscritto ogni aspetto, scrivi la macro. Se sei alle prime armi puoi usare il registratore di macro per le attività fondamentali (vedi il post “Il registratore di macro di Excel”), poi devi modificare il risultato direttamente nel Vba editor per aggiungere quello che manca, controlli, interazioni, decisioni, eccetera. Non dimenticare di scrivere note esplicative a ogni passaggio della macro, ti saranno d’aiuto sempre, non solo all’inizio, soprattutto se devi ricordarti come hai realizzato una macro dopo anni. Se non conosci abbastanza il vba devi studiarlo. Puoi partire da una ricerca sul web o da una delle fonti o delle comunità citate nella pagina “Risorse utili per imparare Excel”.
Infine una volta terminata la prima stesura, testa la macro: salva il foglio di lavoro, poi lanciala, verifica che faccia quello che hai programmato esattamente come lo vuoi. In caso contrario apporta le modifiche necessarie e ripeti la verifica, e ancora, e ancora, finché non ottieni il risultato voluto. Poi cambia le condizioni, cambia il foglio di lavoro, fallo usare a un’altra persona, o se necessario sposta la macro in un altro foglio funzionante e verifica se la macro funziona ancora bene. Se necessario modificala e ripeti il test finché non ottieni il risultato voluto.
Un esempio pratico
Che ne pensi di concretizzare l’esempio citato? Nulla di significativo, solo una macro che crea una pagina e gli dà un nome e un titolo.
Eccola:
Sub Creapagina()
‘ Macro che crea una pagina con un nome e un’intestazione
‘ DICHIARAZIONI (delle variabili)
Dim nomepagina As String
Dim I As Integer
‘ GESTIONE DEGLI ERRORI (indicazione del punto di salto)
On Error GoTo ERROR
‘ INTERAZIONE: Chiede all’operatore il nome della pagina dati
nomepagina = InputBox(“Quale nome vuoi dare alla pagina?” & vbCr & vbCr & _
“Se non inserisci un nome la pagina sarà chiamata ‘Nuova_Pagina’”, “Nome pagina”, “Nuova_Pagina”)
‘ CONTROLLI: controlla che non ci sia una pagina con lo stesso nome
‘ usa un ciclo per controllare tutte le pagina del foglio di lavoro e un test per verificare la condizione
For I = 1 To Sheets.Count
If Worksheets(I).Name = nomepagina Then
MsgBox “Esiste già una pagina con lo stesso nome”, vbOKOnly, “Esiste pagina con lo stesso nome”
Exit Sub
End If
Next I
‘ ATTIVITA’: aggiungi pagina e assegna il nome indicato dall’operatore o uno predefinito
If nomepagina = “” Then
sheets.Add After:=ActiveSheet
ActiveSheet.Name = “Nuova_Pagina”
Else
sheets.Add After:=ActiveSheet
ActiveSheet.Name = nomepagina
End If
‘ ATTIVITA’: imposta titolo pagina
Range(“A1”).Value = nomepagina
Range(“A1”).Font.Bold = True
Range(“A1”).Font.Size = 14
‘ CHIUSURA: Messaggio esecuzione avvenuta
MsgBox “FOGLIO CREATO”, vbOKOnly, “CREAZIONE FOGLIO”
‘ chiudi la routine
Exit Sub
‘ PUNTO DI RIPRISTINO – GESTIONE DEGLI ERRORI
ERROR:
MsgBox “ATTENZIONE, SI E’ VERIFICATO UN ERRORE IMPREVISTO: ” & vbCr & vbCr & _
“QUESTO PUO’ ESSERE CAUSATO DA MODIFICHE IMPREVISTE AL CODICE O AL FOGLIO DI LAVORO ” & vbCr & vbCr & _
“PROVA A CHIUDERE, RIAPRIRE E RILANCIARE IL COMANDO” & vbCr & _
“SE IL PROBLEMA PERSISTE INTERPELLA IL TUO CONSULENTE IT”, vbOKOnly, “ERRORE!”
Exit Sub
End Sub
Come vedi il codice è piuttosto elementare e comprensibile. Ho messo tutte le note che servono per capire come funziona e ho evidenziato la struttura. Se hai un minimo di competenza in vba non troverai nulla di nuovo o significativo. Voglio comunque attirare la tua attenzione al fatto che questa macro non è legata a un foglio di lavoro o a oggetti precisi, può essere usata in qualsiasi foglio di lavoro senza problemi.
Quali sono le macro più efficaci?
La risposta semplice è: quelle che raggiungono l’obiettivo che ti sei prefissato. Indubbiamente, ma la valutazione di una macro è molto più complessa e riguarda diversi aspetti:
- l’efficacia: raggiunge l’obiettivo?
- l’efficienza: raggiunge l’obiettivo nel minor tempo? La macro mi fa risparmiare più tempo di quello che ho speso per realizzarla?
- l’intelligenza: la macro è in grado di gestire cambiamenti di condizioni di lavoro, situazioni inattese e perfino imprevisti? La macro è in grado di gestire decisioni?
- l’affidabilità: la macro funziona sempre? È esente da rischi? È esente da complicazioni che richiedono spesa di tempo e risorse?
- l’autonomia: la macro lavora senza dover interagire con l’operatore? La macro funziona senza informazioni ulteriori a quelle presenti sul foglio?
- la compatibilità: la macro funziona con ogni versione di Excel e su qualunque pc? La macro ha bisogno di plugin o librerie preinstallate?
- la flessibilità: la macro funziona solo in quel foglio di lavoro? O funziona in qualunque foglio? È “esportabile”? È possibile riutilizzarla? Con quale costo? In quali tipi di fogli di lavoro, con quale destinazione o funzionalità?
- la semplicità: la macro è semplice o complessa? Perché è complessa? È necessario? Il codice è il minimo indispensabile per ottenere il risultato atteso? È ridondante? È comprensibile?
Attenzione, una macro non “deve” essere semplice, anzi le macro più flessibili, intelligenti e autonome sono complesse, è naturale che sia così. Con semplicità si intende utilizzare il codice, le procedure e i metodi di programmazione più semplici. Ti invito a chiederti sempre se puoi semplificare il codice delle macro. E spesso è così.
Tornando agli altri parametri è evidente che due macro possono essere entrambe efficaci, ma molto diverse in efficienza, flessibilità, affidabilità e autonomia. In teoria ogni macro dovrebbe avere tutte le caratteristiche, ma spesso non è possibile, o richiede una spesa di tempo molto diversa, talvolta eccessiva.
A seconda del punto di vista il risultato può essere molto diverso. Il classico punto di vista del programmatore è quello di una macro con massima efficacia, efficienza e affidabilità, con scarsa flessibilità e intelligenza. Un punto di vista più “imprenditoriale” privilegia macro molto flessibili, cioè che possano essere riutilizzate il più possibile per ammortizzare la spesa di realizzazione. In realtà non c’è una risposta giusta, ma diverse risposte a seconda delle condizioni e degli obiettivi.
In pratica le caratteristiche della macro dovrebbero essere definite a livello di progetto. Come abbiamo visto, realizzare una macro significa non solo programmare, ma gestire un progetto, con un inizio, una pianificazione, un’esecuzione, una fase di controllo e una fine, un progetto che definisca con precisione gli obiettivi e il rapporto tra risorse, tempo e qualità dei risultati.
Questo significa per esempio che se hai poco tempo e vuoi una macro efficace che lavori solo su quel foglio di lavoro, svilupperai in un certo modo, mentre se stai creando un automatismo che vuoi integrare nella tua scatola degli attrezzi, per utilizzarla nei tuoi fogli di lavoro molte altre volte, la macro sarà molto diversa.
Il mio consiglio è quello di dosare con attenzione le risorse, il tempo innanzi tutto, e di applicare nello sviluppo una strategia di modularità e piccoli passi. Cioè dividere le macro complesse in macro più piccole, flessibili e autonome dove possibile, che è possibile riutilizzare più volte e una volta messa a punto potrai integrare nella tua scatola degli attrezzi.
La scatola degli attrezzi, cioè la tua collezione di macro e maschere, di modelli e fogli di lavoro pronti per l’uso, è uno strumento che devi realizzare se lavori con Excel regolarmente per tempi significativi. Perché nel medio-lungo periodo ti farà risparmiare molto tempo e fatica.
Come si usano le macro di Excel?
Come descritto nel post “Il registratore di macro di Excel”, esistono molti modi per eseguire una macro. In fase di sviluppo usiamo la finestra delle “Macro”, o il vba editor, ma nell’uso quotidiano per lanciare una macro usiamo controlli dedicati, sulla pagina o tramite maschera:
- di solito un pulsante posizionato in una pagina del foglio di lavoro; il pulsante è uno dei controlli, oggetti speciali concepiti per permettere all’utente di agire o interagire con il foglio di lavoro, a cui possono essere assegnate macro; possono essere aggiunti al foglio tramite il comando “Inserisci” della scheda “Sviluppo” della barra multifunzione;
- un oggetto grafico a cui colleghiamo una macro; per esempio puoi usare una forma, un’immagine, o un disegno;
- un pulsante posizionato in una maschera preparata tramite l’editor vba; le maschere offrono soluzioni molto professionali, ma realizzarle richiede tempo e competenza.
- eseguire la macro in modo automatico a un dato evento, per esempio all’apertura del foglio di lavoro, o alla selezione di una pagina. Questo sistema di lancio delle macro deve essere impostato tramite l’editor vba.
Di solito gli automatismi vengono installati in pannelli di comando sulla pagina perché sono veloci e facili da realizzare. Le maschere sono potenti e comode, ma sono meno utilizzate in quanto richiedono più tempo e codice per la loro realizzazione. Parleremo della creazione e dell’uso delle maschere in post dedicati. Per soluzioni specifiche è talvolta opportuno usare macro agganciate a eventi, per esempio per attività di gestione all’apertura o alla chiusura il foglio di lavoro. Approfondiremo questi aspetti in ulteriori post.
Infine è utile sottolineare che la macro, oltre all’installazione nel singolo foglio di lavoro, può essere condivisa e utilizzata in ogni foglio di lavoro (aperto su quel pc) tramite installazione in una cartella personale (personal.xlsb). La cartella personale è un file xlsb, salvato nella cartella XLStart della tua installazione di Excel, che viene aperto ogni volta che viene avviato Excel, che può essere copiato ed esportato facilmente in altri computer e le cui macro vengono elencate nella finestra di dialogo “Macro” e sono sempre disponibili da qualunque foglio excel.
Il modo più veloce di creare questa cartella è cliccare sul pulsante “registra macro” in basso a sinistra sulla barra di stato, nella finestra “Registra macro” selezionare dal menù “Memorizza macro in” la voce “Cartella macro personale”, registri qualcosa (es: selezioni una cella) e riclicchi sul pulsante “registra macro”. Per gestirla devi usare il vba editor (Alt+F11), nella finestra Progetti in alto a sinistra vedrai il nuovo foglio e potrai copiare e importare moduli, maschere e macro.
Personalmente la utilizzo poco, soprattutto perché lavoro su macchine diverse, anche non mie, quindi tengo la mia scatola degli attrezzi su chiavetta, ma come avrai già intuito è una soluzione per disporre velocemente degli automatismi in tutti i fogli di lavoro senza spendere tempo nell’importare, installare, eccetera. Se lavori sempre sullo stesso pc ti consiglio di considerarla, potresti installare tutte le macro utili nella cartella personale, fino a farla diventare la sua scatola degli automatismi.
In questo caso, per lanciare più comodamente le macro potresti considerare di usare:
- pulsanti della barra di accesso rapido (la prima in alto), che puoi impostare come segue:
- clicca su File,
- poi su Opzioni,
- clicca su Barra di accesso rapido,
- apri l’elenco sotto “Scegli comandi da”,
- clicca su “macro”,
- seleziona la macro che vuoi assegnare al pulsante.
- clicca sul pulsante “Aggiungi” per spostare la macro nell’elenco di pulsanti presenti sulla barra di accesso rapido,
- clicca sul pulsante “Ok”.
- pulsanti in un gruppo personalizzato della barra multifunzione, che puoi impostare in questo modo:
- clicca su File,
- poi su Opzioni,
- clicca su Barra di accesso rapido,
- apri l’elenco sotto “Scegli comandi da”,
- clicca su “macro”,
- seleziona la macro che vuoi assegnare al pulsante.
- clicca sul pulsante “Aggiungi” per spostare la macro nell’elenco di pulsanti presenti sulla barra di accesso rapido,
- clicca sul pulsante “Ok”.
Per approfondimenti sulla cartella personale visita questa pagina.
Conclusioni (?)
Abbiamo visto cos’è una macro, come si creano e con quali scopi, come sono fatte, come si lavora sul codice con cenni alla programmazione, come si progettano e realizzano, come si usano.
Sulle macro di Excel c’è molto altro da dire, quello che ti ho mostrato è solo un assaggio del mondo dell’automazione di Excel. Macro e vba sono argomenti ampi e complessi trattati in corsi da molte decine di ore. Lo dico perché sono un esperto di automazione di Excel e ho realizzato diversi corsi che ti guidano alla scoperta di questo aspetto poco conosciuto di Excel.
Perché dovresti spendere tempo per studiare macro, vba e automazione?
Per i vantaggi concreti che offrono.
Dopotutto le macro non sono altro che liste di comandi che diamo a Excel perché svolga attività al posto nostro. Quindi l’automazione ci permette di risparmiare tempo, di realizzare strumenti nuovi e personalizzati, di rendere i tuoi fogli più comodi e professionali.
Per comodità tua e mia puoi scaricare il PDF della guida tramite Gumroad
Devi solo cliccare sul pulsante sottostante e seguire le istruzioni
NB: non devi pagare, non è necessario lasciare la tua mail
Vuoi seguire un corso gratuito introduttivo all’automazione di Excel?
Ho realizzato un corso introduttivo all’automazione che ti mostra come ottenere il meglio dal registratore di macro.
Cioè approfondisce tutto quello che hai letto in questa guida e continua oltre. Ti offre un percorso guidato passo passo, con decine di esempi, un metodo di progettazione e di ottimizzazione delle macro registrate che ti mostrerà come è possibile realizzare macro registrate flessibili.
La buona notizia è che se ti iscrivi a Excel Professionale il corso te lo offro io.
Se ti interessa puoi registrarti attraverso la maschera qui di seguito.
Se invece vuoi imparare molto di più sull’automazione
Ho preparato un corso di vba e corso di automazione che ti portano da zero all’automazione dei tuoi fogli Excel
PS: Se questa guida ti è piaciuta o ti è stata utile, condividila con gli amici sui social.
Puoi farlo attraverso i pulsanti qui di seguito. Grazie