Xiulin Ruan, a Purdue University professor of mechanical engineering, holds up his lab’s sample of the whitest paint on record. (Purdue University/Jared Pike)
Alcuni ricercatori della Purdue University (nello Stato dell'Indiana, USA) hanno creato una vernice tanto bianca da contribuire al raffreddamento delle superfici su cui viene stesa, e tale effetto è così potente da spingerli a ritenere che la loro invenzione possa aiutare a fare a meno dell'aria condizionata.
La "vernice ultrabianca" deve le sue particolarità all'utilizzo, nella miscela che la compone, di solfato di bario, un composto chimico già usato nel campo della fotografia e della produzione dei cosmetici come agente sbiancante.
Il suo uso ha consentito di creare una vernice che non solo riflette fino al 98,1% della luce solare che la colpisce (vernici che vantano simili proprietà, già sul mercato, arrivano all'80%-90%) ma è anche in grado di di respingere la componente infrarossa, proprietà che nessuna vernice attualmente in vendita possiede.
An infrared camera shows how a sample of the whitest white paint (the dark purple square in the middle) actually cools the board below ambient temperature, something that not even commercial “heat rejecting” paints do. (Purdue University/Joseph Peoples)
Grazie alle sue caratteristiche, la vernice della Purdue University è quindi addirittura in grado di raffreddare le superfici che ricopre: i primi test mostrano come esse, durante la notte, si trovino a una temperatura 19 gradi Fahrenheit (circa 10 gradi Celsius) inferiore a quella dell'ambiente circostante, e 8 gradi Fahrenheit (circa 4,5 gradi Celsius) inferiore anche se colpite dal sole di mezzogiorno.
«Calcoliamo che, usando questa vernice per coprire un tetto con una superficie di 1000 piedi quadrati (circa 93 metri quadrati), otteniamo una potenza di raffreddamento pari a 10 kilowatt, superiore a quella dei condizionatori centralizzati di molte case» spiega Xiangyu Li, uno dei responsabili della creazione della vernice ultrabianca.
Alla base delle motivazioni che hanno spinto i ricercatori a imboccare questa strada sta proprio il desiderio di creare una vernice che, riflettendo il più possibile la luce, possa aiutare a fare meno affidamento sulle macchine per il raffreddamento degli ambienti, con conseguenti benefici per il consumo energetico e per l'ambiente.
«Abbiamo valutato diversi prodotti commerciali; praticamente, qualsiasi cosa sia bianca» ha spiegato ancora Xiangyu Li, parlando del processo che li ha portati a scegliere certi materiali per il loro prodotto. «Abbiamo così scoperto che, usando il solfato di bario, si possono rendere le cose molto, molto riflettenti, e ciò significa che sono anche molto, molto bianche».
Inoltre - spiega sempre Xiangyu Li - la decisione di adoperare particelle di solfato di bario di dimensioni diverse ha contribuito ad aumentare il potere riflettente del prodotto finito.
La vernice ultrabianca ancora non è in vendita, ma la sua produzione su scala industriale non dovrebbe essere problematica. I ricercatori affermano infatti che per quanto riguarda il solvente ne è stato usato uno acrilico standard, e che il solfato di bario è addirittura più economico del biossido di titanio, generalmente adoperato per la creazione delle vernici bianche.
Ora che il brevetto è stato depositato, quindi, l'università ha già avviato i contatti con una grande azienda (di cui non ha fatto il nome) per la produzione e la commercializzazione.
Il Bitcoin è come il primo amore. Non si scorda mai.
Pure tenendolo vicino al cuore, gli operatori che si muovono sui mercati delle criptovalute, tengono sempre gli occhi aperti in più direzioni perché non disdegnano le scappatelle. Dall’inizio di aprile mandano messaggi d’amore a cinque delle 4.866 criptovalute attuali.
Proprio mentre scriviamo il Bitcoin, scambiato a 57.819 dollari americani, ha superato i mille miliardi di dollari di capitalizzazione, a distanza siderale dalle altre criptovalute molto sollecitate dai mercati. Ethereum (che vale 2.075,5 dollari mentre scriviamo), ha un valore di capitalizzazione di 238,18 miliardi di dollari e Binance Coin, scambiata a 388,16 dollari, ha un valore complessivo di 58,7 miliardi.
Dal punto di vista degli scambi e dei potenziali guadagni, non ci sono però soltanto le criptovalute più note. Il mercato è vasto e ha un totale di capitalizzazione di 1.939 miliardi di dollari (1.630 miliardi di euro) e, benché in modo irregolare, succede che una criptovaluta riesca a “sovraperformare” (ad avere rendimenti più elevati rispetto alle altre). Oltre alle già citate Bitcoin, Ethereum e Binance Coin che, insieme, formano il 60% del mercato delle criptovalute, ci sono due scommesse su cui puntare.
Bitcoin
it.tradingview.com
Dal 13 marzo scorso non riesce più a superare la soglia dei 60mila dollari e, stando al Ceo dell’exchange CoinCorner, Danny Scott, non è impossibile che possa arrivare a 83mila dollari, puntando tutto su un aprile rialzista, spinto dagli acquisti di criptovaluta i quali, a suo dire, sapranno avere la meglio sui ribassisti che vogliono mantenere il valore del Bitcoin vicino ai 60mila dollari americani.
Ethereum
it.tradingview.com
Anche nel caso di Ethereum è in atto una gara tra rialzisti e ribassisti. Il 2 aprile 2021 la criptovaluta ha raggiunto il suo valore più alto (2.144,59 dollari) ma, subito dopo, c’è stato un ribasso di oltre 100 dollari che ne ha determinato il prezzo a 2.044,77 dollari. Tuttavia l’Exponential Moving Average (EMA) degli ultimi giorni, ossia la media mobile, indica che i rialzisti tendono ad avere la meglio e che, nei prossimi giorni, la criptovaluta potrebbe raggiungere nuovi valori record, fino a raggiungere i 2.600 dollari.
Binance Coin
it.tradingview.com
Una spinta repentina verso l’alto lo scorso 2 aprile, fino a toccare la quotazione record di 399 dollari per poi ricadere subito e rialzarsi immediatamente. Questo è l’andamento di Binance Coin, la cui altalena sembra essere lungi dal fermarsi. I rialzisti stanno spingendo la criptovaluta da settimane e, soprattutto nel corso dei primi giorni di aprile, ne stanno accelerando il prezzo. C’è da considerare che, visti gli equilibri tra chi vuole fare tendere il valore al rialzo e chi, invece, tende al ribasso, rimane un investimento potenzialmente esente da perdite.
Polkadot
it.investing.com
Polkadot, scambiata oggi a 43,23 dollari, è sostenuta da una comunità molto attiva, che l’ha eletta a criptovaluta di riferimento e attorno alla quale sta sviluppando diversi progetti. Il fondo asiatico di criptovalute Spartan Black ha scommesso, già dal 2020, sul fatto che Polkadot può entrare nell’Olimpo per valore di capitalizzazione.
Eos
it.tradingview.com
In una manciata di ore è passata da 5,60 dollari a 6,25 dollari, con un balzo verso l’alto molto vicino all’11%. Dopo un’attività febbrile interrotta bruscamente a marzo, ora gli investitori stanno ritornando sulla criptovaluta nata nel 2017 con l’obiettivo di diventare la prima blockchain commerciale. Sta conoscendo andamenti positivi dallo scorso 25 marzo, un rally che può continuare anche nelle prossime settimane.
La sede di Google a Berlino - TOBIAS SCHWARZ/AFP via Getty Images
Un conto è lavorare da remoto quando lo fanno tutti, o quasi: altra storia è mantenere le nuove abitudini quando il mondo si dirige verso il cosiddetto “new normal”, che per certi versi sembra assomigliare sempre più al vecchio sistema. Il lavoro agile rischia di diventare un ricordo, e a guidare quella che appare una clamorosa marcia indietro sono proprio le grandi multinazionali del tech, finora considerate all’avanguardia nell’adozione di formule di lavoro flessibile.
Dipendenti negli uffici di Google a New York City – Spencer Platt/Getty Images
Lavorare da casa, o comunque da remoto in qualsiasi città del mondo, resterà invece un’ipotesi irrealizzabile per la maggior parte dei dipendenti di Google. In una lettera inviata ai dipendenti la settimana scorsa, il capo del personale Fiona Cicconi ha rivelato la prossima strategia di Big G: dal primo settembre partirà ufficialmente il piano di rientro in ufficio. Chi vorrà lavorare da remoto per più di 14 giorni all’anno dovrà presentare formale richiesta, per un periodo fino a 12 mesi, e solo le istanze presentate da chi dimostrerà di trovarsi in “circostanze eccezionali” saranno accolte. “Crediamo fermamente che vedersi di persona, stare insieme, avere un senso di comunità sia molto importante quando si devono risolvere grandi problemi e creare qualcosa di nuovo. Ma pensiamo di aver bisogno di creare più flessibilità e più modelli ibridi”, ha spiegato il ceo Sundar Pichai. In ogni caso i dipendenti di Google dovranno risiedere “a breve distanza” dagli uffici, cioè in località raggiungibili con uno spostamento da pendolari. Vale a dire che, anche se ci sarà maggiore flessibilità rispetto al pre pandemia, molti di loro dovranno rientrare in ufficio, dove troveranno “molte cose diverse da come le ricordate”, ha spiegato Cicconi, ma anche “pasti, snack e altri benefit” per rendere più agevole il rientro, come la campagna Dooglers che consente ai lavoratori di portarsi dietro il cane.
Un approccio in controtendenza rispetto agli annunci di altre big tech, o forse no. Prendiamo a esempio il caso delle dichiarazioni di Jack Dorsey, fondatore di Twitter, che lo scorso maggio aveva annunciato che i dipendenti del social cinguettante avrebbero potuto “lavorare da casa per sempre”. Parole che molti avevano visto come il manifesto di una nuova Silicon Valley, con uffici popolati solo da una piccola parte di dipendenti essenziali e una forza lavoro completamente “agile”, distribuita in tutto il mondo. Come osserva la Bbc, in realtà le frasi usate da Dorsey e da altri dirigenti, se analizzate con attenzione, raccontano un’altra storia. Lo stesso numero uno di Twitter ha infatti precisato che potranno lavorare da casa i dipendenti che si trovano “in un ruolo o in una situazione che glielo permetta”: una clausola non da poco.
Il cofondatore e ceo di Twitter Jack Dorsey – PRAKASH SINGH/AFP via Getty Images
E quasi tutti i modelli di lavoro “flessibile” o “ibrido” annunciati dalle grandi aziende della Silicon Valley si prestano a più di un’interpretazione. “Flessibile” può voler dire tutto e niente, dai venerdì liberi a una diversa relazione con il lavoro, ma nell’ambito di un orario canonico. O una soluzione come quella di Microsoft, il cui nuovo standard prevede il “lavoro da casa per meno del 50% del tempo per la maggior parte dei ruoli”: meno del 50% è una percentuale che abbraccia un ampio spettro di soluzioni, alcune molto diverse tra loro. Ancora più chiaro il messaggio mandato da Amazon ai dipendenti, sempre la scorsa settimana: “Il nostro piano è tornare a una cultura basata sulla presenza in ufficio, che crediamo ci consenta di inventare, collaborare e imparare insieme in maniera più efficace”. Non esattamente quello che si chiama un endorsement per il lavoro agile. Sull’altra sponda si colloca invece Spotify, che ancora a febbraio aveva dichiarato che i dipendenti potevano “lavorare sempre in ufficio, sempre da remoto o scegliere un mix tra le due modalità”, in proporzioni che “ogni lavoratore potrà decidere in accordo con il suo manager”, pur ammettendo che “alcuni aggiustamenti saranno possibili in corso d’opera”.
Lavoro da remoto – Sean Gallup/Getty Images)
La riapertura degli uffici, almeno al 50% della capacità, sarà infatti il grande test per la tenuta del lavoro da remoto. Quando le riunioni saranno svolte per metà in presenza e per metà in videocall, il sistema funzionerà? E quando alcuni lavoratori potranno interagire con capi e colleghi di persona, gli altri saranno svantaggiati? Interrogativi per i quali manca ancora una risposta, e che probabilmente sono alla base della clamorosa retromarcia delle big del tech, esempi di innovazione ai quali il resto del mondo guarda sempre con interesse.
Il ministro Orlando studia la norma. Lega, Fi e Pd spingono per arrivare a settembre
di Claudio Tucci, 18 apr 2021
La normativa sul lavoro agile emergenziale in scadenza a fine aprile verrà prorogata.
Dopo un approfondito dibattito politico, raccogliendo anche le proposte-appello delle parti sociali, il governo è pronto a presentare nel prossimo decreto Sostegni una norma che sposta in avanti il termine (a oggi fissato al 30 aprile) che, causa coronavirus, consente ai datori di lavoro di poter attivare lo smart working con un atto unilaterale, senza cioè dover sottoscrivere un accordo individuale, come invece previsto dalla legge ordinaria, la n. 81 del 2017 che, in assenza di proroga, tornerebbe vigente tra un paio di settimane, costringendo le aziende a nuovi adempimenti burocratici per milioni di lavoratori.
Obiettivo 30 settembre
La norma che dispone una nuova proroga delle regole semplificate sullo smart working è in corso di scrittura al ministero del Lavoro (prima del varo ci sarà un passaggio con le parti sociali); e, da quanto si apprende, la proroga dovrebbe viaggiare di pari passo con il decorso della pandemia e la ripresa su larga scala delle attività produttive, indicativamente prevista per dopo l’estate, quando secondo le stime dello stesso esecutivo si dovrebbe raggiungere una diffusione delle vaccinazioni effettuate tale da poter far ritenere ragionevolmente raggiunta l’immunità di gregge. L’ipotesi su cui spinge una larga fetta della maggioranza, da Fi alla Lega e buona parte del Pd, è una proroga delle regole semplificate sullo smart working almeno fino al 30 settembre per assicurare alle imprese un arco temporale adeguato per disciplinare il lavoro agile tra i propri dipendenti.
La platea dei lavoratori interessati
Il tema è delicato, soprattutto, come detto, per i numeri in gioco. Secondo le prime analisi dell’Osservatorio del Politecnico di Milano e di Randstad Research, nei prossimi mesi, il lavoro agile potrebbe interessare una platea tra i 3 e i 5 milioni di lavoratori, confermandosi uno strumento che piace alle persone, e che ha saputo, durante la fase acuta della pandemia, coniugare produttività, sicurezza e conciliazione vita-lavoro (attualmente, ha ricordato l’Inapp, sono in lavoro agile oltre 5 milioni di addetti, erano 6,5 milioni durante il primo lockdown - nelle grandi imprese il 54% dei dipendenti presta la propria attività, in tutto o in parte, “da remoto”). «Mi aspetto che la proposta normativa allo studio del governo preveda la proroga del lavoro agile almeno fino al 30 settembre - spiega la sottosegretaria al Lavoro, Tiziana Nisini -. Come Lega abbiamo preparato anche un emendamento per chiarire che la cassa integrazione possa essere concessa in continuità con le 12 settimane di ammortizzatore Covid-19 previste dalla manovra 2021, senza quindi buchi temporali, e dando, contemporaneamente, più tempo alle aziende di presentare la domanda».
Le richieste di proroga
A spingere per almeno il 30 settembre è anche Paolo Zangrillo, membro della commissione Lavoro della Camera, che al decreto Sostegni 1 aveva presentato un apposito emendamento, poi trasformato in ordine del giorno vincolante per il governo. La norma di proroga oggi allo studio del ministero del Lavoro conferma questo impegno.
Aperture anche dal Pd. «È necessario dare più tempo alle imprese per formalizzare gli accordi individuali e disegnare il lavoro agile post emergenza - ha detto la neo presidente della commissione Lavoro del Pd, Romina Mura - dopo che nei giorni scorsi la capogruppo dem a Montecitorio, Debora Serracchiani, si era espressa a favore di una proroga delle regole semplificate dello smart working -. Successivamente - ha proseguito Mura - occorrerà aprire un confronto tra le parti sociali per definire le nuove regole dello smart working».
Il gruppo di lavoro
L’appello è stato subito raccolto dal ministro del Lavoro, Andrea Orlando, che ha incardinato un gruppo di lavoro (che si riunirà a metà settimana) per iniziare a sistematizzare lo strumento, e ad aggiornare la cornice normativa (nei giorni scorsi la commissione Lavoro della Camera ha approvato, su input del ministero del Lavoro, una norma che riconosce il diritto alla disconnessione dalle strumentazioni tecnologiche e dalle piattaforme informatiche per i lavoratori agili, nel rispetto degli accordi tra le parti e fatti salvi eventuali periodi di reperibilità concordati). Sempre su pressing del ministero del Lavoro, nel decreto Sostegni 2 è pronta anche una norma per i giovani Neet, che prevede un fondo per la “scuola dei mestieri” per consentire alle aziende che prevedono alto tasso di specializzazione di fare scuole per ragazzi nei principali settori della manifattura, tessile, cantierisica, solo per fare alcuni esempi.
Certe spese non ci sono (la benzina, il caffè al bar, la metro) ma altre (le bollette, i caffè a casa, la carta igienica) aumentano: nei Paesi Bassi si è fatto qualcosa
14 ott 2020
Nei Paesi Bassi i dipendenti pubblici riceveranno quest’anno un bonus di 363 euro che, come ha spiegatoRTL Nieuws, è una forma di compensazione per le maggiori spese domestiche a cui si deve sottoporre chi, per via della pandemia da coronavirus, deve lavorare da casa. Altri paesi stanno pensando di fare qualcosa di simile e, con ogni probabilità, è qualcosa di cui si parlerà anche in Italia, dividendo chi ritiene che il lavoro da remoto comporti maggiori spese domestiche e chi invece pensa che permetta di guadagnare tempo e risparmiare soldi, e che quindi non serva nessun bonus.
Il bonus per i dipendenti pubblici olandesi che lavorano da casa – e continueranno a farlo, visto il nuovo parziale lockdown appena deciso – è arrivato durante le negoziazioni del nuovo contratto collettivo ed è una diretta conseguenza di uno studio fatto da NIBUD, un istituto nazionale che «fornisce informazioni e consigli di carattere finanziario per famiglie» ed è in parte finanziata anche dal governo.
A luglio NIBUD aveva stimato che lavorare da casa costasse in media due euro al giorno in più a ogni lavoratore, quindi – senza contare sabati e domeniche – un po’ più di 40 euro al mese e circa 500 euro l’anno. La stima era stata fatta prendendo in considerazione i consumi energetici, idrici e di gas, i caffè e le altre bevande consumate, “l’ammortamento di sedia e scrivania” e anche l’uso di carta igienica. In altre parole, tutte le cose il cui consumo aumenta quando si passano a casa le 40 ore circa che si trascorrerebbero al lavoro.
Con riferimento alle cifre di NIBUD, RTL Nieuws ha parlato di calcoli secondo i quali «chiunque beva sei tazze di tè o caffè al giorno, spende 70 centesimi», di un po’ più di un euro al giorno per il riscaldamento degli ambienti domestici in cui si lavora e anche di «0,025 euro al giorno per la carta igienica». Non sono invece stati calcolati i costi di computer, telefoni o altri strumenti più propriamente lavorativi perché quelli, nei Paesi Bassi così come in Italia, dovrebbero già essere previsti per chi lavora da casa.
A chi propone di pagare di più chi lavora da casa, si contrappone chi sostiene che non sia necessario perché lavorando da casa si risparmia. Nei Paesi Bassi questa è la posizione della AWN, un’associazione di datori di lavoro che ha fatto notare come certe aziende continuano nonostante tutto a sostenere spese di altro tipo, per esempio per le auto o i telefoni aziendali. Com’è ovvio, comunque, è un discorso che è molto difficile affrontare in termini generali, senza considerare le differenze che esistono tra un lavoro e l’altro, e quindi tra un lavoratore e l’altro.
Di forme di compensazione per le spese sostenute lavorando da casa – o per regolare meglio gli obblighi dei datori di lavoro verso la fornitura di strumentazioni adeguate per il lavoro da casa – si sta parlando, come ha scrittoReuters, anche in Spagna, in Germania e nel Regno Unito, ma nessun paese è per ora più avanti dei Paesi Bassi sulla questione.
Intanto, si discute anche di come le aziende stesse potrebbero o dovrebbero cambiare i “benefit” per i loro dipendenti: CNN, per esempio, ha citato casi di aziende che offrono servizi di lavanderia porta a porta (si manda qualcuno a casa del dipendente per prendere i vestiti sporchi e riportarglieli lavati) o anche maggiori offerte per i lavoratori con figli. Il Wall Street Journal, invece, ha raccontato come Microsoft stia pensando di aggiungere a Teams, software di chat e strumenti per la collaborazione in ambito aziendale, la possibilità di fare un “virtual commute“, che vorrebbe dire prendersi, prima e dopo il lavoro vero e proprio, un po’ di tempo per pensare con più calma alla giornata lavorativa che sta per iniziare e a quella appena finita: qualcosa di simile a quello che molti pendolari fanno (o facevano) andando e tornando dal lavoro.
Lo smart working ha un enorme impatto anche sui Comuni, dal fronte del gettito fiscale ai trasporti pubblici, dal fenomeno della migrazione a quello immobiliare e ambientale.
Dopo aver analizzato gli effetti dello smart working sui dipendenti e sulle aziende, oggi passiamo a fare un’analisi riguardo a come esso impatterà a livello comunale.
Perché è logico che un tale sconvolgimento delle abitudini lavorative e produttive non può non avere ripercussioni, anche profonde, sui diversi aspetti di una comunità.
Affrontiamo l’argomento suddividendo questo approfondimento in più paragrafi, ognuno dei quali va ad esaminare un diverso aspetto coinvolto nel processo.
1) Gettito fiscale
La diffusione del telelavoro, a livello di introiti comunali, prenderà due differenti pieghe: nei Comuni più piccoli di provincia sarà una vera manna dal cielo mentre per le grandi città sarà un problema molto grosso.
Lo smart working avvierà diversi cambiamenti nelle abitudini lavorative dei dipendenti e nella gestione delle aziende. Le persone tenderanno a spostarsi nei Comuni più piccoli e tranquilli lontano dai grossi centri urbani, mentre a livello aziendale inizierà un rimpicciolimento dei cespiti che potrebbe sfociare nella conclusione di tenere solo un ufficio ad ore in centro e tutto il resto alienato, oppure potrebbero optare per spostarsi lontano dalla città dove vi sono costi di gestione più bassi e tenere in centro solo un ufficio di rappresentanza.
Questo però si traduce in un calo vistoso del gettito fiscale delle città.
Se le aziende si spostano in provincia e le sedi cittadine si restringono, con essi si restringono anche le imposte e le tasse comunali che esse pagano. Inoltre, quando questo fenomeno diventerà consistente molti immobili saranno costretti a cambiare destinazione d’uso, che da uso ufficio passerà probabilmente ad uso abitativo.
Anche questo farà abbassare gli introiti fiscali comunali. Ma non finisce qui.
Il minor numero di lavoratori che frequenteranno la città renderanno superflue molte attività il cui core business prevedeva l’erogazione di servizi a quest’ultimi. Vedesi ad esempio i bar, fast-food, le trattorie e tutte quelle attività tipicamente frequentati da lavoratori in pausa pranzo, o mentre sono intende ad effettuare il trasferimento casa/lavoro.
Certo, qualcuno di loro modificherà l’attività per renderla attrattiva la sera. In pratica farà in modo di modificare il proprio pubblico target di riferimento, ma quelle dei quartieri più periferici difficilmente potranno riuscire nell’intento e, alla fine, in molti saranno costretti a chiudere, e con esso il Comune perderà una parte dei suoi proventi fiscali.
Dall’altro lato, però, i piccoli Comuni di provincia vedranno aumentare la popolazione e di conseguenza aumenterà anche la domanda di beni e servizi. Questo comporterà un probabile aumento delle dimensioni delle attività commerciali site in questi piccoli centri di provincia, nonché l’apertura di nuove attività, che come conseguenza avranno quella di aumentare il gettito fiscale comunale.
Inoltre, con l’introduzione del processo di digitalizzazione dei processi, l’abbattimento dei costi produttivi che si otterrà grazie all’avvio della quarta rivoluzione industriale permetterà di avviare tutta una serie di attività che mezzo secolo fa erano state sbattute fuori dal mercato dallo sviluppo delle PMI.
Queste attività saranno delle micro-aziende, quasi sempre a gestione familiare, che porteranno in auge una produzione estremamente geo-localizzata a filiera corta o cortissima ma che in ogni caso genererà un ulteriore gettito fiscale per i piccoli centri di provincia.
2) Costi dei servizi e trasporto pubblico
L’altra faccia della medaglia è rappresentato dalle spese che i Comuni devono sostenere per lo svolgimento delle varie attività comunali. Anche in questo caso la ripercussione sulle casse comunali sarà differente rispetto alle dimensioni del centro urbano.
Le grandi città, che fino ad oggi hanno visto una concentrazione di attività lavorative e commerciali nel loro territorio, hanno anche sviluppato adeguati sistemi di trasporto pubblico che permettessero ai lavoratori di recarsi nei loro posti di lavoro, nonché tutta una serie di servizi necessari per sorreggere in loco una grande mole di cittadini.
In realtà questa affermazione andrebbe calibrata all’effettiva realtà dei fatti, in quanto molte città, che pur hanno un volume di pendolari enorme hanno un’offerta di mezzi pubblici e di servizi alla cittadinanza a dir poco carente. Le città hanno un sistema di trasporto pubblico e di servizi, seppur sottodimensionato, sicuramente di dimensioni tali da differenziarsi ampiamente dai centri urbani di provincia.
Questi servizi hanno un costo di gestione notevole che viene ammortato, spesso solo parzialmente, dalla vendita di biglietti e abbonamenti nel caso del trasporto pubblico, oppure mediante un costo calmierato per gli altri servizi.
Le grandi città, che hanno anche i sistemi di trasporto più ramificati e costosi da gestire, vedendosi ridurre di molto il volume dei passeggeri subiranno una contrazione notevole degli incassi, un grosso problema per le casse comunali. Dovranno continuare a manutenere tutto l’arredo urbano, il verde pubblico e quant’altro ma potendo usufruire di un gettito fiscale inferiore rispetto a prima.
Ma questo che cosa comporterà?
In futuro si noterà quasi sicuramente un abbassamento del livello dei servizi, come ad esempio dei mezzi pubblici con una frequenza inferiore, arredo urbano che tenderà a degradarsi e non essere più manutenuto, eccetera.
Di conseguenza, questo porterà ad un aumento del traffico veicolare dovuto a quei dipendenti che per vari motivi lavorano in aziende che non applicano lo smart working ma che troveranno via via meno pratico usare i mezzi pubblici o avranno timore di girare a piedi.
Se non si interverrà con un apposito trasferimento di risorse finanziarie dal livello statale a quello comunale che va ad appianare il calo dei gettito fiscale locale la situazione potrebbe scappare di mano come in quelle città americane stile Detroit, diventate nel tempo un vero e proprio inferno.
Di contro, le piccole località di provincia aumenteranno il proprio gettito fiscale. Avranno sì un aumento delle spese di gestione, ma spesso questo aumento sarà inferiore all’aumento degli incassi. Detto più semplicemente: da un lato avranno un aumento del gettito fiscale ma dall’altro aumenteranno anche alcune spese che devono affrontare, come quelle necessarie per predisporre un maggior numero di asili, scuole elementari, maggiore manutenzione dell’arredo urbano, eccetera. Tuttavia, le spese che aumentano potrebbero essere inferiori rispetto ai potenziali maggiori incassi che otterranno, e questo comporta un miglioramento economico nella gestione dei flussi di cassa.
In un certo qual senso, più il Comune è piccolo migliori saranno i conti pubblici nel loro futuro.
3) Migrazioni
Ovviamente, il ridimensionamento delle imprese se non addirittura lo spostamento fisico in un’altra zona della nazione provocherà automaticamente una migrazione dei cittadini residenti nelle grandi città verso i Comuni della provincia o verso il Sud.
Se fino ad ora tutti cercavano di vivere il più vicino possibile ai grossi centri urbani in modo da ridurre il disaggio di trasferta casa/lavoro, adesso le cose tenderanno a ribaltarsi.
Le città che prima erano quelle che possedevano un maggior numero di attività economiche vedranno nel tempo un drastico calo dei residenti. Si sta già notando questo fenomeno in città come Londra, New York e Parigi, ma sicuramente il fenomeno inizierà presto anche nelle grandi città italiane.
Addirittura nella grande mela si stima che ci sia, al momento, una migrazione verso i piccoli centri e verso gli Stati del Sud stimata in 100 mila abitanti all’anno. Sono tantissimi ed è una cosa che non accadeva più dalla depressione degli anni ’30.
Oltre che alle questioni viste prima, come l’impatto sul gettito fiscale comunale, sull’erogazione dei servizi e i costi annessi, un calo del numero di abitanti - per di più se esso avviene in tempi rapidi, - comporta uno sconquasso a livello sociale ed economico.
Cose simili non sono una novità e durante il XX secolo sono accadute più volte in più nazioni. Quello che accade è un crollo del reddito medio degli abitanti della città, che porta con sé un automatico aumento della micro-criminalità e la trasformazione di tutto il centro urbano in una specie di grosso ghetto.
L’esempio più lampante è la già citata città di Detroit, che ad un certo punto ha visto la chiusura di gran parte delle fabbriche e una drastrica riduzione dell’indotto legato al mondo dell’automobile, innescando una migrazione dei suoi abitanti verso altri lidi in cerca di fortuna.
Hanno abbandonato la città le persone più qualificate, che potevano facilmente ricollocarsi altrove, ma sono rimaste in loco tutta quella massa di persone che prima lavorava nelle posizioni lavorative di bassissimo profilo e che non ha alcuna possibilità di reinventarsi o ricollocarsi da altre parti.
A questo punto, andata via la parte più produttiva della città, i meno produttivi si sono ritrovati in condizioni economiche disperate e si sono dovuti adattare per sopravvivere. Cose di questo tipo potrebbero accadere, in prospettiva, negli attuali grossi centri urbani d’Italia.
Se noi consideriamo che i lavori che verranno maggiormente telematizzati sono quelli da ufficio e di concetto, e quindi a più alta concentrazione di qualifiche, e se aggiungiamo che le new-entry provenienti dall’estero sono semi-analfabete e clandestine, si può già fare una proiezione plausibile di cosa accadrà in futuro.
Ci ritroveremo con grossi centri urbani che piano piano si spopoleranno di persone qualificate e si popoleranno di persone di basso rango sociale e culturale. Queste ultime saranno impossibilitate a integrarsi in un mondo lavorativo fondato sulla digital economy, in quanto non sufficientemente qualificate a svolgere questo tipo di mansioni, ed inoltre sono anche tagliate fuori dall’apertura di micro-aziende locali di produzione artigianale o a filiera corta.
In pratica, l’essere giovani, virguti e possedere due braccia, in futuro, non servirà quasi a nulla perché tutta la produzione ruoterà intorno alle idee, alla cultura, all’automazione e all’ingegno.
4) Ambiente
Un calo della popolazione nei grossi centri porterà anche delle buone notizie. La principale sicuramente riguarda l’abbassamento dei tassi di inquinamento, che è notoriamente un problema legato ai grandi centri urbani.
Ricorderete sicuramente le vecchie strategie delle targhe alterne, l’uso del car pooling, l’abbassamento delle temperature degli edifici in inverno, eccetera.
Se diminuisce la popolazione si ottengono i medesimi benefici automaticamente. Meno persone significa meno spostamenti, così come meno ambienti da climatizzare. Si dovrebbe quindi notare un calo di emissioni di CO2 e delle pericolose polveri sottili tipicamente legate al riscaldamento domestico.
Tuttavia occorre anche considerare che le persone non spariscono nel nulla, e quindi tendenzialmente continueranno a inquinare, ma da un’altra parte. Se si spostano lungo tutto il territorio anche l’inquinamento si diluirà lungo tutto il territorio.
Occorre però considerare altri aspetti: innanzitutto molti lavori diventando telematizzati non necessiteranno più uno spostamento quotidiano, e quindi ci sarà sicuramente un calo di emissioni dovuto all’utilizzo delle automobili e anche per via del minor utilizzo dei mezzi pubblici.
Inoltre, vivere in centri urbani più piccoli permette di compiere molte mansioni domestiche quotidiane senza necessità di usare un’auto. Pensate ad esempio a fare la spesa, accompagnare i figli a scuola o andare in palestra. In piccoli centri urbani si può spesso fare tutto a piedi, o in ogni caso, in genere è sicuro spostarsi in bici anche considerando le distanze estremamente contenute.
Di contro, aumenteranno notevolmente gli acquisti online e di conseguenza le consegne di merci per posta, il che si traduce in furgoni dei corrieri che viaggiano in lungo ed in largo per tutta la rete stradale nazionale. Questo produce un sicuro inquinamento, tuttavia un furgone che gira per diversi comuni a consegnare colli inquina meno rispetto a tutti i singoli acquirenti che autonomamente andavano a comprare i prodotti recandosi tutti in un centro commerciale.
Un altro aspetto da considerare è sicuramente quello dei riscaldamenti. Infatti, rimanendo più a lungo dentro casa aumenterà sicuramente la componente dell’inquinamento domestico. Se però da un lato è sicuramente vero che tale inquinamento aumenterà statisticamente in modo considerevole, anche per via degli immobili che fuori dai grossi centri sono dimensionalmente più grandi, occorre anche dire che gli immobili in zone meno urbanizzate si possono far diventare facilmente a impatto zero o comunque diminuirlo notevolmente.
Facile è installare pannelli solari fotovoltaici o termici, coibentare l’esterno con un cappotto termico, modificare gli interni installando riscaldamenti a parete o a pavimento, eccetera. Cose che teoricamente si possono fare anche negli alloggi in centro, ma siccome sono in genere condominiali non è mai una cosa così agevole avviare modifiche di questo tipo quando ci sono diversi punti di vista e diversi redditi tra gli abitanti nello stesso edificio.
5) Immobiliare
Vista l’importanza che riveste il possesso di immobili in Italia, come non focalizzarsi sul settore ed in particolar modo sull’investimento immobiliare in una società di lavoratori che via via verranno telematizzati.
In futuro osserveremo un calo della domanda di immobili, sia ad uso abitativo che ad uso lavorativo, che coinvolgerà tutti i grandi centri urbani. Questo si tramuterà in un calo delle quotazioni, che in alcuni casi spingerà i proprietari degli stessi a variarne la destinazione d’uso per attutire l’impatto economico negativo e recuperare il recuperabile.
Tuttavia, il potenziale rientro dei lavoratori telematici nei propri luoghi di origine farà aumentare il valore agli immobili dei piccoli paesi di provincia. Inoltre, molti potrebbero cercare case più comode fuori porta dando linfa ai costruttori edili che inizieranno a costruire gli immobili secondo le nuove esigenze.
Tale sccenario potrebbe rilanciare anche un’economia basata sull’adeguamento ecologico di vecchi immobili, oppure le attività legate al cambio di destinazione d’uso degli immobili cittadini o adeguarli alle nuove esigenze.
6) Università e studenti
Un ultimo aspetto è quello che riguarda l’impatto delle attività telematiche a livello universitario. Infatti, le grandi città sono in genere anche delle città universitarie ed hanno una parte considerevole dell’economia locale che ruota attorno agli studenti universitari.
Le Università vedranno, adesso, una spinta notevole verso la formazione a distanza. Non solo per via degli strascichi legislativi che lascerà la gestione della pandemia ma anche per via dei notevoli tagli che i governi dovranno effettuare sulle spese, il cui fine sarà quello di rientrare il prima possibile all’interno dei parametri europei per la stabilità economica.
Fra un po’ di tempo potremmo ritrovarci con gli studenti che dovranno scegliere tra continuare ad avere la possibilità di un’istruzione economica e alla portata delle famiglie italiane, ma che dovranno obbligatoriamente compiere la maggior parte del percorso a casa. Oppure, frequentare l’Università come in passato ma farlo privatamente, più o meno come accade negli Stati Uniti, dove le famiglie italiane saranno costrette a pagare delle rette che costerà non meno di 10 mila euro annui per le facoltà più economiche come quelle umanistiche e che potrà arrivare a 30 mila euro o più per alcuni indirizzi di ingegneria oppure per medicina.
Siccome in pochi si potranno permettere di spendere così tanto per l’istruzione, visto che qui non siamo negli USA che fin dalla culla i genitori mettono da parte i soldi per poi mandarli al college, quello che accadrà è che tutta un economia cittadina basata sugli studenti, evaporerà.
Scomparirà il business dell’affitto camere per studenti, così come tutte quelle attività commerciali che vendevano libri, le edicole, i locali tipici di ritrovo per studenti, eccetera.
Tra l’altro, uno spopolamento delle città dovuto alla “scomparsa” degli studenti universitari significa, anche, un innalzamento dell’età media dei suoi cittadini.
Questo si tramuta in un cambio delle logiche economiche che sorreggono il centro urbano stesso, nonché un cambiamento del core business delle attività attrattive della città che ne subirà l’influenza dovendo adattarsi ad un pubblico sicuramente meno frizzante ed incline alla movida rispetto a quello universitario.
D’altro canto, in una città che vede trasformare i propri posti di lavoro per via dello smart working si innescherà un ulteriore problema a carico degli studenti: grosse difficoltà a trovare lavoretti da fare per mantenersi gli studi e a trovare aziende in cui fare degli stage per arricchire il curriculum.
Diventerà teoricamente più facile lavorare da studente vicino casa in provincia che non in città.
Cos’è il
Vba? Cosa si può realizzare con questo linguaggio? Chi dovrebbe usarlo e
perché? Quali sono le basi del vba? Questa guida vba è un’introduzione al
linguaggio con cui possiamo realizzare automatismi per Excel.
Cos’è il 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.
Nel 2008
Microsoft ha abbandonato il visual basic per linguaggi più performanti. E il
Vba? Dopo 20 anni il vba è ancora presente e utilizzato direttamente e
indirettamente da centinaia di milioni di utenti nel mondo.
Nonostante
circolino da tempo voci sulla sua sostituzione per altri linguaggi, o perfino
sull’abbandono del Vba, Microsoft non ha mai accennato nulla a proposito e
difficilmente lo farà nel breve termine, soprattutto in considerazione delle
decine di milioni di clienti/utenti al mondo che usano il vba per sviluppare
macro.
Quale
differenza c’è tra il Visual basic e il Vba?
A livello
di linguaggio non ci sono differenze significative, se non quelle relative al
diverso ambito di lavoro. Il Vb era il linguaggio con cui si realizzavano
programmi per le vecchie versioni di Windows, il sistema operativo, mentre il
Vba è il linguaggio con cui si realizzano procedure che vengono usate
internamente al pacchetto Office.
Cos’è una macro?
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 della loro
esecuzione.
Tutti i
programmi di Microsoft Office hanno un motore interno che permette di eseguire
macro vba che possono interagire con tutti i programmi di office (es: una macro
su Excel può agire su un documento Word) e anche agire limitatamente su
programmi e file esterni.
In realtà
le macro non sono un’esclusiva di Microsoft Office. Questo è il più famoso, ma
solo uno tra software esistiti ed esistenti che prevedono la possibilità di
lanciare procedure per automatizzare attività. Come il Vba è solo uno dei
linguaggi che vengono o sono stati impiegati per farlo, anche se forse è il più
semplice e performante.
Ci sono o
ci sono stati numerosi 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 con cui creare macro in diversi
linguaggi in grado di agire sul sistema operativo e altri software (es:
AutoHotkey, AutoIt, iMacros, ecc).
Automatismi.
Procedure di comandi che realizzano automaticamente attività, elaborazioni,
eccetera.
In
particolare il vba permette di realizzare strumenti con cui:
1.automatizzare attività
operative e decisionali che gli operatori svolgono dentro Excel, allo scopo di
far risparmiare tempo all’utente;
2.realizzare nuovi
strumenti di elaborazione per l’ambiente di lavoro, classicamente nuove
funzioni che eseguono calcoli specifici e personalizzati;
3.realizzare nuovi
strumenti di gestione per l’ambiente di lavoro, per esempio finestre di dialogo
personalizzate, o controlli più evoluti con cui gestire gli automatismi e gli
altri strumenti del foglio di lavoro.
Perché
imparare il Vba?
Il Vba
viene studiato e usato da decine di milioni di utenti nel mondo per le seguenti
ragioni:
1.fa risparmiare tempo,
soprattutto a chi usa Excel per molte ore alla settimana;
2.è il modo che il
produttore mette a disposizione per automatizzare Excel (a meno di non voler
realizzare componenti aggiuntivi da installare in Office); attenzione non è
l’unico modo in assoluto, per esempio puoi farlo anche con il python, ma il vba
è il modo offerto dal produttore e per ora è anche il più efficiente;
3.è un linguaggio piuttosto
semplice e intuitivo da imparare e utilizzare, anche per chi non è un
programmatore, si impara in pochi mesi e si ottengono risultati fin da subito;
4.è efficace e performante,
anche se relativamente efficiente e sicuro; con il vba si possono replicare
tutte le attività che si possono svolgere su excel e gli altri software di
Office, e altre che non possiamo realizzare direttamente.
Per
esempio, hai realizzato con Excel uno strumento con cui segui le tue spese, gli
investimenti finanziari, gli indicatori della tua attività professionale, con
cui controlli i risultati del tuo lavoro, del tuo team, del reparto o ufficio
che ti è stato affidato? Funziona bene, è efficace, ma spendi molto tempo per
gestirlo?
Realizzare
macro con il vba può essere una soluzione per ridurre in modo significativo il
tempo che spendi per gestire e aggiornare i tuoi fogli di lavoro. Non è
certamente l’unica e potrebbe non essere la migliore, per esempio in diverse
situazioni sarebbe consigliabile abbandonare Excel per un software dedicato, ma
se hai deciso di usare Excel e vuoi rendere più efficienti i tuoi fogli di
lavoro allora le macro sono il più efficace degli strumenti con cui farlo.
I limiti del visual basic
Il visual
basic non è perfetto, anzi, ha una lunga lista di limiti e lacune, tra cui:
lentezza, minore efficienza, ridondanza, sicurezza, limiti nelle dimensioni
delle variabili e nella gestione della memoria, eccetera. Se sei un
programmatore lo sai meglio di me.
Ma ha senso
parlare di limiti per il vba?
Il visual
basic non sarebbe stato abbandonato da Microsoft per altri linguaggi se non
fossero superiori, più performanti, sicuri ed efficienti. Il vba invece è
dedicato alla realizzazione di routine all’interno dell’ambiente Office da
parte di non–programmatori di solito con obiettivi precisi e limitati, in
primis risparmiare tempo. È difficile che l’utente medio di Excel tocchi e
inizi a percepire i limiti del vba come ostacoli per raggiungere i propri
obiettivi.
Dove si
inserisce il codice Vba?
Le macro
vengono gestite attraverso il visual basic editor (Vbe), richiamabile dentro
Excel premendo Alt+F11 o dalla scheda sviluppo della barra multifunzione.
Il vbe è un
vecchio ambiente di sviluppo, rodato ed equipaggiato con gli strumenti che
servono alla scrittura e al debugging.
Ha diverse
lacune, ma non significative e in diversi casi compensabili seguendo le buone
pratiche o attraverso l’installazione di componenti aggiuntivi, anche
sviluppati da terze parti.
Ci sono
altri “ide”, ambienti di sviluppo integrati, ed editor esterni?
Certo, ci
sono alternative alla gestione del codice, dai vecchi strumenti microsoft per
il vb (es: VB6 e Vb.Net) agli editor multilinguaggio, ma li sconsiglio, perché
meno efficienti e perché alla fine dovrai sempre gestire le macro tramite vbe.
Il codice
va inserito in un modulo, un contenitore teorico che puoi immaginare come una
pagina bianca su cui scrivere i comandi delle routine.
I moduli
sono di diverso tipo e possono essere associati, per esempio alle pagine di
Excel, al foglio intero o alle maschere, per gestire le macro collegate agli
eventi relativi all’oggetto. Oppure i moduli possono essere standard, dove le
macro possono essere richiamate tramite controlli, per esempio pulsanti su
pagine o su maschere, o tramite gli strumenti predisposti di excel, come la
finestra “Macro”.
Infine,
esistono moduli di classe in cui vengono definiti nuovi oggetti, le loro
caratteristiche, le proprietà, i metodi che li riguardano, eccetera.
Questi sono
i tipi di moduli disponibili:
1.Modulo standard,
2.ThisWorkbook o Questa
cartella di lavoro,
3.Moduli pagina (sia sheets
che chart)
4.Moduli Form, o moduli
maschere,
5.Moduli di classe
Il codice
delle macro viene scritto tra due marcatori di inizio e fine delle macro,
diversi a seconda che stiamo realizzando routine o funzioni.
Funzioni e Subroutine
Il vba
distingue tra funzioni (Function) e routine (Sub). Le funzioni sono procedure
che ricevono dati, li elaborano e li restituiscono sotto forma di risultati.
Sono
identificati da un marcatore di inizio:
“Function
NOME_FUNZIONE(param1 As Tipo_param, …) As Tipo_Valore”
che indica
quali dati richiede e quali tipo di risultato restituirà, e uno di fine:
“End
Function”.
Le routine
sono procedure che eseguono azioni su oggetti e svolgono attività nell’ambiente
di lavoro. Sono definite da una dichiarazione iniziale:
“Sub
NOME_SUB()”
e una finale:
“End
Sub”.
Il codice
deve essere inserito all’interno dei marcatori, con precise eccezioni (es:
dichiarazioni di variabili di modulo o globali).
Le routine
possono essere definite come pubbliche (Public) o private (Private) a seconda
delle loro funzioni e utilità.
Una routine
dichiarata come privata (es: “Private Sub NOME_SUB()”) non sarà visibile da
dentro Excel, per esempio non sarà elencata nella finestra didialogo “Macro” o assegnabile a controlli su
pagina, ma sarà disponibile e richiamabile da altre routine del modulo.
Questa è
un’utile differenziazione per la gestione di macro modulari funzionali a un
progetto più grande o altri automatismi.
Il vba e i nomi
I nomi
delle routine, ma in generale tutti i nomi usati dal linguaggio Vba devono
rispettare regole precise.
In
particolare il nome delle macro:
1.può essere costituito da
lettere, numeri o caratteri di sottolineatura, e deve essere costituito da una
stringa di caratteri contigui,
2.può avere una lunghezza
massima di 255 caratteri,
3.non può iniziare con un
numero,
4.non può contenere spazi,
5.non può contenere
caratteri di punteggiatura (es: , .),
7.non può corrispondere
alle parole chiave riservate (Es: Sub, And, Or, Loop, If, Do, Len, Close, Else,
Select, etc) che fanno parte del Vba.
Se non si
rispettano le regole, sarà lo strumento di controllo della sintassi del vbe che
ci avvertirà della violazione di queste regole, evidenziando la riga con il
colore rosso, spostando il cursore e selezionando l’errore, facendo comparire
una finestra di dialogo che descrive l’errore.
Anche gli
altri nomi correlati al linguaggio hanno regole analoghe, per esempio quello
delle variabili, ma non le elencheremo in questa piccola guida vba.
Aldilà
delle regole che devono essere rispettate, consiglio sempre di assegnare nomi
parlanti e descrittivi delle funzioni, azioni, attività, eccetera.
Nel caso si
voglia usare più parole, il consiglio è separarle con un carattere
sottolineato, questo “_”.
Oppure
usare le maiuscolo per evidenziare l’inizio della parole della frase, per
esempio così: “NomeRoutine()”, o cosi: “NOMEroutine()”.
Il vba e l’inglese
Come sai o
avrai già intuito il vba è un linguaggio “anglosassone”, cioè è composto da
termini, oggetti, metodi, proprietà, funzioni espresse attraverso parole della
lingua inglese, in forma estesa o contratta.
Per
esempio: charts, worksheets, range, select, msgbox (message box, scatola dei
messaggi), application, delete, open, close, windows, eccetera.
È naturale
che sia così ed è anche un aiuto se conosci l’inglese, in quanto potrai
riconoscere più facilmente ruolo e funzione delle parole, facilitandoti nella
costruzione del tuo “vocabolario” e con la sintassi del linguaggio. Per
esempio, una dichiarazione come questa:
Può essere
letta o tradotto come: stampa il grafico “Fatturato” della pagina “Mensile” del
foglio “Report” di Excel.
Se non
conosci l’inglese avrai più difficoltà iniziale a costruirti il vocabolario e
ad associare alle singole parole il loro ruolo o funzione, ma da un altro punto
di vista ti darà l’occasione di apprendere un poco di inglese.
Come si scrivono le macro?
Il codice
sostanzialmente si crea in due modi:
1.usando il registratore di
macro di Excel, uno strumento apposito dall’uso intuitivo che legge le attività
svolte su Excel e le traduce nel corrispondente codice vba, realizzando macro
operative e poco intelligenti che però possono esseree utilizzate per
automatizzare i fogli Excel. Per approfondire l’argomento ti invito a leggere
la guida al registratore di macro di Excel professionale.
2.scrivendo il codice
attraverso la tastiera, direttamente nell’editor Vba con l’ausilio degli
strumenti descritti nella guida al visual basic editor.
Mentre il
primo modo è semplice, di fatto deleghiamo a uno strumento, il registratore di
macro, il compito di scrivere il codice, con risultati elementari, ma
utilizzabili, scrivere il codice richiede la conoscenza del linguaggio vba e
degli strumenti per lo sviluppo.
Apprendere
il vba richiede decine di ore di studio e molte decine anzi centinaia di ore di
applicazione, esperienza nella scrittura del codice.
Studiando
un linguaggio di programmazione, si impara che in realtà ci sono modi diversi
di scrivere il codice, per esempio puoi farlo riga per riga, oppure puoi
prendere codice realizzato in precedenza e adattarlo all’obiettivo presente,
oppure puoi lavorare con codice predisposto anche scritto da altri. Cosi come
ci sono strategie diverse per progettare e sviluppare il codice e perfino per
usare il registratore di macro. Approfondiremo questi argomenti con post
dedicati.
La struttura delle macro
Come
abbiamo visto le macro sono una sequenza di istruzioni e come tale hanno un
inizio, un corpo e una fine, ma non solo, essendo procedure operative le
routine hanno un preciso obiettivo, per esempio agire su uno o più oggetti di
Excel, partendo da condizioni iniziali definite e seguendo un ordine di
scrittura, una struttura logica che rispetti le regole della programmazione,
del linguaggio e dell’ambiente di lavoro.
Ci sono
macro composte da una sola o una manciata di righe di codice che eseguono
attività dirette e non hanno bisogno di altro, ma nella maggior parte dei casi
le macro evolute:
1.richiedono la
dichiarazione di una o più variabili, informazioni che devono essere utilizzate
più volte, elaborate, ecc;
2.possono richiedere la
verifica di una o più condizioni iniziali,
3.spesso richiedono
l’interazione con l’operatore per ricevere input (conferme, informazioni, o
decisioni),
4.possono richiedere il
controllo degli input, o delle condizioni di lavoro,
5.agiscono come necessario
per raggiungere l’obiettivo definito, seguendo un ordine logico preciso,
6.e per farlo possono
prendere decisioni basate sulle condizioni di lavoro,
7.se necessario comunicano
l’avvenuta esecuzione e i risultati,
8.gestiscono gli eventuali
errori imprevisti.
Tutte
queste attività e le altre che non ho elencato hanno una posizione nel codice,
devono rispettare un ordine preciso e le relazioni che esistono tra loro e
tutto questo definisce una struttura logica e teorica. Anzi una gamma di
strutture che seguiamo e replichiamo quando scriviamo il codice anche senza che
ce ne rendiamo conto.
Le strutture del codice
Conoscere
queste strutture, imparare a riconoscerle e usarle per gestire lo sviluppo del
codice ci semplifica la vita, aiuta a gestire e a standardizzare il nostro
lavoro con notevoli vantaggi.
Queste
strutture soprattutto sono di notevole aiuto ai principianti, danno loro la
giusta prospettiva, una falsariga da seguire nello sviluppo. È qualcosa di
analogo alle sequenze di mosse che nelle arti marziali i maestri fanno eseguire
agli allievi per comprenderne natura, limiti e possibilità. Ciò che deve essere
prima, ciò che può seguire dopo, qual è il risultato, l’efficacia e
l’efficienza del movimento, comprendere i limiti delle regole che dobbiamo
rispettare (il corpo umano, la fisica dei movimenti, eccetera).
Ma queste
strutture sono utili anche per i più esperti che vedono linguaggio e
programmazione come strumenti da usare nel modo migliore per ottenere il
risultato richiesto nel modo più efficiente.
Introduzione agli oggetti
Excel, Vba.
Excel è un ambiente di lavoro composto da oggetti e il linguaggio Vba
essenzialmente lavora su questi oggetti. Gli oggetti in Excel possono essere
visti come contenitori strutturati di dati, che possono contenere o essere
composti da altri oggetti, e che quindi hanno una gerarchia. Gli oggetti
possiedono numerose caratteristiche o proprietà, possono realizzare attività
grazie a un set di comandi chiamate metodi, e possono essere associati a
eventi.
Per esempio,
oggetti sono il foglio di lavoro, il pulsante di comando, le pagine, le
tabelle, gli intervalli di celle, i grafici, 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, tipo del grafico, nome della pagina,
ecc). Ogni oggetto ha una lista di proprietà che lo descrivono.
Cosa sono i metodi?
Sono le
funzionalità degli oggetti, cioè l’elenco delle azioni che l’oggetto può
compiere o può subire, per esempio l’apertura di un foglio, il suo salvataggio,
la selezione di una tabella, l’attivazione di una pagina, eccetera. Ogni
oggetto ha una lista di metodi che lo riguardano.
Cosa sono gli eventi?
Sono
momenti e situazioni generate da certe condizioni, conseguenze delle attività
dell’operatore, a cui è possibile associare metodi che modificano proprietà di
oggetti e non solo. Per esempio evento è l’apertura di un foglio excel,
l’attivazione di una pagina, la selezione di un oggetto, il clic del mouse su
un controllo e via dicendo.
Cosa sono le gerarchie di oggetti e gli insiemi
di oggetti?
Gli insiemi
sono gruppi di oggetti con le stesse caratteristiche, per esempio la pagina
“Dati” fa parte dell’insieme delle pagine del foglio di lavoro. Ogni volta che
possono esserci oggetti simili, allora si possono definire degli insiemi di
questi oggetti, dove i singoli componenti possono essere distinguibili e
richiamabili usandone il nome.
Si può
dichiarare il singolo oggetto dell’insieme indicandone tra parantesi il nome,
per esempio: “Workbooks(“Budget”) è il foglio Budget.
Cos’è la gerarchia degli oggetti?
La
gerarchia definisce il rapporto tra gli oggetti, cioè a quale oggetto più
“grande” appartengono o di cui fanno parte, quali oggetti contengono, o li
compongono. Puoi vedere la gerarchia come il rapporto dei diversi elementi di
una matrioska. Per esempio, la pagina di excel (worksheet) è un elemento
dell’oggetto foglio di lavoro (workbook) che è un elemento di Excel
(application). Application è l’oggetto più grande e di più alto livello che
contiene tutti gli altri.
Conoscere
gli insiemi e la gerarchia degli oggetti è importante per la comprensione e la
scrittura del Vba.
Riassumiamo
tutto con un esempio:
una pagina
di excel (worksheet) è un oggetto parte di un insieme di pagine (worksheets), contenute nel foglio di
lavoro (workbook), ed è composta e
contiene oggetti come intervalli di celle (range),
tabelle (listobject, pivottables, ecc) e grafici (chartobjects), per esempio. Tutti questi oggetti hanno una lista di
proprietà, per esempio 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à, come per esempio
aggiungere una pagina (worksheets.add),
selezionarla (worksheets.select),
copiarla (worksheets.copy) e via
dicendo.
Infine
l’oggetto, per esempio la pagina, dispone di eventi specifici (activate, change, ecc) a cui è
possibile associare codice vba, per esempio per aggiornare le tabelle pivot
contenute.
Come si scrive il codice?
Partendo da
questo, il codice che agisce sugli oggetti viene scritto come dichiarazioni che
descrivono l’oggetto, o un insieme di oggetti, e la gerarchia relativa, di cui
si modifica o richiama una proprietà, o su cui si esercita un metodo, per
esempio in questi modi:
1.Proprietà (es:
Activesheet.Name, mostra il nome della pagina attiva);
2.Metodo (es:
Activesheet.Delete, rimuove la pagina attiva);
3.Insieme(oggetto).Proprietà
(es: Application.Workbooks.Count, conta i fogli Excel aperti);
4.Insieme(oggetto).Metodo (es:
Worksheets(“Foglio1”).Activate, attiva la pagina “Foglio1”);
5.Insieme(oggetto).Proprietà
(es: Worksheets(1).Name, restituisce il nome della pagina con indice 1);
6.Insieme(oggetto).Metodo (es:
Workbooks.Close, chiude tutti i fogli di lavoro aperti);
7.Insieme(oggetto).Insieme(oggetto).Proprietà
(es: Worksheets(“Report”).Range(“A2:F40”).Font.Bold, imposta il grassetto
nell’intervallo di celle selezionato);
8.Insieme(oggetto).
Insieme(oggetto).Metodo (es: worksbooks(“Db Kpi
Prod”).Worksheets(“Dboard”).PrintOut, stampa la pagina dashboard);
Come? Tutti
questi modi? Come faccio a sapere quale usare, quando e come?
L’omissione degli oggetti padri e l’oggetto
attivo
Il modo
corretto per dichiarare un oggetto è in realtà:
Cioè
un’espressione che parte dall’oggetto che contiene tutti, cioè Excel
(application), per poi dichiarare gli altri oggetti fino a quello su cui vuoi
agire o di cui vuoi richiamare o modificare una proprietà. Per esempio per
riferirsi a un intervallo di celle preciso, la notazione corretta dovrebbe
essere:
In realtà
farlo ogni volta sarebbe una perdita di tempo, perciò il vba permette di
omettere gli oggetti se il codice si riferisce agli oggetti attivi. Cioè in
pratica si omette quasi sempre Application, ma anche tutti gli oggetti che
seguono se sono attivi.
Prendiamo
l’ultimo esempio, possiamo scriverlo solo come
Worksheets(“Dati”).Range(“C1:C10”) se ci stiamo riferendo a un range di una
pagina precisa (Dati) del foglio di lavoro.
Ma potremmo
scrivere solo Range(“C1:C10”) se siamo all’interno della pagina, o sarebbe
meglio dire se la macro verrà lanciata e agirà all’interno della pagina
mantenendola attiva, cioè senza cambiare focus o selezione.
L’oggetto padre attivo
Da un altro
punto di vista, sarebbe più corretto dire che quando Excel non trova
l’indicazione degli oggetti padre, interpreta il codice come se si riferisse a
quelli attivi.
Quindi è
importante quando progetti e scrivi il codice avere sempre chiaro il focus,
cioè quale foglio è o dovrebbe attivo.
Uno degli
errori classici dei principianti è dimenticarselo e far lavorare il codice
sulle pagine attive anche se non sono quelle su cui deve realmente agire.
Nel codice
vba in realtà ci sono oggetti specifici per indicare gli oggetti attivi (es:
ActiveWorkbook, ActiveSheet, Activecell, ecc) che però vanno usati con
attenzione e precisione. Per esempio, “ActiveSheet.Name” restituisce il nome
della pagina attiva, mentre “ActiveWorkbook.Save” salva il foglio Excel attivo.
In realtà
potresti omettere questi oggetti se ti riferisci a un oggetto figlio, per
esempio “ActiveSheet .Range(“C1:C10”)” e “Range(“C1:C10”)” sono equivalenti.
Questa
regola dell’omissione è generale, ma ha delle eccezioni nel caso di macro
inserite in moduli associati a oggetti, in particolare:
1.se ometti la pagina in
una macro in un modulo pagina (“sheets”), excel dedurrà che ti stai riferendo
alla pagina della macro e non a quella attiva;
2.se ometti il foglio nel
modulo foglio (ThisWorkbook), excel penserà che ti stai riferendo al foglio che
contiene la macro e non a quello attivo.
Quali sono gli oggetti principali di Excel e Vba?
Gli oggetti
fondamentali di Excel e vba sono i seguenti:
1.Application indica la
sessione di Excel, quindi tutti i fogli aperti. Di solito la vedi poco nel
codice, perché nella maggior parte dei casi si lavora su oggetti più piccoli e
come abbiamo visto viene omessa nelle espressioni degli oggetti. I richiami più
frequenti riguardano la modifica di solito temporanea di alcune proprietà come
DisplayAlerts, ScreenUpdating, Calculation, eccetera (es:
Application.DisplayAlerts sospende gli allarmi di excel, mentre
Application.ScreenUpdating sospende l’aggiornamento dello schermo).
2.Workbook rappresenta una
cartella di lavoro di Excel, ed è un elemento dell’insieme workbooks. Questo
oggetto contiene quasi tutti gli oggetti di Excel (pagine, range, celle,
colonne, tabelle, pivot, controlli, grafici, eccetera) e viene usato poco, soprattutto
nel caso di attività che coinvolgono più fogli di lavoro.
3.Worksheet rappresenta la
singola pagina excel che a sua volta contiene celle, colonne, righe, tabelle,
grafici, eccetera. In realtà worksheets descrive solo uno dei 4 tipi di pagine
supportate da Excel: pagina standard (worksheet), grafici (chart), pagina macro
(macro Xlm) e pagine di dialogo (finestra di dialogo Excel 5.0). Di fatto gli
ultimi due tipi sono caduti in disuso lasciando il campo ai soli Worksheet e
Chart. Worksheet fa parte dell’insieme Worksheets e Sheets e contiene tutti gli
oggetti della pagina, per esempio range, cells, colonne, righe, tabelle,
eccetera.
4.Range rappresenta un
intervallo di celle, quindi dalla singola cella, righe e colonne, fino a una
matrice di celle. È uno degli oggetti più richiamati, viene dichiarato come
Range(“CELLA”) per la singola cella, oppure “Range(“CELLA:CELLA”)” per
l’intervallo di celle. Per esempio: Worksheets(1).Range(“A1”).Value = “Titolo
della pagina” inserisce la stringa nella cella A1. È l’oggetto che possiede più
proprietà e metodi ed è più complesso di quello che appare a prima vista.
5.Chart rappresenta un
grafico o diagramma ed è parte dell’insieme Charts, ma anche dell’insieme
Sheets. Come worksheet è un oggetto “pagina”, ma invece di presentare celle e
oggetti incorporati, mostra solo un grafico specifico. È un oggetto poco
utilizzato rispetto a worksheet, ma è il modo più efficace per visualizzare un
grafico. Per esempio “Charts(1).Name = “Produttività” cambia il nome del
grafico 1, mentre “Charts(1).PrintOut” lo stampa.
6.ChartObject è un oggetto
che rappresenta anch’esso un grafico, ma incorporato nella pagina (worksheet)
ed è membro dell’insieme ChartObjects. I grafici sono strutture complesse e
sono caratterizzati da molte proprietà per gestirne i diversi elementi e le
loro caratteristiche. Quando i grafici sono installati nella pagina, per
esempio per realizzare dashboard o report, allora è necessario usare questo
oggetto.
7.ListObject rappresenta
una tabella Excel presente in una pagina (worksheets) ed è membro dell’insieme
ListObjects. È a sua volta caratterizzato da numerose proprietà che
identificano tra l’altro le molte parti di una tabella (es: listcolumns,
listrows, databodyrange, headerrowrange, totalrowrange, ecc), oltre che permetterne
di gestire strumenti e impostazioni (es: autofilter, showautofilter, ecc).
La gestione di questi oggetti richiede
precisione, ma è meno complessa di quello che può apparire. Per esempio,
“Worksheets(1).ListObjects(“ResaR1”). DataBodyRange.Select” seleziona il corpo
della tabelle senza intestazioni e totali,
“Worksheets(1).ListObjects(“ResaR1”). ShowTotals = True” mostra la riga dei
totali in fondo alla tabella.
8.PivotTable rappresenta
una tabella pivot installata in una pagina (worksheets) ed è membro
dell’insieme PivotTables. È l’oggetto da cui partire per scrivere codice che
gestisca le tabelle pivot in automatico. Considerato la facilità e la velocità
con cui si realizzano e si gestiscono, considerato che sono dinamiche e
interattive, ha senso gestire le pivot con il codice? Sì, per esempio per
preimpostarle in automatico, per copiarle, modificarle e molto altro. D’altra
parte il codice per gestire le pivot può essere complesso e spesso si
preferisce non automatizzarle, o usare il registratore di macro per scrivere la
parte operativa.
9.Selection è un oggetto
speciale che memorizza o meglio indirizza all’oggetto selezionato con il metodo
Select. Di solito associato è a un intervallo di celle, viene ampiamente usato
per semplificare la scrittura del codice quando si deve intervenire
ripetutamente sulle proprietà della selezione, per esempio per impostare la
formattazione, valori e formule, ma può essere utilizzato per tutto. È
importante gestire con attenzione il focus.
Quali sono gli insiemi fondamentali?
Gli insiemi
fondamentali sono quelli composti dagli oggetti più comuni e basilari, in
particolare:
1.Workbooks che contiene
tutti gli oggetti Workbook aperti in Excel. Ricordo che si può dichiarare il
singolo oggetto dell’insieme indicando tra parantesi il nome (es:
Workbooks(“Dashboard”) ). Si può agire sull’intero insieme di fogli con i
metodi relativi, per esempio “Workbooks.Close” chiuderà tutti i fogli Excel aperti.
2.Worksheets è l’insieme di
tutti gli oggetti Worksheet nella cartella di lavoro specificata o attiva.
Usando i metodi relativi si può agire sull’intero insieme (“Worksheets.Add”
aggiunge una nuova pagina), o su un elemento specifico dell’insieme indicandone
il nome o il riferimento/indice, per esempio: Worksheets(“NOME”).Select, oppure
Worksheets(INDICE).Select porterà la pagina relativa in primo piano.
3.Sheets è l’insieme di
tutte le pagine del foglio di lavoro attivo o specificato e contiene sia
oggetti Worksheet, pagine standard, che Chart, cioè pagine che contengono
grafici e grafici incorporati. Vale quanto detto sopra per l’indicazione del
singolo oggetto e per l’applicazione dei metodi relativi (es: Sheets.PrintOut
stampa tutte le pagine, Sheets(“Report”).PrintOut stampa solo la pagina
“Report”).
4.Charts è l’insieme delle
pagine dedicate ai grafici (Chart), è parte dell’insieme Sheets appena
descritto ed è il cugino di Worksheets.
5.ChartObjects è l’insieme
dei grafici incorporati nella pagina e quindi parte di Worksheets, anche per
lui vale quanto visto finora su metodi e singoli oggetti. Per esempio
“Worksheets(1).ChartObjects.Delete” cancellerà tutti i grafici della pagina 1.
6.ListObjects è l’insieme
delle tabelle presenti nelle pagine Excel, quindi parte di worksheets, ed è
molto utile nella gestione automatica delle tabelle. Vale quanto detto finora.
7.PivotTables è l’insieme
delle tabelle pivot presenti nella pagina ed è l’analogo di ListObjects. Vale
quanto ripetuto finora. Per esempio “Worksheets(2).PivotTables.Count”
restituisce il numero di tabelle pivot presenti nella pagina.
Ora
passiamo alle proprietà.
Quali sono le proprietà più comuni?
Le
proprietà sono centinaia, alcune proprietà di certi oggetti hanno lo stesso
nome di altri oggetti, alcune esistono solo per quell’oggetto, mentre altre
sono presenti nella lista delle proprietà di decine di oggetti (es: select).
Questa breve lista è un estratto e vuole essere solo un esempio:
1.Name è forse la proprietà
più comune, tutti gli oggetti hanno un nome che può essere modificato o
assegnato. Alcuni oggetti ne hanno perfino due, per esempio le pagine
(worksheet) hanno un nome “indicizzato” dell’oggetto che è quello che appare
quando ne creiamo di nuove (Foglio1, Foglio2, ecc) e corrisponde al nome “etichetta”
finché non lo modifichiamo. Per esempio, ActiveWorkbook.Worksheets (“Foglio1”).
Name = “Dati”, modifica il nome della pagina da Foglio1 a Dati.
2.Value è una delle
proprietà più usate e ripetute nel codice, associata di solito a Range e Cells,
e usata per l’inserimento di valori nelle celle. Per esempio,
Worksheets(1).Range(“B2”).Value = 32, assegna il valore 32 alla cella B2.
3.Visible è una proprietà
con cui si può nascondere l’oggetto, di solito una pagina. Con
Worksheets(1).Visible = False si nasconde la pagina 1, con
Worksheets(1).Visible = True la si rende nuovamente visibile.
4.Formula è una proprietà
simile a Value, ma che invece di inserire un valore inserisce una formula con
notazione standard Excel. Per esempio, Worksheets(1).Range(“D1”).Formula =
“=SE(B2=“”; “”; B2)”, imposta la formula tra virgolette nella cella D1.
5.FormulaR1C1 è analoga
alla precedente, ma inserisce le formule con notazione R1C1. Per esempio,
Worksheets(1).Range(“D1”).FormulaR1C1 = “=SE(R2C2=“”; “”; R2C2)”.
6.Font è una proprietà di
Range che definisce il font impiegato dall’intervallo di celle relativo. Font è
anche un oggetto che contiene gli attributi dei font. Per esempio,
Range(“A1”).Font.Name restituisce il nome del font.
7.Count è una proprietà di
tutti gli insiemi di oggetti e restituisce il numero di oggetti relativi
presenti. Per esempio Workbooks.Count restituisce il numero di fogli excel
aperti, Worksheets.Count il numero di pagine presenti nel foglio attivo.
8.End è una proprietà di
Range e rappresenta la fine della regione di celle in cui è presente la cella
selezionata, in una delle 4 direzioni possibili. Equivale alla pressione di
Ctrl+Direzione. Per esempio, “Range(“A1″).End(xlDown).Select” seleziona l’ultima cella della
regione che contiene A1 (es: una tabella). Le costanti sono naturalmente xlUp,
xlDown, xlRight e xlLeft.
9.Offset è una proprietà di
Range che restituisce una posizione vicina alla cella selezionata, indicando
direzione e coordinate relative (riga e colonna). Per esempio,
Range(“A1”).Offset(1, 0).Select seleziona la cella A2.
10.Cells è una proprietà di
Worksheets, Range, Sheet e altri che non fa altro che restituire una cella. La
sintassi è Cells(riga, colonna), per esempio Cells(3, 5) corrisponde alla cella
E3. Può sostituire l’oggetto range nell’indicare le singole celle.
11.UsedRange è una proprietà
di Worksheet che identifica l’area di lavoro della pagina, cioè l’intervallo in
cui abbiamo agito, inserito, manipolato, modificato, eccetera. Per esempio,
ActiveSheet.UsedRange.Select seleziona l’area di lavoro.
12.DisplayAlerts una
proprietà di Application che ci permette di sospendere gli allarmi automatici
del sistema. Utile per evitare conferme inutili che bloccherebbero l’esecuzione
delle macro facendoci perdere tempo. È importante fare attenzione a come la
usiamo e dobbiamo ricordarci sempre di ripristinare gli allarmi di Excel prima
di chiudere la macro (Application.DisplayAlerts = False). Gli allarmi non sono
lì per caso.
Chiudiamo
qui questo assaggio delle proprietà.
So cosa
stai pensando: ma devo impararmi a memoria tutta sta roba? Ma sono centinaia di
termini associati con decine di oggetti e dove capire come funzionano uno alla
volta?
La risposta
è: sì. Punto. Il vba è un linguaggio e come una lingua devi studiare e
impegnarti finché non la impari.
Passiamo ai
metodi.
Quali sono i metodi più usati?
I metodi
sono le azioni, le attività che possiamo eseguire con e sugli oggetti, sono
molti, ma non come le proprietà, alcuni sono specifici di certi oggetti, altri
sono generali e condivisi da molti oggetti (es: select, copy, ecc). Questi sono
alcuni tra i metodi più usati:
1.Select è uno dei metodi
più diffusi tra gli oggetti (es: worksheet, cells, rows, columns, range, ecc).
Il metodo porta in primo piano la pagina, sposta il cursore sulla selezione,
evidenzia l’oggetto e lo rende richiamabile con Selection (es: Selection.
ClearContents cancellerà il contenuto delle celle selezionate). L’oggetto più
associato a questo metodo è Range, l’intervallo di celle (e i suoi “parenti”,
cells, rows, columns). Per esempio, Range(“A:A”).Select seleziona l’intera
colonna A.
2.Activate è il metodo che
porta in primo piano gli oggetti, usato di solito per Workbook e Worksheet, la
sintassi è semplicemente “Oggetto.Activate”. Per esempio,
Worksheets(“Report”).Activate porta in primo piano la pagina Report. È
opportuno sottolineare che Select e Activate sono due azioni diverse. Select
serve a selezionare uno o più oggetti per poter poi agire su di essi, mentre
Activate porta in primo piano l’oggetto indicato.
3.Add è il metodo usato per
creare nuovi oggetti come fogli di lavoro e pagine, es: Worksheets.Add. Il
metodo ha come sintassi: Add(Before, After, Count, Type), tutti gli argomenti
sono opzionali, cioè non necessari. Before specifica la pagina prima della
quale si desidera aggiungere il nuovo foglio, After dopo quale pagina si
desidera aggiungere il nuovo foglio, Count specifica il numero di fogli che si
vuole aggiungere, uno di default, Type specifica il tipo di foglio da
aggiungere (XlSheetType, xlWorksheet, xlChart, xlExcel4MacroSheet,
xlExcel4IntlMacroSheet o xlDialogSheet). Per esempio, ActiveSheets.Add Count:=3
aggiunge 3 nuove pagine.
4.Copy è un metodo che
copia un oggetto per crearne uno nuovo, o copia le sue proprietà per
trasferirle a un altro oggetto analogo. Per esempio, con
Worksheets(“Dati”).Copy After:=Worksheets(“Report”) crei una copia della pagina
Dati posizionata a destra di Report. Ma è un metodo usato spesso per copiare le
celle, valori e formati. Per esempio, “Worksheets(1).Range(“C1:D3”).Copy
Destination:= Worksheets(“MedieStoriche”).Range(A11)Range(A11)” copia le celle
indicate in una pagina diversa. Ti faccio notare che con un solo comando si può
copiare e incollare. Se non si indica la destinazione, allora l’oggetto verrà
copiano nella clipboard e avrà bisogno di un comando Paste per essere portato a
destinazione.
5.Paste quindi serve per
incollare quello che abbiamo salvato nella clipboard. Per esempio
Worksheets(“MedieStoriche”).Paste Destination:= Activesheet.Range(A11) incolla
quello che è stato copiato nell’esempio precedente.
6.Delete è il metodo per
eliminare o rimuovere gli oggetti, per esempio Worksheets(1).Delete rimuoverà
la pagina 1. Prima di farlo excel chiederà conferma con un’apposita finestra di
dialogo. Questa può essere evitata agendo sulla proprietà DisplayAlerts di
Application, per bloccare la funzionalità di Excel (Application.DisplayAlerts =
False).
7.Close è un metodo di
Workbook, preve alcuni parametri tra cui il più usato è Savechanges per gestire
il salvataggio. Per esempio, ActiveWorkbook.Close SaveChanges:=True chiude il
foglio salvando in automatico senza chiederlo.
8.Save è uno dei metodi
classici dei fogli di lavoro e dell’insieme relativo con cui si salva il foglio
di lavoro. Per esempio: Workbooks.Save salva tutti i fogli di lavoro aperti.
Simile ma più complesso è il metodo SaveAs che salva il foglio come un file
diverso e quindi richiede una serie di parametri, es: il nome del nuovo file.
9.PrintOut metodo di tutti
gli oggetti stampabili, stampa l’oggetto specificato con le impostazioni di
default o predefinite. Per esempio, ActiveSheet.PrintOut stampa la pagina
attiva, oppure, Charts.PrintOut stampa tutti i grafici.
10.ClearContents è un metodo
che cancella il contenuto delle celle selezionate, qualunque sia, formule e
valori. Per esempio Worksheets(1).Range(“A:A”).ClearContents, cancella la
colonna A intera.
11.Autofill è un metodo
dell’oggetto Range che riempie in automatico le celle dell’intervallo dichiarato
a partire dal contenuto di alcune celle. È l’analogo dello strumento di excel
che possiamo richiamare con un doppio clic sul quadratino in basso a destra
della selezione. Si può usare anche con il vba, per esempio:
Worksheets(1).Range(“C1:C2”).AutoFill Destination:=
Worksheets(1).Range(“C1:C10”), riempie le 10 celle della destinazione a partire
dai valori delle prime 2 celle.
Anche i
metodi devono essere studiati con attenzione, anche maggiore delle proprietà in
quanto i metodi manipolano gli oggetti o le loro caratteristiche. Quindi devi
metterci impegno e all’inizio pazienza per studiare un poco alla volta i metodi
che ti servono. Usa l’help del vbe, usa i motori di ricerca, le guide, gli
strumenti del Vbe e un poco alla volta ti accorgerai di scrivere più
velocemente, di non doverti impegnare a ricordare o cercare le parole. È solo
questione di tempo.
Ora
parliamo brevemente delle funzioni del vba.
Le funzioni del vba
Il
linguaggio vba non è composto solo da oggetti, proprietà e metodi, ma anche da
funzioni con cui si può controllare l’esecuzione del codice (es: cicli per
ripetere il codice), con cui si possono richiamare strumenti appositi (es: le
finestre di dialogo con cui interagire con l’operatore) e altre funzioni
specifiche.
Le funzioni
hanno un nome e regole precise che devono essere rispettate, per esempio una
funzione che ripete il codice, come il ciclo For/Next, richiedere una variabile
come contatore e l’indicazione di un inizio e una fine. Una funzione di salto,
come Goto, richiede un punto di arrivo con un nome univoco e una dichiarazione
di salto che la punta. Una funzione di test come If/Then, che verifica
condizioni precise per decidere se eseguire una parte del codice piuttosto che
un’altra, richiede sempre il controllo di una condizione e operatori per
testarla. E via dicendo.
Queste
funzioni sono strumenti fondamentali per scrivere il codice, devono essere
imparate a memoria e bene. Le funzioni più importanti sono decine, eccone
alcuni esempi:
1.For/Next
I cicli
sono tra gli strumenti più utilizzati del vba, in quanto permettono di
modificare il flusso del codice, ripetendo più volte porzioni dello stesso. Ci
sono molte funzioni del vba che generano cicli (loop), ma For/Next è quella più
usata perché permette un elevato controllo sulle modalità di uscita dal ciclo.
In breve For/Next genera un ciclo a interazione fissa, cioè esegue le
istruzioni un numero impostato di volte, definito e conteggiato da un
indicatore. La maggior parte delle funzioni di ciclo (es: Do/Loop) invece
determina l’uscita dal ciclo attraverso la verifica di una o più condizioni
logiche, generando quindi un numero di ripetizioni varabile e non definito.
La sintassi
è questa:
For VARIABILE_CONTATORE =
inizio To fine [Step passo]
…Istruzioni da eseguire
Next VARIABILE_CONTATORE
La variabile contatore
La
variabile contatore è numerica e di solito di tipo Integer o Long, di cui viene
definito un valore iniziale e un valore finale. Questo può essere fatto con un
numero, una formula, una variabile, eccetera. Di solito le variabili usate come
contatori sono nominate con una singola lettera (es: I, J, K, ecc) e di default
VBA incrementa il contatore di 1 ogni volta che esegue le istruzioni di un
ciclo. Next è il marcatore di fine ciclo.
Quando
viene eseguito il ciclo For, prima viene assegnato il valore iniziale alla
variabile, quindi vengono eseguite tutte le istruzioni fino a Next, poi viene
incrementato il valore della variabile e il focus ritorna all’inizio del ciclo
dove viene confrontato il valore della variabile col valore finale. Se il
contatore è minore o uguale a fine, la funzione esegue nuovamente il ciclo. Se
invece contatore è maggiore di fine, il ciclo finisce e continua l’esecuzione
della macro dopo Next.
È possibile
specificare un valore diverso per l’incremento del contatore aggiungendo Step e
il passo, l’incremento del contatore. Per esempio:
For I = 10 To 1 Step -1
… istruzioni
Next I
esegui il
ciclo, ma con un conteggio inverso. Utile per esempio quando è necessario
rimuovere righe da una tabella ed è più opportuno farlo in senso inverso.
I cicli
sono strumenti potenti che permettono la ripetizione delle istruzioni ed è
necessario conoscerli bene per averne il massimo controllo ed evitare errori
anche gravi sull’esecuzione del codice.
2.If/Then
Questa
funzione serve a controllare l’esecuzione del codice attraverso la verifica
preliminare di una o più condizioni. Il suo funzionamento di base è piuttosto
semplice: se la condizione risulta vera allora verranno eseguite le istruzioni,
o eventualmente ne verranno eseguite altre.
La sintassi
può variare da una versione minima su una singola riga:
If
CONDIZIONE=Vera Then Istruzione
dove la
funzione controlla se la condizione è vera e in caso affermativo esegue
l’istruzione dopo lo “Then”. Per esempio “If Età<18 Then Minorenne =True”.
Ma può
estendersi alla classica sintassi multiriga con una singola condizione che
gestisce due blocchi di codice alternativi:
If CONDIZIONE=Vera Then
… Istruzioni
Else
… istruzioni alternative
End If
Per
esempio, queste istruzioni verificano se è stato assegnato un nome
dall’operatore e in caso alternativo ne assegnano uno di deafult:
If
nomepaginadati = “” Then
Sheets.Add
After:=ActiveSheet
ActiveSheet.Name
= “Dati”
Else
Sheets.Add
After:=ActiveSheet
ActiveSheet.Name =
nomepaginadati
End If
Strutture condizionali complesse
Questa
funzione può arrivare fino a una complessa sequenza di condizioni da
verificare, come nella seguente sintassi:
If CONDIZIONE=Vera Then
… Istruzioni
ElseIf CONDIZIONE2=Vera Then
… Istruzioni
ElseIf CONDIZIONE3=Vera
Then
… Istruzioni
Else
… istruzioni alternative
End If
Strutture
di questo genere sono usate per gestire decisioni relativamente complesse senza
l’intervento dell’operatore.
Bisogna
sottolineare che la funzione ha la possibilità di verificare non una singola
condizione, ma più condizioni contemporaneamente usando gli operatori booleani
(And, Or, Not). Per esempio, “If Età>13 And Età <19 Then
Adolescente=True”.
Queste
funzioni “condizionali” sono una componente fondamentale per realizzare
controlli, per prendere decisioni come per gestire le decisioni dell’operatore,
per gestire gli errori e gli imprevisti e più in generale per realizzare codice
intelligente e predittivo.
Richiedono
una conoscenza approfondita dell’uso degli operatori (matematici, booleani, di
confronto, ecc), per la definizione efficace delle condizioni, e della gestione
delle variabili coinvolte, e richiedono esperienza per gestire strutture annidate
e strutture miste con i cicli senza incorrere in errori.
3.Msgbox
La funzione
MsgBox() richiama una finestra di dialogo con cui è possibile comunicare
informazioni all’operatore e ricevere conferme, o raccogliere le sue decisioni
su quesiti a risposta chiusa.
Viene usata
in moltissime situazioni nelle diverse fasi di esecuzione della macro:
1.all’inizio per chiederli
conferma dell’esecuzione,
2.dopo i controlli
preliminari per comunicargli imprevisti o la mancanza delle condizioni per
l’esecuzione del codice,
3.nella gestione degli
errori per comunicare il problema, ma anche per chiedergli se e come proseguire
il codice,
4.prima dell’esecuzione di
operazioni irreversibili (rimozioni, cancellazioni, ecc),
5.alla fine della macro per
comunicargli l’avvenuta esecuzione,
6.durante l’esecuzione
delle attività per chiedergli di prendere una decisione precisa,
dove
“prompt” è il messaggio che sarà visualizzato nella finestra di dialogo scritto
tra virgolette (“”), “buttons” è il tipo di pulsanti da visualizzare nella
finestra di dialogo, scelti da una lista di costanti tipo “vbOkOnly”,
“vbYesNo”, ecc, “title” è il titolo della finestra di dialogo scritto tra
virgolette (“”), “helpfile” identifica il file della guida da usare e “context”
indica il punto della guida a cui puntare.
Non
possiamo controllare la posizione e la grandezza della finestra di dialogo, ma
possiamo controllarne contenuto e titolo, possiamo assegnargli uno tra numerosi
set di pulsanti e possiamo scegliere l’icona che appare nella finestra.
Se vogliamo
una finestra di dialogo completamente configurabile e controllabile dobbiamo
creare una maschera apposita, attività che richiede molte competenze e tempo,
mentre Msgbox è uno strumento pronto e facilmente configurabile.
I parametri
della finestra dei messaggi
Per
esempio, se vogliamo usare la finestra dei messaggi per comunicare
un’informazione all’operatore, basterà scrivere qualcosa tipo:
Se invece
vuoi avere conferme o decisioni dall’operatore:
NOME_VARIABILE
= MsgBox(“MESSAGGIO E DOMANDA”, vbYesNo, “TITOLO”)
dove è
necessario raccogliere l’interazione dell’operatore con i pulsanti della
finestra di dialogo per poi andare a verificare la scelta presa e agire di
conseguenza.
Le finestre
di dialogo, sia quella dei messaggi (Msgbox) che degli input (Inputbox), sono
strumenti potenti e flessibili con cui possiamo ottenere risultati notevoli e
che quindi vale la pena conoscere alla perfezione per sfruttarne gli
innumerevoli vantaggi. L’argomento è ampio e complesso, quindi approfondiremo
l’argomento in altri post dedicati.
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”.
2.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:
·Quale
utilizzo penso di farne?
·Quanto
tempo la userò?
·Quante
volte la userò?
·Quanto
tempo mi permette di risparmiare?
·Quanto
tempo devo spendere per realizzarla?
·Raggiunge
il mio obiettivo? Soddisfa pienamente lo scopo?
·Ci
sono altri modi o strumenti per ottenere lo stesso risultato?
·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.
3.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”.
4.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”.
5.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à:
·oggetti
e strumenti coinvolti (fogli, tabelle, grafici, ecc),
·input
necessari (dati, valori, kpi, ecc),
·controlli
da eseguire (sulle condizioni, sui dati, sui risultati, ecc),
·decisioni
da gestire e condizioni relative,
·attività
alternative,
·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.
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.
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,
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.
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.
Quindi quale struttura deve avere la tua macro?
Nel post
precedente abbiamo visto che una macro ha una sua struttura determinata dalla
logica, dalla natura del vba e di Excel. Scriviamo le dichiarazioni all’inizio
della macro perché servono al codice che segue, scriviamo i blocchi di codice
che chiedono input all’operatore prima di elaborarli, scriviamo il codice per
controllare questi input, dopo l’interazione con l’operatore e prima
dell’elaborazione. E via dicendo.
Essere
consapevoli di queste relazioni tra gli elementi del codice, quindi della
struttura che questo assume, ci dà una falsariga da seguire nella scrittura del
codice, molto utile per chi è agli inizi, comoda per gli altri.
Questo significa che devi imporre una struttura
al codice?
No, se il
codice viene scritto secondo le regole e nel modo migliore, assumerà
spontaneamente una struttura propria a seconda delle attività che svolge e del
vba che abbiamo usato. Se è una macro piccola, avrà una struttura minima, tipo:
dichiarazioni + attività operative, oppure dichiarazioni + controllo condizioni
iniziali + attività operative.
D’altra
parte se la macro excel è grande e complessa avrà una struttura articolata e
distribuita, scomposta su macro diverse richiamate da quella principale. Per
esempio: dichiarazioni a inizio modulo + dichiarazioni in macro + controlli
iniziali + interazione + attività operative + controlli + attività operative +
decisioni e via dicendo.
Le strutture di riferimento
La maggior
parte delle macro presenta strutture simili a questa:
1.Dichiarazioni
2.Controlli (Opzionale)
3.Interazione con
l’operatore (Opzionale)
4.Attività operative
5.precedute o accompagnate
da Decisioni (Opzionale)
6.Chiusura e ripristino
(Opzionale)
7.Gestione degli errori
(Opzionale)
Di solito
le macro non troppo piccole o troppo grandi hanno strutture che sono
semplificazioni, riduzioni, o elaborazioni di questa, che ripeto vuol essere
solo una traccia.
In realtà
l’esperienza ti mostrerà come le strutture possono essere molto più definite e
articolate e che le sole attività operative possono assumere strutture
molteplici anche complesse e che sono loro a determinare la struttura
complessiva delle macro.
Finché non
diventerai un esperto, quello che ti invito a fare è usare le strutture che il
codice assume come falsariga da seguire nello sviluppo, perché ti semplificherà
la vita e renderà più efficiente il tuo lavoro. Una falsariga che naturalmente
va adattata alle situazioni e ai diversi progetti. E in realtà è una cosa che
faresti comunque, che tutti facciamo, anche senza rendersene conto.
Prima che
me lo chiedi parliamo della chiusura.
Chiusura della macro
È
un’attività accessoria spesso inesistente che consiste in qualche riga di codice
dedicata soprattutto alla gestione e al ripristino delle impostazioni di excel
e di alcuni aspetti del codice. Per esempio:
1.è necessario inserire un
comando per chiudere la macro (es: “Exit sub”) in presenza di codice per la
gestione degli errori posizionato in fondo alla macro, altrimenti verrebbe
eseguito comunque;
2.nel caso tu abbia
assegnato una variabile a un oggetto (Set), è buona pratica rilasciare le
risorse con una dichiarazione “Set VARIABILE = Nothing”; non è necessario, è
consigliato, ma se sei un principiante passa oltre, ritornaci più avanti;
3.questo è preceduto
dall’eventuale messaggio all’utente di conferma dell’avvenuta esecuzione, nel
caso di macro di lunga durata che non offrono risultati percepibili
immediatamente a schermo (comparsa di oggetti, cambio di pagina, eccetera),
4.questo può essere
preceduto dall’eventuale ripristino dei messaggi di errore, dell’aggiornamento
schermo ed eventi (Application.ScreenUpdating = True, Application.DisplayAlerts
= True, Application.EnableEvents = True), se sono stati disabilitati all’inizio
della macro con gli analoghi comandi (= False)
5.preceduto eventualmente,
per fogli di lavoro stabili e strutturati, dall’aggiornamento di parametri e
indicatori sulle pagine (es: data di esecuzione), o di pagine o file di
configurazione.
La lista
potrebbe continuare, ma volevo mostrarti che ci sono attività secondarie legate
alla gestione del codice, o del foglio, o della macro che possono richiedere
attenzione e codice.
Come iniziare una macro vba
Invece come
si inizia una macro?
Potrei
proporti una lista di “attività secondarie” utili e migliorative da porre
all’inizio della macro, diciamo prima del codice operativo, ma non credo sia
importante adesso.
Se sei un
principiante per te la macro inizia con le dichiarazioni delle variabili.
Solo due
consigli:
1.dopo il nome della macro,
inserisci sempre un commento per spiegare lo scopo della macro e le note
importanti, al massimo due righe;
2.se devi lavorare sugli
oggetti del foglio, passare da una pagina all’altra, spostare il cursore molte
volte, questo può generare effetti visivi fastidiosi (flickering) che può
essere opportuno nascondere, bloccando l’aggiornamento dello schermo con il
comando “Application.ScreenUpdating = False”; lo metti prima del codice
operativo, ma devi ricordardi di ripristinare l’aggiornamento prima della
chiusura della macro con Application.ScreenUpdating = True.
Adesso
vediamo una sintetica introduzione alle variabili.
Dichiarare le variabili
Come
abbiamo già detto, le informazioni che servono alle procedure, per essere
elaborate, per la gestione (es: contatori) e più in generale le informazioni
che devono essere utilizzate più volte dalla macro, richiedono di essere
memorizzate. Come? Inserendole in “contenitori” chiamati “variabili” che
impegnano porzioni di memoria dedicata. Questo avviene con la dichiarazione
delle variabili.
Il
linguaggio Vba prevede che la dichiarazione avvenga prima del primo utilizzo
del dato, ma può essere fatto in modi e momenti diversi a seconda dell’utilità
della variabile.
Le
variabili possono essere dichiarate all’interno del codice, perfino all’interno
di strutture effimere come i cicli, ma più tradizionalmente vengono dichiarate
all’inizio della macro e avranno validità limitata alla macro e durata di vita
limitata all’esecuzione della stessa.
Oppure
possono essere dichiarate all’inizio del modulo, fuori dalle macro, e avere
validità per tutte le macro del modulo (Private NOME_VARIABILE As tipo_dati).
Possono anche essere dichiarate pubbliche (Public NOME_VARIABILE As tipo_dati)
e avere validità su tutte le procedure di tutti i moduli.
La
dichiarazione delle variabili ha questa sintassi:
Dim
NOME_VARIABILE As tipo_dati
Per
esempio, “Dim I as Integer” è la tipica dichiarazione di un contatore, mentre
“Dim DataFattura as Data” è la dichiarazione di una data, “Dim NomePagina as
String” è la variabile che servirà a gestire il nome di una nuova pagina. La
dichiarazione può essere multipla, per esempio “Dim I as Integer, DataFattura
as Data, NomePagina as String”, cioè si possono dichiarare più variabili nella
stessa riga di codice.
Per poter
meglio gestire le variabili e la memoria che occupano, per migliorare
l’efficienza della procedura e per minimizzare problemi di varia natura (es:
sicurezza) è consigliato che le variabili vengano dichiarate indicando il tipo
di dato che dovranno contenere.
Ci sono
molti tipi di dati, i più usati sono:
1.Integer, numero interi
con segno compreso fra -32768 a 32767;
2.Boolean, valore di tipo
logico che può assumere il valore vero o falso (True o False);
3.String, sequenza di
caratteri (stringa);
4.Date, variabile usata per
memorizzare date e ore;
5.Long, numeri interi
compresi fra -2.147.483.648 e 2.147.483.647;
6.Single: numeri reali a
singola precisione (es: 1,47 o 376,45);
7.Variant, tipo di
variabile universale che può contenere dei dati di qualsiasi formato.
8.Non sono gli unici tipi
di variabili (es: variabili double, byte, oggetti, variabili matrice, ecc), ma
rimandiamo il complesso argomento della dichiarazione e gestione delle
variabili ad approfondimenti specifici.
È
necessario dichiarare le variabili?
No, il
motore di Excel riconoscerà le variabili e assegnerà la memoria necessaria per
la loro gestione. Ogni volta che non viene indicato il tipo della variabile,
viene assegnato in automatico un tipo Variant alla variabile. Ti sto dicendo
che puoi scrivere il codice senza dichiarazioni e funzionerà lo stesso, sarà
più lento, ma funzionerà.
Naturalmente
è consigliato e opportuno dichiarare correttamente le variabili per i motivi
espressi poco sopra (efficienza, meno problemi). È una cosa che dovrai imparare
e bene se vuoi realizzare macro evolute.
Come scrivi la tua macro?
La macro
che devi scrivere è composta da righe di codice, raggruppate in blocchi di
codice che svolgono attività diverse e sono posizionati in una struttura
definita con un ordine e una logica precisi.
Ma come
scrivi le righe di codice?
Prendi il
progetto che hai realizzato con la mappa del cosa e del come, con l’obiettivo e
la lista delle attività e di come realizzarle, con l’indicazione di oggetti e
strumenti, di input, controlli, decisioni, alternative e output.
Rileggilo
tutto dall’inizio alla fine. Poi prendi la struttura generica di riferimento
che ho suggerito qui sopra e adattala alle attività della mappa. Togli il di più
o aggiungi quello che manca, poi scrivila nella macro usando i commenti.
Ora scrivi
le righe di codice che eseguono la prima attività della mappa, aggiungi
un’attività alla volta, dall’alto verso il basso. Devi solo tradurre la mappa
nel codice. All’inizio ignora il controllo degli errori, le dichiarazioni e le
attività secondarie, concentrati sulle attività operative. Lavora sugli oggetti
che conosci, studiali bene, impara a manipolare le proprietà e a lanciare i
metodi. Usa solo le funzioni che servono finché non le conosci come le tue
tasche.
Cerca di
ottenere macro funzionanti così. Poi aggiungi il resto un poco alla volta.
Quando hai bisogno di un input aggiungi un’interazione con l’operatore, quando
hai bisogno di un controllo, aggiungi un test e definisci le condizioni, quando
hai bisogno di una variabile la all’inizio della routine, e così via.
Un poco
alla volta ti ricorderai il vocabolario che serve e la sintassi che conta. Un
poco alla volta saprai in anticipo le dichiarazioni che devi scrivere, un poco
alla volta scoprirai che ti diverti a farlo. Quasi come quando hai imparato la
tua prima lingua abbastanza per parlare con i madrelingua. Un’emozione che
lascia il segno.
Poi le cose
diventeranno sempre più semplici e veloci, e i tuoi fogli excel faranno corse
sorprendenti.
Naturalmente
non devi farti prendere la mano, non esagerare e non perdere il controllo del
flusso.
La gestione del flusso
Avrai
notato che fino ad ora ho ripetutamente parlato di esecuzione del codice, di
flusso, di controllo dell’esecuzione del codice, di comandi per modificare
l’esecuzione del codice, eccetera, per esempio parlando della funzione If/Then
che permette di decidere se eseguire una porzione di codice o quale codice
eseguire tra più alternative.
Penso sia
opportuno approfondire l’argomento.
Come viene
eseguito il codice?
Il codice
viene eseguito dal motore di Excel riga per riga dall’inizio alla fine. Punto.
Però per la natura stessa del linguaggio e per dare la possibilità di
realizzare procedure efficaci, flessibili e intelligenti, il vba prevede e
offre diversi strumenti che agiscono sull’esecuzione del codice. Questo per
motivi naturali, dal bisogno di interrompere il codice, a quello di poter
ripetere porzioni di codice, dalla possibilità di saltare in un’altra posizione
al bisogno di eseguire il codice solo a certe condizioni.
I comandi per la gestione del flusso
Vediamo gli
strumenti più importanti e come intervengono sul codice:
1.Funzioni di uscita/fine,
sono strumenti che fermano l’esecuzione del codice in modo parziale (es: Exit
For blocca il ciclo For) o definitivo (Es: End). Sono necessarie per evitare
che il codice venga eseguito comunque, inutilmente o peggio, con conseguenze
non volute. Le funzioni più note sono:
·Exit,
che appunto fa uscire dalla routine (Exit Sub) o dalle strutture di codice come
cicli (es: Exit For, Exit Do, ecc);
·End,
termina l’esecuzione
2.Funzioni di loop, cioè
che ripetono il codice, sono i cicli che abbiamo già visto e servono per
evitare di scrivere ripetutamente lo stesso codice uguale. Le funzioni di loop
più note sono For/Next e Do/Loop, già descritte in precedenza
3.Funzioni decisionali,
sono quelle funzioni che a seconda di una o più condizioni limitano
l’esecuzione di porzioni di codice, o eseguono una porzione di codice piuttosto
che una alternativa. Le funzioni più note sono:
·If/Then
che abbiamo già visto in precedenza,
·Select
Case, una funzione che esegue una tra diversi gruppi di codice preimpostati a
seconda del valore di un’espressione.
4.Funzioni di salto, che
spostano l’esecuzione a un punto preciso della procedura, per il Vba:
·Goto
che salta in modo diretto e incondizionato a un marcatore preimpostato,
·Resume,
che permette di riprendere l’esecuzione dopo il codice di gestione degli
errori.
È
importante conoscere queste funzioni e usarle quando servono, dove servono nel
modo migliore.
Questo
significa anche non generare flussi di esecuzione inutilmente complessi e
contorti, per esempio usando inutilmente i salti (Goto), o annidando
inutilmente troppo il codice.
L’annidamento
del codice è l’inserimento di codice in cicli e strutture condizionali.
Scrivere codice leggibile
È utile
spendere due parole sull’aspetto della scrittura del codice Vba perché la
qualità del risultato e il tempo speso per realizzarlo dipende anche dalla
leggibilità del codice. Quando scrivi il codice, come quando scrivi qualunque
altra cosa, dalla poesia alla lista della spesa, devi rendere la scrittura
leggibile, anzi il più leggibile possibile a chi dovrà leggerlo.
Per lo
sviluppo del codice questo significa, per esempio:
1.evidenziare i comandi
rilevanti del linguaggio (se ne occupa il vbe),
2.rendere identificabili i
blocchi di codice, regolando gli spazi tra i “moduli” di codice e i rapporti
tra pieno e vuoto nel testo,
3.rendere distinguibili i
“livelli” del codice, attraverso indentazione delle righe di codice,
4.distinguere la parte
eseguibile da quella non, evidenziandola con colore diverso,
5.mantenere il testo nella
schermata, senza costringere il lettore a muoverla destra–sinistra,
e altro
ancora.
Affinché il
codice delle macro sia leggibile e facilmente gestibile è quindi utile e
consigliato:
1.Tornare a capo con le
righe troppo lunghe
Durante la scrittura, la riga del codice potrebbe
diventare molto lunga e uscire dalla schermata, costringendo a scorrere verso
destra per leggerlo. In questi casi è consuetudine che il codice venga
riportato su più righe spezzandolo e aggiungendo a fondo riga il marcatore di
interruzione di riga: uno spazio seguito da “_” (underscore). In questo modo la
riga di codice verrà considerata dal vbe come un’unica riga.
2.Indentare il codice
Le macro possono essere composte anche da
centinaia di righe di codice, ma è sempre buona pratica formattare il codice
per rendere più facile la lettura e la comprensione del codice. Come?
Semplicemente applicando alle righe di codice
rientri tali da evidenziarne la struttura, porre su “livelli” diversi il codice
inserito dentro strutture di controllo, come cicli (es: For Next) e strutture
condizionali (es: If Then Else) allo scopo di esplicitare l’annidamento e le
relazioni. Per indentare il codice è sufficiente premere Tab a inizio riga per
spostare il cursore e il codice di quattro spazi. Premendo Maiusc+Tab si
rimuoverà l’effetto del Tab.
3.Commentare il codice
Durante la scrittura di codice è consigliabile
sempre inserire note e commenti per spiegare lo scopo del codice o altro. Per
farlo è sufficiente aggiungere a inizio riga il marcatore dei commenti, un
apostrofo (’). Le righe cosi marcate cambieranno colore diventando verdi e
verranno ignorate durante l’esecuzione del codice. Per questo motivo abitualmente
l’apostrofo è usato anche per sospendere quelle righe di codice che non si
vuole eseguire, o cancellare.
Ma l’uso principale dei commenti è quello di
conservare e comunicare informazioni sul codice stesso, soprattutto sul suo
scopo e so cosa fa. Se sei alle prime armi ti invito a prendere l’abitudine a
di scrivere con cura le tue macro per poter ricordare il tuo lavoro quando le
riprenderai in mano.
Adesso è
tempo di parlare di errori.
Eliminare gli errori con il debugging
Siamo
esseri umani e facciamo errori, nulla di nuovo, ma quando sviluppiamo è
importante che il codice sia esente da errori per evitare danni e perdite ai
dati o ai nostri fogli di lavoro che possono portare a sprechi di tempo anche
significativi.
Per
eliminare gli errori dalle nostre macro, il vbe ci mette a disposizione una
serie di strumenti che ci aiutano durante la scrittura, come lo strumento di
controllo della sintassi che di fatto elimina gli errori di sintassi. D’altra
parte ci sono molti tipi di errore (logici, runtime, ecc) e soprattutto agli
inizi è piuttosto facile inserire errori nel codice.
Come
facciamo a rimuovere gli errori?
Con il
debugging, cioè eseguendo il codice e controllandone i risultati. Una volta
terminata la scrittura dobbiamo testare la macro usando gli strumenti specifici
che l’ambiente di sviluppo ci mette a disposizione. I principali sono la
possibilità di mettere in pausa l’esecuzione e quindi la possibilità di
eseguire il codice riga per riga.
Poi ci sono
gli strumenti con cui possiamo controllare gli effetti del codice sul codice
stesso (es: il valore che assumono le variabili) senza dimenticare che dobbiamo
sempre controllare gli effetti del codice sul foglio di lavoro.
Il
debugging è un mondo, un lavoro e per alcuni un’arte, ma parleremo del debug
del codice in post dedicati. Penso sia importante sottolineare che spesso il
debug non elimina tutti gli errori, in particolare non rimuove quelli generati
da situazioni impreviste.
Cioè il
codice può essere esente da errori formali, ma può contenerne dei potenziali se
si presentano situazioni impreviste che influenzano l’esecuzione del codice.
Per esempio, se i dati elaborati contengono errori, o se assumono valori
anomali (es: troppo grandi o nulli), oppure se cambiamo la struttura del foglio
o degli oggetti con cui il codice deve interagire, se cambiano le
caratteristiche di Excel, se sono attivi automatismi che possono interferire
con l’esecuzione della macro (es: macro associate ad eventi), eccetera.
Le
possibilità sono innumerevoli e per questo è difficile che un codice sia del
tutto esente da errori potenziali generati da imprevisti. Possiamo minimizzarli
progettando il codice con attenzione, quindi lavorando nella fase preliminare
di progetto, ma non possiamo eliminare del tutto il rischio di errori per
imprevisti. Però possiamo gestire questi errori se e quando si presenteranno.
Gestire gli errori nel codice
Una delle
attività più trascurate del codice è la gestione degli imprevisti e degli
errori derivati. Il Vba permette di intercettare gli errori e di gestirli.
Invece di sospendere il codice, il vba mette a disposizione fuzioni che:
1.ignorano l’errore e
continuano l’esecuzione,
2.spostano l’esecuzione in
una porzione specifica del codice che permette di gestire l’errore.
Ignorare
l’errore evita il blocco dell’esecuzione, ma può moltiplicare gli errori e
generare danni ai dati o al foglio di lavoro. Quindi è consigliato ignorare
l’errore in situazioni controllate e specifiche.
Tra l’altro
ignorare l’errore non aiuta a scoprirne le cause. La sintassi per ignorare gli
errori è: “On Error Resume Next” e viene posto all’inizio della macro primo o
dopo le dichiarazioni, sempre prima del codice operativo.
La gestione
degli errori invece consiste in una dichiarazione iniziale che comanda al
sistema che in caso di errori il focus si sposti a un punto preciso del codice,
seguito dal codice dedicato alla gestione.
La sintassi
è: “On Error Goto NOME_PUNTO_DI_SALTO” che indica appunto di saltare (Goto) al
punto indicato.
Il
marcatore e il codice di gestione vengono di solito posti in fondo alla routine
e la sintassi del punto è: “NOME_PUNTO_DI_SALTO:”, per esempio “Errore:”. Il
codice che segue invece serve a gestire l’errore e può andare dalla semplice
comunicazione dell’errore all’operatore con una finestra di dialogo,
accompagnata dalle istruzioni per gestirlo manualmente, fino all’inserimento di
codice (o al richiamo di una macro dedicata) che può analizzare il problema,
svolgere l’attività in modo alternativo, tentare di risolvere la causa
dell’errore o rispristinare le condizioni, perfino presentare un piccolo
report.
Ha senso
spendere tempo per gestire errori che non so se ci sono, se e quando si
presenteranno?
Dipende.
No, se la
macro è piccola, semplice o poco importante, o se per sua natura è molto
improbabile che compariranno errori imprevisti.
Sì se la
macro è grande e complessa, o se il foglio su cui lavora la macro viene usato
da altri, non sviluppatori.
Il mio
consiglio è di predisporre un blocco di codice da usare dove necessario, che
comunica all’operatore indicazioni anche generiche su cosa fare, come e a chi
rivolgersi. Per esempio:
‘ Marcatore di salto
ERROR:
‘ Comunicazione
dell’errore
MsgBox “ATTENZIONE, SI E’
VERIFICATO UN ERRORE IMPREVISTO” _
& vbCr & vbCr & _
Err.Number & ” – ” & Err.Description _
& vbCr & vbCr
& _
“QUESTO PUO’ ESSERE
CAUSATO DA UNA VERSIONE PRECEDENTE DI EXCEL” _
& vbCr & vbCr
& _
“O DA MODIFICHE
IMPREVISTE AL CODICE O AL FOGLIO DI LAVORO ” _
& vbCr & vbCr
& _
“PROVA A CHIUDERE,
RIAPRIRE E RILANCIARE IL COMANDO” _
& vbCr & vbCr
& _
“SE IL PROBLEMA PERSISTE
INTERPELLA IL TUO CONSULENTE IT”, _
vbOKOnly, “ERRORE!”
Nel caso
invece di automatismi complessi in fogli di lavoro di lunga durata che
richiedono alta affidabilità, allora è importante prestare cura e attenzione al
codice per la gestione degli errori, per evitare o minimizzare danni o sprechi
di tempo rilevanti e mantenere l’operatività anche parziale dello strumento di
lavoro. Sulla gestione degli errori dedicheremo un post specifico.
Lanciare le macro dal Vbe e dal codice
Come
abbiamo già visto nella guida alle macro e nella guida al registratore di
macro, le macro possono essere lanciate in molti modi diversi.
Da Excel:
1.attraverso la finestra
“Macro”, strumento di Excel per la gestione delle macro, utilizzato nella fase
di sviluppo e test degli automatismi, che offre tra l’altro la possibilità di
associare e lanciare le macro attraverso una sequenza di tasti;
2.collegando la macro a un
oggetto grafico (una forma, un’immagine, ecc) che in questo modo diventa
cliccabile come un pulsante;
3.usando uno dei controlli
appositi, per esempio pulsante posizionato in una pagina del foglio di lavoro;
4.con un pulsante nella
barra di accesso veloce, o in un gruppo personalizzato della barra
multifunzione, sistema utile in particolare se si gestiscono gli automatismi
con la cartella macro personale;
5.usando un controllo, come
un pulsante, posizionato in una maschera preparata tramite l’editor vba.
Gli altri strumenti
Oltre a
questi metodi di lancio delle macro che richiedono l’interazione dell’operatore
con un comando o un controllo predisposto, ce ne sono altri strettamente legati
al vba e al Vbe, il visual basic editor:
1.puoi lanciare le macro
all’interno dell’editor Vba, l’ambiente di sviluppo, con il comando “Esegui” o
più semplicemente premendo F5 dopo aver selezionato la macro che desideriamo
eseguire. La macro verrà eseguita dall’inizio alla fine, a meno della presenza
di punti di interruzioni, finestre di dialogo che attenderanno il tuo input, o
comandi di pausa o interruzione, inseriti nel codice o direttamente da tastiera
(Ctrl+Inter per interrompere l’esecuzione);
2.puoi lanciare
l’esecuzione passo passo della macro con il comando “Esegui istruzione” o più
semplicemente premendo F8, lo strumento fondamentale per il debugging del
codice;
3.come già spiegato è
possibile eseguire la macro in modo automatico associandola a oggetti (pagine,
foglio excel, controlli e maschere) e a precisi eventi provocati dall’attività
dell’operatore; per esempio è possibile lanciare una macro all’apertura del
foglio di lavoro che ripristini le condizioni del foglio o aggiorni in
automatico i dati, o lanciare una macro che a qualunque cambiamento di una
pagina aggiorni le tabelle e i grafici collegati;
4.infine c’è un altro modo
per eseguire una macro, ed è quello di farla lanciare o richiamare da un’altra
macro attraverso lo stesso codice vba; è sufficiente inserire il nome della
macro, con o senza il comando Call, per lanciare l’esecuzione della macro, per
poi al termine tornare alla riga di codice successiva. Per esempio, puoi
lanciare la macro scrivendo “Call NOME_MACRO” o semplicemente “NOME_MACRO”,
sarà il sistema a riconoscere la macro.
Questo
permette di eseguire sequenze di routine, o da un altro punto di vista offre la
possibilità di smontare le procedure complesse con molte attività in parti più
semplici da realizzare e gestire.
Per
esempio, per creare una macro che realizzi su una base dati un’ampia gamma di
controlli, di interventi di pulizia e revisione dei dati e alla fine produca un
report particolareggiato delle rilevazioni e degli interventi, è opportuno
dividerla in più routine che vengono via via richiamate da una macro principale
ed eseguite a seconda dei risultati delle altri e delle condizioni.
Non una
macro, ma 6 macro diverse di cui una di controllo, due di analisi dei dati, due
per la revisione, una che realizzi il report del lavoro svolto.
Come si impara il vba
Come si
impara il vba?
Come una
lingua. Ma più facilmente. Per imparare il linguaggio vba è necessario imparare
a memoria il vocabolario, cioè i nomi degli oggetti, delle proprietà e dei
metodi, delle funzioni del vba, poi la sintassi, cioè il loro funzionamento e
le regole d’utilizzo.
Ma non è
sufficiente, come per lo studio di una nuova lingua, è necessario fare
esercizio e pratica e farne molto, per fissare quello che hai studiato, per
iniziare a parlare la lingua prima in modo goffo e facendo errori, poi con il
tempo in modo sempre più fluente. Nel vba significa iniziare a scrivere codice
ed esercitarsi, a lungo, finché non diventi bravo a sufficienza per i tuoi
scopi.
Qualche
semplice consiglio:
1.impara il vocabolario
minimo del linguaggio, oggetti, proprietà, metodi e le funzioni fondamentali di
Excel, parti da questa guida vba, cerca altre fonti, tieni sempre aperto il
browser sulle pagine del sito microsoft dedicate al visual basic;
2.contemporaneamente studia
la sintassi, cioè le regole con cui si usano le parole, per imparare a creare
le frasi del linguaggio, cioè il codice vero e proprio; questo significa
studiare come si scrivono le funzioni per controllare l’esecuzione del codice o
quelle per richiamare le finestre di dialogo, come si scrivono i parametri dei
metodi e delle proprietà più utili e complesse e via dicendo;
3.il passo successivo è
iniziare a usare quanto si è appreso, cosa che consiglio di fare appena
possibile, per fare esperienza e apprendere ancora di più vocabolario e
sintassi;
·inizia
a “leggere” macro esistenti scritte da altri, quelle che trovi in rete o ti
danno gli amici, importale nell’editor Vba e ogni volta che trovi una parola
che non conosci premi F1 per aprire la guida online e studiala; puoi iniziare
dalle macro di Excel professionale, scaricale, studiale e lavoraci sopra;
·inizia
a modificare queste macro, lavoraci, sperimenta, prova a ottenere strumenti
nuovi, solo tuoi;
·registra
macro con il registratore per ottenere il codice di comandi che non conosci, ma
non usarlo e basta, studialo,
·modifica
le macro registrate, adattale ai tuoi bisogni, rendile più intelligenti e
utili;
4.Infine è importante
imparare il metodo e le strategie migliori con cui progettare e realizzare
macro evolute: passare dal realizzare elenchi di attività, a macro strutturate
con controlli, interazioni, gestione degli errori, fino a realizzare e
risolvere algoritmi progettati con attenzione sulla carta.
Il vba si
impara studiando, ma soprattutto si impara dall’uso e dagli errori. Ricorda
sempre che noi esseri umani impariamo facendo.
Concludiamo questa guida vba
In questa
lunga guida vba abbiamo presentato il linguaggio con cui possiamo automatizzare
i nostri fogli Excel, abbiamo parlato del linguaggio, delle sue
caratteristiche, della programmazione, della progettazione delle macro, della
struttura del codice, del modo di scrivere il codice, di come si impara il vba
e molto altro.
Nonostante
le molte pagine, questa nostra carrellata ha toccato solo una parte degli
argomenti e in modo superficiale. Ma dopotutto questa è solo una guida introduttiva,
non un manuale o un corso.