mercoledì 28 aprile 2021

Una vernice davvero ecologica...

 Da ZeusNews

La vernice tanto bianca da sostituire l'aria condizionata

23 apr 2021

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.

venerdì 23 aprile 2021

Un articolo sulle "criptovalute" (non solo Bitcoin)



di Giuditta Mosca, 12 apr 2021

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 Scottnon è 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.




giovedì 22 aprile 2021

Il futuro del "remote working" nelle "big tech"...

Da Business Insider

Da Google ad Amazon, le big tech contro il remote working: la rivoluzione è già finita?

Chiara Merico, 13 apr 2021

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 ufficioChi 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.








mercoledì 21 aprile 2021

Regole semplificate per lo smartworking fino a dopo l'estate...



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.

martedì 20 aprile 2021

Smartworking: spese e retribuzioni per il lavoro da casa...

 Da Il Post

Bisogna pagare di più chi lavora da casa?


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 spiegato RTL 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.

– Leggi anche: I paesi che offrono un visto per lavorare da remoto

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 scritto Reuters, 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.

lunedì 19 aprile 2021

Gli effetti dello Smartworking sui Comuni in Italia

Da Money.it 

Il duro impatto dello smart working sui Comuni di cui nessuno parla

di Patrizio Messina, 15 ott 2020

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à.


mercoledì 17 giugno 2020

Una buona introduzione al Visual Basic per Office...

 Da ExcelProfessionale

Guida VBA Excel

22 feb 2020

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).

Per approfondire l’argomento macro ti invito a leggere la guida alle macro di Excel.

Cosa si può realizzare con il Vba?

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 di  dialogo “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: , .),

6.       non può contenere caratteri speciali (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:

Application.Workbooks(“Report”).Worksheets(“Mensile”).ChartObjects(“Fatturato”).PrintOut

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à:

Application.Insieme(OGGETTO).Insieme(OGGETTO).OGGETTO

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:

Application.Workbooks(“RepProd”).Worksheets(“Dati”).Range(“C1:C10”)

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,

e in molte altre occasioni.

La sintassi della funzione è piuttosto semplice:

MsgBox(prompt, [buttons], [title], [helpfile], [context])

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:

MsgBox “MESSAGGIO”, vbQuestion + vbOKOnly, “TITOLO”

come vedi senza parentesi, variabili o altro.

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.