
|
Il
registratore delle macro
Il
registratore delle Macro
Questo articolo è il primo di una serie che
ha l’ambizione di avvicinare il lettore che proprio esperto non è,
all’affascinate mondo delle macro. O meglio, del Vba (Visual
Basic for Application), il linguaggio di programmazione che opera
nell’ambito di Excel e delle applicazioni Office in generale. Fin qui nulla
di strano. Ma l’ambiziosità del progetto si materializza nel metodo,
decisamente anticonvenzionale, che intendiamo seguire per raggiungere lo
scopo che ci siamo prefissi. In particolare, dal momento chi intende
seguirci parte da zero, eviteremo di ricorrere per quanto possibile a
termini tecnici o a conclusioni scontate e cercheremo di premiare la
semplicità e la chiarezza, anche se così facendo incorreremo sicuramente in
qualche inesattezza. A costo di far rizzare i capelli a tecnici ed esperti.
Prima di cominciare, però, è doverosa qualche considerazione. Molti, dopo
aver acquisito una certa familiarità con l’utilizzo di Excel hanno provato,
prima o poi, a cimentarsi con le macro. Il più delle volte (almeno a noi è
successo così) la lodevole intenzione è destinata a restare tale. Infatti,
chi non ha il bernoccolo della programmazione ne tanto meno il tempo di
documentarsi adeguatamente deve fare subito i conti con un ambiente in cui
(doverosamente, sia ben chiaro…) il tecnicismo è di rigore, e se non si
riesce a penetrare l’austero linguaggio degli addetti ai lavori ci sono
tutte le premesse per scoraggiare anche i più ardimentosi. Così le macro
restano per i più un oscuro oggetto di desiderio. Peccato, perché
impadronirsi anche superficialmente delle loro tecniche di utilizzo consente
di scatenare la potenza e la versatilità di Excel, nonché di sviluppare
applicazioni anche piuttosto sofisticate per la risoluzione delle più
disparate problematiche. E allora? Allora, se proprio non abbiamo intenzione
di diventare degli esperti, ma ci appaga la soddisfazione di veder
funzionare qualcosa creato da noi, possiamo ugualmente intraprende un
proficuo viaggio nel mondo della programmazione in Vba. Basta
utilizzare con creatività e fantasia alcuni strumenti che Excel ci mette a
disposizione. La chiave per aprire la porta di questo universo è il
registratore delle macro, una benvenuta funzione, facilissima da
utilizzare, che consente di trasformare in una macro (o meglio, in un
programmino in Vba), una qualsiasi procedura eseguita alla tastiera.
Procediamo con ordine
A questo punto ci siamo accorti di esserci
fatti prendere un poco la mano, pertanto, a beneficio di chi non avesse ben
chiaro il concetto di macro, vale la pena di tentarne una interpretazione
spicciola, anche per restare in sintonia con la tecnica di esposizione che
ci siamo ripromessi di utilizzare per sviscerare le tematiche che intendiamo
affrontare. Una macro è un insieme di istruzioni che il computer interpreta
una dopo l’altra e traduce in azioni operative, ne più ne meno come se
fossero state impartite manualmente da noi. Il bello è che una macro può
essere eseguita indefinitamente tutte volte che lo si desidera, e pertanto
si rivela una ottima soluzione per automatizzare una volta per tutte
l’esecuzione di procedure ricorrenti. Le applicazioni pratiche delle macro
sono solo da immaginare. Si può procedere alla stampa di una
tabella, alla formattazione di un documento, alla creazione di un grafico,
alla interrogazione di un data base e così via. Conviene fare un esempio.
Immaginiamo di dover stampare settimanalmente una tabella dati
accompagnandola con il corrispondente diagramma. Grazie ad una macro i
nostri interventi si possono ridurre alla semplice pressione di un bottone.
E ancora, si potrebbe sviluppare un programmino per automatizzare
l’interrogazione di un archivio fatture al fine di individuare i clienti
morosi, e spedire loro, sempre automaticamente, una lettera di sollecito. Ma
come è fatta una macro? Sostanzialmente, le istruzioni di cui si compone
sono articolate in certo numero di righe che, nel loro insieme,
costituiscono quello che nel gergo degli addetti ai lavori viene definito un
listato. Per il numero delle suddette righe non esiste un limite, ed
altrettanto dicasi per la loro lunghezza, ma per propiziarne la leggibilità
è raccomandabile non eccedere. Quaranta o cinque caratteri per riga bastano
e avanzano. In ogni caso, righe troppo lunghe possono essere
convenientemente spezzate. È sufficiente che l’elisione non tronchi una
istruzione o una parola chiave, ed avere l’accortezza di digitare
uno spazio, seguito da un underscore ( _ ) subito dopo la
troncatura. Ma di questo ne parleremo più avanti. E ancora, se il listato di
una macro fosse troppo corposo, e quindi difficile da interpretare, lo si
può suddividere in più agili sottoprogrammi che possono essere
richiamati dall’interno della macro principale. A questo punto, fatta
la conoscenza (sia pure superficiale) con le caratteristiche salienti delle
macro vediamo come crearle. Ci sono due modi. Il primo, ad uso e consumo dei
programmatori smaliziati, consiste nel digitare le varie istruzioni in cui
si articolano in uno speciale ambiente di Excel , meglio conosciuto dagli
esperti come l’Editor del Vba (figura 1).
Il
secondo, che è quello che ci interessa più da vicino, consiste
nell’utilizzare il famoso registratore, uno strumento che se
sapientemente utilizzato ci trasporterà quasi senza accorgercene nel
fantastico mondo della programmazione di Excel. È proprio sull’utilizzo di
questo prezioso strumento che si basa soprattutto il nostro metodo di
apprendimento. Basta cominciare a registrare alcune semplici macro, e
analizzandone pazientemente il listato si può fare la conoscenza con le più
importanti istruzioni e parole chiave, nonché scoprire
poco a poco la sottile dinamica del loro utilizzo. Il bello è che un
programma in Vba può essere generato assemblando opportunamente fra
loro macro elementari, pertanto,dopo avere fatto un po’ di esperienza
possiamo arrivare a sviluppare una piccola applicazione accorpando fra
loro, con banali operazioni di copia e incolla, spezzoni di macro
registrate singolarmente. Insomma, il registratore è la chiave che
apre la porta al solo apparentemente misterioso mondo della programmazione
di Excel. Vediamo subito come utilizzarlo.
Registriamo una macro
Come
si diceva, il registratore delle macro ha la prerogativa di trasformare in
un listato in Vba una qualsiasi procedura operativa eseguita con la
mediazione della tastiera o del mouse. Il corrispondente programma, cui al
momento della registrazione deve essere stato assegnato un nome (il
più esplicativo possibile), viene custodito nella memoria del computer e può
essere richiamato tutte le volte che si vuole eseguire quella procedura. Ma
ecco come si crea una macro. Nel nostro esempio registreremo un semplice
programmino che traspone i dati contenuti in una tabella, vale a dire
che le righe diventano colonne e viceversa.
q
Aprire il menu Strumenti
e optare per la voce Macro. Nel corrispondente sottomenu selezionare
la voce Registra nuova macro (figura 2) per accedere alla
maschera che gestisce la denominazione della macro che intendiamo
registrare (figura 3).
Nella
casella Nome macro digitare il nome che si vuole assegnare alla macro
(Trasposizione, per esempio) avendo cura che risulti chiaramente
esplicativo delle funzioni che il corrispondente programma deve svolgere.
Non ci stancheremo mai di ripetere questa raccomandazione. Infatti, quando
si ha a che fare con numerose macro, può diventare difficile riconoscerle se
il nome assegnato non ci aiuta a risalire immediatamente a quello che fanno.
Il nome che viene digitato nella casella andrà a sovrascrivere quello che
Excel propone per default (Macro1) considerando che questa è la prima
macro che stiamo registrando.
Sui nomi che possono essere utilizzati
bisogna fare qualche considerazione. Innanzitutto, si possono utilizzare
caratteri maiuscoli, minuscoli e punti, ma non sono ammessi spazi. La
spazio può essere sostituito dall’underscore. Sono nomi
validi: Trasposizione, trasposizione, trASPOsizione,
Trasposizione1, Trasposizione_tabella. Non lo sono, invece:
Trasposizione tabella o Trasposizione 1 perché è presente
uno spazio. Alla macro si può assegnare una combinazione di due
tasti che, quando premuti ne determinano il lancio. Uno dei due tasti
deve essere necessariamente il tasto Control, mentre il secondo (un
carattere) deve essere digitato nella casella Scelta rapida da
tastiera. È appena il caso di ricordare che analoghe sequenze vengono
utilizzate da Excel come alternative a molte opzioni dei menu. Per questa
ragione bisogna fare attenzione a non creare doppioni. Considerando che
l’alfabeto è quello che è le possibilità sono piuttosto limitate ma
fortunatamente Excel consente di discriminare fra caratteri maiuscoli
e minuscoli, così ne consegue un aumento del numero di sequenze a
disposizione. Nella parte inferiore della maschera è presente una
finestrella in cui possono essere inserite eventuali annotazioni per
documentare la macro. Si consiglia di utilizzarla perché rappresenta una
possibilità in più per rendersi conto delle funzioni svolte dal programma
senza doverlo necessariamente eseguire.
q
Concluso l’inserimento dei
dati premere il pulsante Ok. Così facendo, si determina l’attivazione
del registratore e la contemporanea visualizzazione nell’area di
lavoro di due pulsanti affiancati (figura 4). Il primo, con sopra
impresso un quadratino, consente di arrestare la registrazione in corso,
mentre delle importanti funzioni associate al secondo ne parleremo quando
sarà il momento.
q
A
questo punto eseguire la procedura che si intende registrare: nella
fattispecie la trasposizione della tabella che occupa la zona B6..E10.
Evidenziarla con il mouse, aprire il menu Modifica e selezionare
Copia. Fare clic sulla cella in cui dovrà essere posizionato l’angolo
superiore sinistro della tabella trasposta (B18), aprire ancora il
menu Modifica e selezionare la voce Incolla speciale. Così
facendo viene aperta una maschera in cui si spunta il bottone Trasponi.
Premendo il pulsante Ok si determina la trasposizione della tabella
(figura 5). Posizionare il cursore in A1 per togliere
l’evidenziazione della tabella. Si conclude così la nostra procedura,
pertanto possiamo spegnere il registratore facendo clic sul pulsante
dedicato (quello con sopra impresso il quadratino).
Durante la trasposizione della tabella,
Excel ha lavorato intensamente dietro le quinte per trasformare la
procedura nel corrispondente programmino in Vba. Accertiamocene
praticamente dando corso alla sua esecuzione, faremo così la conoscenza con
la maschera per la gestione delle macro registrate.
Esecuzione della macro
Per eseguire la macro che abbiamo appena
registrata (alzi la mano chi non ha voglia di vederla all’opera…) bisogna
cancellare la tabella che abbiamo trasposto manualmente e posizionare il
cursore in un qualunque punto del foglio di lavoro, quindi aprire il menu
Strumenti, selezionare la voce Macro e optare ancora per Macro
nel corrispondente sottomenu. Così facendo viene visualizzata la maschera di
figura 6. A questo punto, ecco come procedere.

q
Selezionare il nome della
macro da lanciare che, almeno nel nostro caso, è l’unico che compare
nell’elenco.
q
Premere il pulsante Esegui.
Se la macro è stata correttamente registrata, sotto la tabella originale,
nella stessa posizione in cui l’avevamo creata in precedenza, dovrebbe
comparire la nuova tabella trasposta. Il nostro programmino, e questo è il
bello delle macro, può essere eseguito indefinitamente, e puntualmente
otterremo ogni volta lo stesso risultato. Provare per credere…
Adesso che la macro funziona è legittima la
curiosità di dare una sbirciata a quello che c’è dietro le quinte. In altre
parole, al listato che la gestisce, ospitato nell’editor del Vba.
Ecco come procedere.
q
Ripetere la procedura per
aprire la maschera che gestisce le macro
q
Evidenziare il nome di quella
di cui vogliamo esaminare il listato e premere il pulsante Modifica.
Con quest’ultima operazione si accede
all’ambiente Editor (figura 7) con cui vale la pena di fare la
conoscenza dal momento che è proprio qui che daremo vita alle nostre
applicazioni non appena avremo familiarizzato appena un poco con la
manipolazione delle macro registrate.
L’Editor del Vba
L’area
di lavoro dell’Editor è suddivisa in tre sezioni. Quella a destra del
video, che ospita il listato della macro, viene definita Modulo, e
man mano che ne vengono creati altri viene assegnata loro una numerazione
progressiva. Quello attuale è il Modulo1. In questo area verranno
memorizzate le altre macro che si dovessero registrare nel corso della
sezione di lavoro. Se si esce da Excel e si registra una nuova macro verrà
creato un altro modulo numerato progressivamente, e così via. A
fianco del modulo ci sono due finestre sovrapposte. In quella superiore è
riportata la mappa del modello che stiamo sviluppando. In particolare, si
noti il riferimento ai tre fogli di lavoro in cui si articola la nostra
cartella, e il riferimento alla cartella dei moduli. Farvi sopra
doppio clic per visualizzare quello che è stato appena creato per ospitare
la nostra prima macro. Un doppio clic sul suo nome (Modulo1)
determina la visualizzazione del corrispondente listato. La finestra
inferiore, invece, è la cosiddetta finestra delle proprietà, in cui
sono elencare le caratteristiche dell’oggetto evidenziato nella finestra
soprastante. Su questo argomento ritorneremo in futuro, per il momento
accontentiamoci di aver registrato la nostra prima macro e analizziamone
listato.
Analisi della macro
Il nostro programmino è decisamente
semplice, ma analizzandolo avremo l’occasione di imparare moltissime cose.
Innanzitutto si nota che è…bilingue. Infatti, la sua struttura è in
inglese, mentre quanto viene inserito dall’utente (il nome della
macro, per esempio) viene riportato così come digitato. La macro si può
considerare articolata in quattro sezioni: apertura,
documentazione, corpo della macro, chiusura. Nel listato
originale la numerazione non è prevista ma è stata introdotta da noi per
facilitarne il commento.
-
Sub
Trasposizione()
-
'
-
' Trasposizione Macro
-
' Macro registrata il [data
registrazione macro] da [nome licenziatario]
-
'
-
-
'
-
Range("B6:E10").Select
-
Selection.Copy
-
Range("B18").Select
-
Selection.PasteSpecial
Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
, Transpose:=True
-
Range("A1").Select
-
End Sub
La prima sezione va da dalla riga 1
alla riga 7 ed è strutturata sempre nello stesso modo, qualunque sia
la macro che si è registrato. In particolare, la prima riga inizia con la
parola chiave Sub (scritta in blu, come tutte le parole
chiave) seguita dal nome che abbiamo a suo tempo assegnato alla macro (Trasposizione),
e da due parentesi. La prima è aperta, mentre la
seconda è chiusa. La riga 3 cita ancora il nome del programma
facendolo seguire dalla parola Macro, mentre nella quarta riga sono
riportate la data in cui la macro è stata registrata e il nome
del titolare della licenza Excel. Si noti che entrambe le righe sono
precedute da un apostrofo e sono di colore verde. La
ragione è semplice. Trattandosi di note che non sono coinvolte
nell’operatività della macro, vengono automaticamente isolate dal resto del
programma. In particolare, l’apostrofo ha proprio la funzione di
escluderle quando il listato viene eseguito e, proprio per questo, si rivela
uno strumento preziosissimo per il profano che affronta il Vba con il
timore reverenziale degli inesperti. Infatti, quando cominceremo ad
assemblare fra loro singole macro registrate per creare programmi di un
certo impegno, questa particolare peculiarità dell’apostrofo sarà
utilissima per valutare la possibilità di escludere passi che riteniamo
superflui dalle macro che intendiamo aggiungere. Inoltre, non ci stancheremo
mai di raccomandarne l’utilizzo per documentare convenientemente i programmi
che andremo a sviluppare. Così, quando per una ragione o per l’altra ci si
rimette mano, sarà possibile, con una semplice occhiata, comprendere le
funzioni svolte dai passi particolarmente complessi. Ma ritorniamo
all’analisi del listato. Le righe 2, 5, 6 e 7
sono vuote. Servono per distaccare convenientemente fra di loro le sezioni
della macro. Per la verità, la riga 6 non sempre è vuota. Infatti,
Excel la può utilizzare per dichiarare la sequenza di lancio che è
stata eventualmente assegnata al momento della creazione della macro. E
veniamo finalmente al corpo della macro che si presenta indentato
rispetto al margine sinistro per distaccarlo dalle altre sezioni, e occupa
le righe da 8 a 13. La riga 8 presiede
all’evidenziazione della tabella e ci fa fare la conoscenza con una
importante istruzione che utilizzeremo tutte le volte che dobbiamo
portare il cursore su una cella o selezionare una zona del
foglio di lavoro (Select). Conviene mandarne a memoria la sintassi
perché ci capiterà di usarla moltissimo. La riga 9, invece, ha il
compito di copiare la tabella che abbiamo appena evidenziato. Anche in
questo caso veniamo a conoscenza di una nuova istruzione che ci conviene
memorizzare o, quantomeno, prenderne buona nota. Infatti, la cosa importante
non è ricordare la sintassi di una istruzione, il nome di una
parola chiave, o come è strutturato un passo che esegue una certa
operazione, bensì avere ben chiare in mente le loro funzioni. Quando ce ne
vogliamo servire non dobbiamo fare altro che eseguirne la copia da una macro
registrata in precedenza e incollarla in quella che stiamo
sviluppando, operando, se necessario le eventuali modifiche. Queste ultime,
sia ben chiaro, sono alla portata di tutti perché quasi sempre si
riferiscono semplicemente all’eventuale nuova dichiarazione delle zone
coinvolte nelle operazioni, oppure nella sostituzione di una istruzione o di
una parola chiave. Insomma, si tratta di interventi facilissimi da eseguire.
Tanto per fare subito un esempio liberatorio, se vogliamo che la nostra
macro crei la tabella trasposta in J18 anziché in B18, basterà
semplicemente inserire nel passo 8 le nuove coordinate. L’operazione
è banale, tanto più che all’interno dell’Editor (ci eravamo
dimenticati di dirlo) si opera ne più ne meno come nell’ambito di un
tradizionale elaboratore di testi. Il passo successivo (riga numero 10)
posiziona il cursore dove essere visualizzata la tabella trasposta, mentre
il passo 11 è responsabile della trasposizione vera e propria. La sua
complessità è solo apparente dal momento che sono riportati tutti i settaggi
previsti nella maschera Incolla speciale per l’opzione Trasponi.
Con un po’ di esperienza potremo individuare le istruzioni ridondanti, ma
per il momento lasciarle non guasta. Vale però la pena di notare che la riga
è stata spezzata in due. L’elisione ha avuto luogo dopo il temine False
e prima della virgola che lo separava dal resto della macro.
Pertanto, al termine dello spezzone è stato digitato uno spazio
seguito dall’underscore. Ed eccoci all’ultima riga della sezione
operativa, la 12, che riporta il cursore in A1 per
togliere l’evidenziazione alla tabella trasposta. Come si vede è esattamente
uguale al passo 8, cambiano solo le coordinate di cella. La macro
(come tutte le macro) si conclude con la parola chiave End Sub che
rappresenta la fine del nostro programma. A questo punto, ne dovremmo sapere
abbastanza per cimentarci con qualche registrazione di prova. Per esempio,
possiamo assegnare il grassetto e un colore ai dati ospitati
nella tabella, creare un grafico utilizzando il contenuto di quest’ultima,
e così via… La procedura è esattamente uguale a quella che abbiamo
descritta. Una volta registrata una macro raccomandiamo caldamente di
accedere all’Editor e di analizzarne pazientemente i vari passi.
Avremo certamente l’occasione di aumentare le nostre conoscenze.
Conclusioni
Dopo aver letto il presente articolo si
dovrebbe essere in grado di registrare semplici macro e di eseguirle, nonché
di procedere a qualche modifica elementare. I lettori più attenti, però, si
saranno accorti che le macro che abbiamo registrato presentano alcune
limitazioni: due in particolare. La prima è rappresentata dal fatto che
operano sempre sulle stesse posizioni del foglio di lavoro, pertanto,
volendo fare un esempio, se la nostra tabella dovesse subire modifiche
(ingrandirsi, per esempio) il nostro programmino non è in grado di
accorgersi delle aumentate dimensioni e opererebbe sempre sulla stessa zona.
La seconda limitazione, invece, è quella che non sono in grado di ricevere
dati dall’esterno e quindi non se ne può pilotare il decorso. In altre
parole, le nostre macro, almeno per il momento non sono interattive.
Nel prossimo articolo vedremo come ovviare alla prima limitazione, inoltre
descriveremo passo passo la procedura per automatizzare l’interrogazione
dell’archivio ospitato nel modello esemplificativo (Monitoraggio vendite)
che accompagna il presente articolo. In particolare, verrà spiegato come
registrare la corrispondente macro ed associarne il lancio alla pressione di
un pulsante. Dell’interattività, invece, ce ne occuperemo più avanti. |
|