Cos'è VBA e quando ha ancora senso usarlo in Excel
Cos'è VBA: il linguaggio delle macro di Excel, come iniziare, i rischi di sicurezza delle macro ricevute via email, i limiti reali e le alternative migliori.
Ogni lunedì apri lo stesso file Excel, copi i dati dall'export del gestionale, cancelli le colonne inutili, colori le righe scadute e mandi il report al responsabile. Quaranta minuti di clic identici, ogni settimana. Qualcuno ti ha detto "fatti una macro", ma non sai da dove partire né se sia una buona idea. In questo articolo trovi cos'è VBA, come si usa davvero e quando conviene scegliere altro.
Cos'è VBA
VBA (Visual Basic for Applications) è il linguaggio di programmazione integrato nelle applicazioni desktop di Microsoft Office, con cui si scrivono le macro: piccoli programmi che automatizzano operazioni in Excel, Word, Access, Outlook e PowerPoint agendo direttamente sui loro documenti.
È un dialetto del vecchio Visual Basic, adattato per "pilotare" l'applicazione che lo ospita. In Excel una macro può leggere e scrivere celle, creare fogli, applicare formati, generare grafici, aprire altri file e perfino mandare email tramite Outlook. Il codice vive dentro il file: un documento con macro si salva con estensione .xlsm (o .docm per Word), e chi lo apre riceve anche il programma.
Perché è così diffuso
La ragione non è tecnica. VBA non è elegante, non è moderno e non è veloce. Ma ha un vantaggio che nessun altro linguaggio ha avuto per decenni: è già installato nel computer di chiunque lavori in un ufficio.
Per usare Python in un'azienda devi installare un interprete, spesso chiedere permessi all'IT, gestire librerie. Per usare VBA apri Excel e premi Alt+F11. Nessuna richiesta, nessuna installazione, nessun ticket.
Per questo moltissime automazioni aziendali sono nate "dal basso": un impiegato di contabilità che si stanca di un'operazione ripetitiva, un analista che vuole generare cinquanta report con un clic. Non erano programmatori, ma avevano lo strumento a portata di mano. È anche il motivo per cui VBA è ancora ovunque, nonostante Microsoft stia spingendo altre tecnologie, come racconta l'articolo su Office Scripts e il futuro di VBA.
Come si inizia
Attivare la scheda Sviluppo
Di default la scheda che serve è nascosta. In Excel per Windows: File → Opzioni → Personalizza barra multifunzione, poi spunta Sviluppo. Da lì trovi il registratore di macro, l'editor VBA e le impostazioni di sicurezza.
L'editor VBA
Con Alt+F11 (o Sviluppo → Visual Basic) si apre l'editor, un ambiente separato con tre zone principali:
- Gestione progetti, a sinistra: i file aperti con i loro fogli e i moduli, dove si scrive il codice.
- Finestra del codice, al centro.
- Finestra Immediata (
Ctrl+G): utile per provare un'istruzione al volo o stampare valori conDebug.Print.
Per scrivere la prima macro: menu Inserisci → Modulo, e nel modulo nuovo scrivi una Sub. La lanci con F5 o dalla scheda Sviluppo → Macro.
Il registratore di macro e perché non basta
Il registratore sembra la soluzione perfetta: premi "Registra macro", fai le tue operazioni a mano, premi "Interrompi", ed Excel scrive il codice per te. Ecco cosa produce, tipicamente:
Sub Macro1()
Range("A1").Select
Selection.Font.Bold = True
Range("A2:D50").Select
Selection.Copy
Sheets("Report").Select
Range("B3").Select
ActiveSheet.Paste
End Sub
Funziona, ma ha due problemi seri:
- Registra ogni selezione. Clicca, seleziona, attiva, incolla: il codice imita i tuoi movimenti di mouse invece di descrivere il risultato. È lento e fragile, perché dipende da quale foglio è attivo nel momento in cui lanci la macro.
- I riferimenti sono fissi.
A2:D50è scritto nel codice. La settimana prossima i dati arrivano alla riga 73 e la macro ne copia solo una parte, senza darti alcun errore.
Lo stesso lavoro, scritto a mano, sta in una riga:
ThisWorkbook.Worksheets("Dati").Range("A2:D50").Copy _
Destination:=ThisWorkbook.Worksheets("Report").Range("B3")
Usa il registratore per scoprire come si chiama una proprietà o un metodo (il colore di sfondo, il formato numerico), poi riscrivi il codice tu.
Gli oggetti principali
VBA in Excel si basa su una gerarchia di oggetti. Ne bastano tre per fare quasi tutto:
| Oggetto | Cos'è | Esempio |
|---|---|---|
Workbook | Un file Excel | ThisWorkbook è il file che contiene la macro |
Worksheet | Un foglio del file | ThisWorkbook.Worksheets("Fatture") |
Range | Una cella o un intervallo | ws.Range("A1:E1"), ws.Cells(riga, colonna) |
Ecco una macro realistica: evidenzia in rosso le fatture scadute e non ancora pagate, qualunque sia il numero di righe.
Option Explicit
Sub EvidenziaScadute()
Dim ws As Worksheet
Dim ultimaRiga As Long
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Fatture")
' trova l'ultima riga piena nella colonna A
ultimaRiga = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To ultimaRiga
If ws.Cells(i, "D").Value < Date And ws.Cells(i, "E").Value <> "Pagata" Then
ws.Range("A" & i & ":E" & i).Interior.Color = RGB(255, 200, 200)
End If
Next i
End Sub
Nota le differenze rispetto al codice registrato: nessuna Select, il foglio è indicato per nome, l'ultima riga è calcolata ogni volta. La colonna D contiene la scadenza, la E lo stato; Date è la data di oggi. Questo codice funziona anche se lo lanci da un altro foglio e anche se le fatture raddoppiano.
Sicurezza: il punto da non sottovalutare
Una macro VBA può fare molto più che colorare celle: può leggere e scrivere file sul disco, scaricare contenuti da internet, lanciare altri programmi. Ha, in pratica, gli stessi permessi dell'utente che apre il file.
Per questo i documenti Office con macro allegati alle email sono da anni uno dei vettori di attacco più classici. Lo schema è sempre lo stesso: arriva una "fattura" o un "avviso di spedizione" in Excel o Word, il documento mostra un messaggio del tipo "abilita il contenuto per visualizzare correttamente il file", e appena l'utente clicca la macro scarica ed esegue un malware.
Microsoft ha reagito rendendo le impostazioni più restrittive: nelle versioni recenti di Office le macro nei file scaricati da internet o ricevuti come allegato vengono bloccate per impostazione predefinita, e l'utente vede un avviso di sicurezza invece del pulsante per abilitarle. I dettagli delle impostazioni cambiano tra versioni e configurazioni aziendali: verifica alla fonte, nella documentazione Microsoft.
La regola pratica è semplice:
- Non abilitare mai le macro in un file di cui non sei certo della provenienza, anche se il mittente sembra conosciuto e il messaggio sembra urgente.
- Se un documento ti chiede di abilitare le macro per "vedere il contenuto", è quasi sempre un segnale d'allarme.
- Per i file con macro di cui ti fidi, la strada corretta è un percorso attendibile o un file firmato, configurato con l'IT, non abbassare le impostazioni di sicurezza per tutti i file.
I limiti reali
Oltre alla sicurezza, VBA ha limiti che conviene conoscere prima di costruirci sopra un processo:
- Non funziona in Excel per il web. Un file
.xlsmaperto nel browser o in Teams mostra i dati, ma le macro non partono. - È legato a Windows. Su Mac VBA esiste, ma molte funzionalità (soprattutto quelle che interagiscono con altre applicazioni o con il sistema) non ci sono o si comportano diversamente. Su tablet e smartphone non esiste.
- È difficile da versionare. Il codice è chiuso dentro un file binario: non puoi usare Git in modo naturale, confrontare due versioni o capire chi ha cambiato cosa.
- È difficile da testare. Non esiste uno strumento standard per i test automatici, e il debug si fa quasi sempre a mano, riga per riga.
- Il linguaggio non evolve. Nessuna funzionalità moderna, un ecosistema di librerie praticamente fermo.
Le alternative, compito per compito
VBA non è sempre la risposta sbagliata, ma spesso esiste uno strumento più adatto:
| Compito | Strumento consigliato | Perché |
|---|---|---|
| Importare, pulire e trasformare dati | Power Query | Integrato in Excel, niente codice, passaggi ripetibili con un "Aggiorna" |
| Automazioni su file in OneDrive/SharePoint e Excel per il web | Office Scripts | Funziona nel browser e si collega a Power Automate |
| Elaborazioni pesanti, più file, integrazione con altri sistemi | Python | Librerie come pandas e openpyxl, versionabile, testabile |
| Automazioni su più applicazioni con interfaccia grafica | RPA | Pensata per processi che attraversano più programmi |
Power Query merita una menzione speciale. Una gran parte delle macro che si scrivono in ufficio serve a importare un file, togliere colonne, filtrare righe, unire tabelle e rinominare campi. Power Query fa esattamente questo, senza scrivere codice, e il risultato si aggiorna con un clic. Prima di scrivere una macro per trasformare dati, controlla se Power Query lo fa già.
Per le automazioni più serie, automatizzare task con Python è la strada che scala meglio. Se il processo coinvolge più programmi e non solo Excel, guarda l'RPA.
Errori comuni con VBA
Non usare Option Explicit. Senza questa riga in cima al modulo, una variabile scritta male diventa una nuova variabile vuota e la macro fa la cosa sbagliata in silenzio. Attiva "Richiedi dichiarazione di variabili" nelle opzioni dell'editor.
Usare Select e ActiveSheet ovunque. È l'eredità del registratore. Rende la macro lenta e dipendente da cosa è selezionato in quel momento. Riferisciti sempre agli oggetti per nome.
Salvare come .xlsx. Excel avvisa, ma molti cliccano "Sì" senza leggere: il file viene salvato senza macro e il codice è perso. Il formato giusto è .xlsm.
Ciclare cella per cella su migliaia di righe. Ogni accesso a una cella è lento. Per volumi grandi leggi l'intervallo in un array con ws.Range("A2:E5000").Value, lavora sull'array in memoria e riscrivilo in blocco.
Costruire un processo aziendale critico su un file con macro. Quando la persona che l'ha scritto cambia lavoro, spesso nessuno sa più come funziona.
In sintesi
VBA è il linguaggio delle macro di Office, integrato nelle applicazioni desktop, e deve la sua diffusione soprattutto al fatto di essere già installato ovunque, senza chiedere niente a nessuno.
Per iniziare bastano la scheda Sviluppo, l'editor e tre oggetti: Workbook, Worksheet e Range. Il registratore di macro è utile per imparare i nomi delle proprietà, ma il codice che produce va riscritto.
La sicurezza è la prima cosa da sapere: le macro nei file ricevuti per email sono un vettore di attacco classico, e non vanno mai abilitate su file di provenienza non certa.
Il consiglio onesto: per automatizzare un file che usi solo tu, VBA va benissimo. Per un processo aziendale critico, condiviso o che deve funzionare nel browser, scegli Power Query, Office Scripts o Python.
Se vuoi capire da dove partire con l'automazione in generale c'è cos'è l'automazione e come iniziare, e per vedere VBA accanto agli altri linguaggi c'è la panoramica su tutti i linguaggi di programmazione.
Contenuto redatto con l'assistenza di strumenti di intelligenza artificiale e rivisto dalla redazione di Codegrind, che ne è responsabile. Hai trovato un errore? Scrivici.