I tipi di errore VBA
Esistono tre tipi di errore VBA che è possibile riscontrare durante l’esecuzione di una macro di Excel. Questi sono:
- Errori di compilazione;
- Errori di runtime;
- Errori logici (‘bug’).
Questi tre tipi di errore VBA sono discussi singolarmente, di seguito.
Errori di compilazione
Gli errori di compilazione sono riconosciuti dal compilatore VBA come illeciti e pertanto vengono evidenziati come errori prima ancora che la macro inizi a essere eseguita.
Se si digita un errore di sintassi, l’editor VBA lo evidenzierà immediatamente, mostrando una finestra di messaggio o evidenziando l’errore in rosso, a seconda dell’impostazione dell’opzione Controllo automatico sintassi (vedi qua sotto).
L’opzione Controllo automatico sintassi fa apparire una finestra di messaggio ogni volta che si digita un errore di sintassi nell’editor di Visual Basic.
Se questa opzione è disattivata, l’editor di Visual Basic evidenzia comunque gli errori di sintassi in rosso.
È possibile accedere all’opzione Controllo automatico sintassi selezionando Strumenti → Opzioni dal menu nella parte superiore dell’editor di Visual Basic.
In alternativa, un errore di compilazione potrebbe essere rilevato durante la compilazione del codice, appena prima dell’esecuzione.
Un errore di compilazione è generalmente facile da correggere, poiché il compilatore VBA apre una finestra di messaggio che fornisce informazioni sulla natura dell’errore.
Ad esempio, se viene visualizzato il messaggio ‘Errore di compilazione: variabile non definita’ quando si tenta di eseguire il codice, ciò indica che si sta facendo riferimento a una variabile che non è stata dichiarata nell’ambito corrente (questo errore viene generato solo quando si utilizza Option Explicit).
Errori di Runtime
Gli errori di runtime si verificano durante l’esecuzione del codice e ne causano l’interruzione. Questo tipo di errore VBA è di solito anche relativamente facile da correggere, poiché ti verranno forniti i dettagli della natura dell’errore e mostrato la posizione in cui il codice ha smesso di funzionare.
Ad esempio, se il codice tenta di dividere per zero, verrà visualizzata una finestra di messaggio che indica ‘Errore di run-time ’11’: divisione per zero’.
A seconda della struttura del tuo progetto VBA, ti potrebbe essere data la possibilità di eseguire il debug del codice, (vedi sotto). In questo caso, facendo clic sul pulsante Debug nella finestra di messaggio, la riga di codice che ha generato l’errore VBA verrà evidenziata nell’editor vba.
Nell’esempio sopra, le informazioni fornite nella finestra di messaggio e la riga di codice evidenziata rendono molto semplice individuare la causa dell’errore.
Se il tuo codice è più complesso, puoi ottenere ulteriori informazioni sul motivo dell’errore VBA guardando i valori delle variabili in uso. Questo può essere fatto nell’editor VBA semplicemente spostando il cursore del mouse sul nome della variabile o aprendo la finestra delle variabili locali (selezionando Visualizza → Finestra variabili locali).
I diversi codici di errore di runtime sono spiegati sul sito Web del supporto tecnico Microsoft. Comunque, alcuni dei messaggi di errore VBA più comuni sono mostrati nella tabella seguente:
Codice | Descrizione |
---|---|
5 | Chiamata di routine o argomento non validi |
7 | Memoria esaurita |
9 | Indice non incluso nell'intervallo (questo errore si verifica se si tenta di accedere a elementi di un array al di fuori della dimensione definita dell'array, ad esempio se si definisce un array indicizzato da 1 a 10, e poi si tenta di accedere all'indice n. 11) |
11 | Divisione per zero |
13 | Tipo non corrispondente (questo errore si verifica quando si tenta di assegnare un tipo errato di valore a una variabile, ad esempio se si definisce i come numero intero, e poi si tenta di assegnare la stringa "testo" a i) |
53 | Impossibile trovare il file (si verifica quando si tenta di aprire un file) |
Intercettare gli errori di runtime
Alcuni errori di runtime potrebbero non essere causati da codice difettoso. Ad esempio, se è necessario aprire un file che contiene dati essenziali per la macro, non è possibile evitare la generazione di un errore VBA, se il file non esiste. In questi casi, è molto più professionale ‘intercettare’ l’errore e scrivere il codice VBA per gestirlo, in modo che la tua macro esca “con garbo”, piuttosto che farla andare in crash.
Al fine di facilitare il trapping degli errori di runtime, VBA ci fornisce le istruzioni On Error e Resume. Queste istruzioni acquisiscono un errore di runtime e deviano la macro in una sezione specifica del codice VBA, dove viene gestito l’errore. Dopo l’esecuzione del codice di gestione degli errori, il programmatore può richiedere che il codice VBA riprenda dal punto dell’errore o, in alternativa, la macro può essere terminata in modo pulito. Questo è mostrato nel seguente codice di esempio.
' Procedura per impostare i valori forniti, Val1 e Val2 sui valori
' nelle celle A1 e B1 della cartella di lavoro "Dati.xls" nella directory C:\
Sub Set_Values(Val1 As Double, Val2 As Double)
Dim DataWorkbook As Workbook
On Error GoTo ErrorHandling
' Apri la cartella Dati
Set DataWorkbook = Workbooks.Open("C:\Documenti\Dati")
' Imposta le variabili Val1 e Val2 dai dati nella cartella Dati
Val1 = Sheets("Foglio1").Cells(1, 1)
Val2 = Sheets("Foglio1").Cells(1, 2)
DataWorkbook.Close
Exit Sub
ErrorHandling:
' Se il file non viene trovato, chiedi all'utente di metterlo
' nella directory corretta e prosegui
MsgBox "Cartella Dati non trovata;" & _
"Si prega di inserirla in C:\Documenti e di premere OK"
Resume
End Sub
Nell’esempio qua sopra, il codice tenta di aprire il file ‘Dati’ e, se non riesce a trovare il file specificato, richiede all’utente di posizionare il file Dati nella cartella corretta. Una volta che l’utente fa questo e fa clic su OK, il codice viene ripreso e viene fatto un ulteriore tentativo per aprire il file. Se lo si desidera, invece di riprovare ad aprire il file, è possibile terminare la procedura Sub a questo punto, utilizzando il comando Exit Sub.
Errori Logici
Gli errori logici, altrimenti noti come ‘bug’, si verificano durante l’esecuzione del codice VBA e consentono al codice di continuare l’esecuzione fino al completamento. Tuttavia, il ‘bug’ può causare azioni impreviste o restituire un risultato errato alla macro. Questi errori sono i più difficili da rilevare e correggere, in quanto non è possibile che il compilatore VBA sia in grado di identificare e ‘puntare’ all’errore, così come accade per gli errori di compilazione e di runtime.
Ad esempio, è possibile codificare accidentalmente la macro per sommare insieme variabili errate in una procedura. Il risultato sarebbe errato, ma la macro (di solito) continuerebbe a funzionare fino al completamento.
L’editor VBA di Excel offre una serie di strumenti di debug per aiutarti a trovare gli errori logici nel tuo codice VBA, in modo che possano essere riparati. La spiegazione di questi strumenti attualmente non rientra nell’ambito di questa pagina.