Introduzione al Vba

By | 15 Nov 2018

Introduzione al Vba ExcelCos’è il Vba? Cosa si può realizzare con questo linguaggio? Chi dovrebbe usarlo e perché? Quali sono le basi del vba? Questa è un’introduzione al Vba, il 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.

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.

Automatismi

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.

Per conoscere meglio il Visual Basic Editor ti invito a studiare la guida introduttiva all’editor Vba.

Dove si installa il codice vba?

Il codice va inserito in un modulo, un contenitore teorico che puoi immaginare come una pagina bianca su cui scrivere i comandi delle rountine. 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.

Aldilà delle regole che devono essere rispettate, consiglio sempre di assegnare nomi parlanti e descrittivi delle funzioni, azioni, attiviatà, 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.

Versioni

Come si scrivono le macro?

Il codice sotanzialmente 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. possono richiedere 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.

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.

Concludendo

No, non concludiamo qui. Continueremo la nostra lunga introduzione al vba nei prossimi 3 post. Finora abbiamo visto cos’è il vba. Il prossimo post introdurrà la programmazione a oggetti e ci darà un assaggio del linguaggio Vba.

Qui puoi trovare il secondo post introduttivo al Vba, qui il terzo e qui l’ultima parte di questa guida al Vba.

 

 

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

Puoi farlo attraverso i pulsanti qui di seguito. Grazie.

Rispondi

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