Programmazione VBA Excel

Visual Basic for Application per Microsoft Excel

Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 15 Settembre 2020
Categoria: Microsoft Office Excel VBA

Programmazione VBA Excel
Programmazione VBA Excel

Chi terminerà di leggere questo post su VBA Excel, pur sapendo perfettamente a cosa serve Microsoft Excel, ha deciso di esplorarne le ulteriori potenzialità desiderando apprenderne anche il linguaggio di programmazione contenuto al suo interno che ne consente la personalizzazione, rendendolo molto versatile e potente poiché permette di far compiere a Excel operazioni impossibili con l'uso tradizionale. Questo linguaggio si chiama VBA, un acronimo che significa Visual Basic for Application; esso è molto simile al vecchio Basic nato nel 1965 (Beginners All-Purpose Symbolic Instruction) e affine al moderno Visual Basic.
VBA Excel e il VBA in generale, non può compilare un proprio progetto in un file eseguibile, cioè non può creare un file con estensione .exe, ma dovrà appoggiarsi all’applicativo Microsoft Office che lo ospita per poter eseguire il programma; da ciò discende che il VBA è un linguaggio che si può applicare a tutti i programmi della suite americana.
Ecco i primi rudimenti di Programmazione VBA Excel.

Sommario Programmazione VBA Excel

Linguaggi compilatori

Il linguaggio macchina è formato da bit ed è in rapporto diretto con le componenti fisiche del computer. Per tale motivo risulta difficile per un umano comunicare con la macchina mediante questo linguaggio di basso livello composto solo da 0 e da 1. Fortunatamente è stato possibile creare altri tipi di codici, comprensibili facilmente dal computer ma anche dagli uomini; essi usano tipiche parole in inglese come And, Close, Do, Else, End, If, Open, Or, Print, Save, Select, Then, While, ecc. e vengono automaticamente tradotte in linguaggio macchina. Questa attività di intermediazione si chiama compilazione; i linguaggi di questo tipo sono chiamati appunto compilatori e, usando un lessico comprensibile anche per le persone, sono detti di alto livello.

Il VBA scritto da un programmatore è molto più potente rispetto a una macro registrata in quanto permette di:

Tutto ciò porta a realizzare procedure che una macro non sarebbe mai in grado di registrare.
Si supponga, ad esempio, di voler ordinare i fogli in senso alfabetico e che saltuariamente se ne rinomini uno o più d’uno oppure se ne inseriscano di nuovi, il registratore di macro sarebbe inutile, mentre un piccolo codice scritto a mano risolverebbe il problema.
Ma si potrebbero fare altri esempi come per esempio creare funzioni Excel che non esistono in natura.

Programmazione a oggetti

Il VBA permette la cosiddetta programmazione a oggetti (OOP). Se ad esempio è necessario eseguire una routine di codice tramite un pulsante da cliccare, non necessita alcuna riga di programmazione per creare il pulsante, ma basta prendere l’oggetto Buttone inserirlo nel foglio elettronico o in una UserForm. Gli oggetti hanno:

Alcuni oggetti in Excel sono:

Se utilizzata senza oggetto prima del punto, la proprietà Range restituisce un intervallo del foglio attivo. Si può utilizzare il metodo Activate per attivare un foglio di lavoro prima di utilizzare la proprietà Range senza il qualificatore di oggetto
Worksheets("Foglio1").Activate

Visual Basic Editor (VBE)

Le istruzioni date a Excel tramite codice, sono chiamate macro o procedure e vengono fornite all’applicativo tramite un ambiente di sviluppo detto VBE (Visual Basic Editor).
Se si registra una macro, Excel scrive il relativo codice VBA all’interno di un modulo del VBE; se invece si programma da zero una routine, questa può essere scritta sia in un modulo che in un foglio o in Questa_cartella_di_lavoro (ThisWorkbook per le versioni più vecchie di Excel), cioè nel file. Per inserire un modulo cliccare su Inserisci sulla barra dei menu VBE e scegliere Modulo.

È possibile creare:

Interfaccia VBE Excel
Interfaccia VBE Excel

Se presenta file di tipo .xla o simili, essi sono add-in cioè componenti aggiuntivi che in Excel si gestiscono dalla scheda File, voce Opzioni e poi Componenti aggiuntivi, Componenti aggiuntivi di Excel, pulsante Vai.
Se Gestione progetti non è presente si può mostrare dalla voce di menu Visualizza, cliccando Gestione progetti o cliccando Ctrl+R

Se Finestra del Codice non è presente si può mostrare dalla voce di menu Visualizza, cliccando Codice o cliccando F7. Shift+F7 alterna la visualizzazione del codice con quella dell’Oggetto in caso, ad esempio, si avesse una UserForm

Il discorso è similare se il doppio clic viene fatto su Questa_cartella_di_lavoro, in quanto la parola visualizzata da Oggetto sarebbe Workbook e Routine mostrerebbe tutti gli eventi disponibili per il file.

Barra menu VBE

Menu File
Salva: salva il progetto VBA corrente inclusi i moduli e UserForm
Importa file: aggiunge un modulo, UserForm o classe al progetto esistente
Esporta file: salva il modulo, UserForm o classe corrente in un file di formato testo per la successiva importazione in un altro progetto
Elimina: elimina dal progetto VBA il modulo o UserForm selezionato
Stampa: stampa un modulo o UserForm
Chiudi e torna a Excel: chiude il VBE e torna a Excel

Menu Modifica
Annulla: annulla il comando più recente
Ripeti: ripete il comando annullato per ultimo
Taglia: elimina il testo o l’oggetto selezionato
Copia: copia il testo o l’oggetto selezionato
Incolla: incolla il testo o l’oggetto
Cancella: elimina il testo o l’oggetto selezionato
Seleziona tutto: seleziona tutto il testo di un modulo o tutti gli oggetti di una UserForm
Trova: localizza un testo in un modulo
Trova successivo: ripete l’ultima operazione Trova
Sostituisci: localizza un testo in un modulo per sostituirlo con un altro
Aumenta rientro: aumenta il rientro di una tabulazione
Riduci rientro: sposta a sinistra di una tabulazione il testo selezionato
Elenca proprietà / metodi: mostra un elenco a discesa che indica tutte le proprietà e metodi dell’oggetto di cui si è digitato il nome. Se il cursore si trova in un punto vuoto della finestra del codice, apre un elenco di tutte le proprietà e metodi disponibili
Elenca costanti: mostra un elenco a discesa che mostra le costanti valide della proprietà digitata preceduta da un segno di uguale
Informazioni Rapide: mostra una finestra con la sintassi corretta di una procedura, funzione o enunciato digitato nella finestra Codice
Informazioni parametri: mostra una finestra con i parametri di una procedura, funzione o enunciato digitato nella finestra Codice
Completa parola: permette a VBE di completare la parola che si sta digitando
Segnalibri: mostra un sottomenu per inserire, eliminare o saltare a un segnalibro inserito nel modulo

Menu Visualizza
Codice: mostra la finestra del Codice con il sorgente associato al modulo o UserForm selezionato
Oggetto: mostra l’oggetto attualmente selezionato in Gestione Progetti
Definizione: mostra il codice sorgente della procedura o funzione su cui sta il cursore
Ultima posizione: salta all'ultima posizione di un modulo dopo un precedente impiego del comando Definizione o dopo una modifica al codice
Visualizzatore oggetti: mostra il visualizzatore oggetti per mostrare quali macro sono disponibili al momento
Finestra immediata: mostra la finestra immediata del debugger
Finestra locali: mostra la finestra Locali del debugger
Finestra controllo: mostra la finestra Controllo (Espressione di controllo) del debugger
Stack chiamate: mostra lo stack delle chiamate della procedura o funzione VBA
Gestione progetti: mostra la finestra Gestione Progetti
Finestra proprietà: mostra la finestra Proprietà
Casella degli strumenti: mostra la casella degli strumenti per aggiungere controlli alle finestre
Ordine di tabulazione: mostra la finestra Ordina tabulazioni per creare finestre personalizzate
Barre degli strumenti: mostra un sottomenu per visualizzare o nascondere le barre degli strumenti
Microsoft Excel: torna a Excel da cui è stato avviato VBE lasciando aperto quest’ultimo

Menu Inserisci
Routine: inserisce una nuova Sub, Function o Property nel modulo
UserForm: inserisce una nuova UserForm al progetto
Modulo: inserisce un nuovo modulo al progetto
Modulo di classe: inserisce un nuovo modulo di classe al progetto
File: inserisce in un modulo un file di testo che contiene codice VBA

Menu Formato
Allinea: mostra un sottomenu per allineare gli oggetti selezionati su una UserForm
Rendi uguale: mostra un sottomenu per portare gli oggetti selezionati alla stessa grandezza
Adatta: modifica contemporaneamente altezza e larghezza di un oggetto
Adatta alla griglia: modifica contemporaneamente altezza e larghezza di un oggetto per adattarlo ai punti più vicini della griglia
Spaziatura orizzontale: mostra un sottomenu per regolare la spaziatura orizzontale degli oggetti selezionati
Spaziatura verticale: mostra un sottomenu per regolare la spaziatura verticale degli oggetti selezionati
Centra nel UserForm: mostra un sottomenu per regolare la posizione degli oggetti selezionati centrandoli orizzontalmente o verticalmente
Disponi pulsanti: mostra un sottomenu per disporre automaticamente i pulsanti di comando in una riga a spaziatura uniforme lungo il lato basso o destro della UserForm
Raggruppa: riunisce più oggetti selezionati in modo da poterli spostare, ridimensionare, tagliare o copiare come un unico oggetto
Annulla raggruppamento: separa gli oggetti precedentemente raggruppati
Ordina: mostra un sottomenu per cambiare l’ordine degli oggetti sovrapposti su una UserForm

Menu Debug
Compila (progetto): compila il progetto selezionato in gestione progetti
Esegui istruzione: esegue il codice sorgente un enunciato alla volta
Esegui istruzione/routine: esegue in una volta le istruzioni di una macro senza doverle eseguire passo dopo passo
Esci da istruzione/routine: esegue tutte le istruzioni rimanenti di una macro senza procedere passo dopo passo
Esegui fino al cursore: esegue tutti gli enunciati del codice da quello corrente fino alla posizione del cursore
Aggiungi espressione di controllo: specifica variabili o espressioni che contengono valori che si vogliono esaminare mentre il codice sorgente viene eseguito
Modifica espressione di controllo: modifica le specifiche delle variabili o espressioni di controllo create in precedenza con il comando Aggiungi espressione di controllo
Controllo immediato: mostra il valore corrente di un’espressione di controllo
Imposta/rimuovi punto di interruzione: evidenzia un punto del codice in cui si vuole che l’esecuzione si arresti
Rimuovi punto di interruzione: elimina tutti i punti di interruzione immessi in un modulo
Imposta istruzione successiva: modifica il normale flusso di esecuzione del codice specificando la linea del codice sorgente da eseguire al passo successivo
Mostra istruzione successiva: evidenzia la linea del codice sorgente da eseguire successivamente

Menu Esegui
Esegui Sub/UserForm: esegue la macro in cui si trova il cursore. Se la UserForm è attiva la esegue
Interrompi: interrompe l’esecuzione del codice e apre VBE in modalità Interruzione
Ripristina: annulla i valori di tutte le variabili a livello modulo e lo stack delle chiamate
Esci da modalità progettazione: attiva o disattiva la modalità progettazione di un progetto. Quando è attiva non viene eseguito nessun codice

Menu Strumenti
Riferimenti: mostra la finestra dei Riferimenti per stabilire riferimenti a librerie di oggetti, di tipi o ad altro progetto VBA
Controlli aggiuntivi: mostra la finestra Controlli aggiuntivi per personalizzare la barra strumenti casella strumenti
Macro: mostra la finestra Macro per creare, eseguire, modificare o eliminare macro
Opzioni: mostra la finestra Opzioni per scegliere varie opzioni per VBE
Proprietà: mostra la finestra Proprietà progetto per impostare varie proprietà del progetto VBA
Firma digitale: mostra la finestra Firma digitale per vedere le informazioni correnti della firma digitale e per firmare il proprio progetto VBA con un certificato

Altri menu
Aggiunte contiene solo Gestione delle aggiunte che apre l’omonima finestra per aggiungere o eliminare programmi aggiuntivi (Add-In) di Visual Basic
Finestra passa da una UserForm all'altra portando in primo piano sul desktop quella su cui lavorare
Guida accede alla guida on-line di VBA. Per una consultazione rapida posizionare il mouse sull'oggetto che interessa e premere F1

Barra strumenti VBE
Esistono 4 barre degli strumenti (Debug, Modifica, Standard e UserForm), di default VBE mostra solo la più utile, ovvero la barra degli strumenti Standard

Barra degli strumenti VBE Excel
Barra degli strumenti VBE Excel

Le altre sono richiamabili cliccando ad esempio Visualizza e poi Barre degli strumenti.
Per ancorare o rendere flottante una barra, bisogna trascinarla nella posizione desiderata e rilasciare il pulsante del mouse.
Quella Standard presenta le seguenti icone:
Visualizza Microsoft Excel: passa all'applicazione
Inserisci oggetto: cliccando sulla freccia visualizza un elenco degli oggetti inseribili nel progetto: UserForm, Modulo, Modulo di classe o Procedura
Salva: salva il progetto corrente
Taglia: taglia il testo o l’oggetto selezionato
Copia: copia il testo o l’oggetto selezionato
Incolla: incolla il testo o l’oggetto
Trova: mostra la finestra per individuare la posizione di una parola o frase in un modulo
Annulla: annulla l’ultimo comando immesso
Ripeti: ripete l’ultimo comando immesso
Esegui: esegue la procedura corrente o UserForm
Interrompi: interrompe l’esecuzione del codice VBA
Ripristina: ripristina il codice VBA nello stato iniziale
Modalità Progetto: passa nella modalità Progetto del VBA
Gestione Progetti: mostra la finestra Gestione Progetti
Finestra Proprietà: mostra la finestra delle Proprietà
Visualizzatore Oggetti: mostra la finestra del Visualizzatore degli Oggetti
Casella strumenti: mostra la barra strumenti Casella Strumenti
Guida: mostra la guida di VBA

Procedure VBA

Una procedura VBA permette di eseguire un'azione ed è generalmente di due tipi, una Sub o una Function. Il terzo tipo di procedura è utilizzata per Moduli di classe. Un progetto VBA può contenere più moduli, moduli di classe e UserForm e ogni modulo può racchiudere una o più procedure o funzioni.

Una Sub inizia con la dichiarazione della parola chiave Sub, seguita dal nome della procedura e da parentesi tonde e si conclude con End Sub: in mezzo alle dichiarazioni va il codice
Sub nome()
…Codice VBA…
End Sub
Nelle parentesi tonde si possono passare dei parametri.
Non è possibile nidificare le routine.
Nello stesso modulo o foglio non possono coesistere due Sub con lo stesso nome.
Le dichiarazioni Sub ed End Sub è possibile scriverle o inserirle dalla voce Inserisci e poi Routine, in questo secondo caso dalla finestra che si apre si può scegliere se creare:

e decidere se le stesse devono essere:


Per eseguire una macro è possibile:

Selezionando la forma con il tasto destro del mouse è possibile eseguire il taglia e incolla su un altro foglio trasportando anche il codice memorizzato in esso.

Per salvare i codici, salvare il file Excel con l’attivazione delle macro (.xlsm).

Per proteggere i codici bisogna operare da VBE cliccando la voce Strumenti e poi Proprietà di VBAProject, Protezione e scegliere:

Mentre si digitano parole chiave del linguaggio VBA, l'editor può proporre suggerimenti e completare automaticamente le parole stesse.

Suggerimenti VBE Excel
Suggerimenti VBE Excel

È possibile scegliere se continuare a digitare oppure scorrere l’elenco, selezionare un suggerimento e cliccare Tab da tastiera.
In determinate occasioni si possono far apparire i suggerimenti con Ctrl+Barra spaziatrice
Esiste anche la guida nella barra dei menu del VBE.

Quando il codice diventa complesso (ad esempio per cicli e/o condizioni, ancor più se nidificate) conviene indentarlo per facilitarne la lettura. L’indentazione consiste nel precedere le righe di listato con un certo numero di spazi allo scopo di evidenziare i blocchi di codice per permettere di cogliere visivamente la struttura del programma. Il numero di spazi è dato dal tasto Tab ed è personalizzabile dal menu Strumenti, voce Opzioni del VBE.

Le colorazioni sono modificabili sempre dal menu Strumenti, voce Opzioni, ma di default il colore

La dichiarazione Option Explicit (non obbligatoria) costringe a dichiarare esplicitamente tutte le variabili con l’istruzione Dim (dimension) prima di usarle, altrimenti sarà segnalato un errore (è infatti possibile, anche se sconsigliato, usare variabili senza dichiarazione e inizializzazione)
Per attivare / disattivare questa dichiarazione si deve cliccare la voce Strumenti e poi Opzioni…Editor e spuntare Dichiarazione di variabile obbligatoria.
Dichiarare una variabile presenta molti vantaggi, ad esempio:

Ottenere maiuscolo, minuscolo, maiuscola iniziale

Differentemente da altri programmi del pacchetto Microsoft Office, in Excel non esiste un’icona per convertire un testo in maiuscolo, minuscolo o con la sola iniziale maiuscola, ma bisogna usare delle scomode funzioni, con VBA si risolve il problema molto facilmente

Sub Maiuscole()
For Each x In Range("A1:A5")
x.Value = UCase(x.Value)
Next
End Sub
Sub Minuscole()
For Each x In Range("A1:A5")
x.Value = LCase(x.Value)
Next
End Sub
Sub InizialeMaiuscola()
For Each x In Range("A1:A5")
x.Value = Application.Proper(x.Value)
Next
End Sub

Il VBA, come accennato all'inizio del post, non è applicabile solo in Excel, ma a tutto il pacchetto Microsoft Office.
Per saperne di più su Microsoft Excel potrebbero interessarti i video corsi Excel o questi libri:


Se vuoi approfondire alcuni dei temi trattati, visita la pagina con le mie pubblicazioni cartacee e online.

Se l'articolo ti è piaciuto, condividilo!

Segui l'hashtag #AndreaPacchiarotti