Sommario:
Video: Corso VBA Excel ITA - 29 - Interazioni con l'utente 2025
Quando è necessario gestire gli errori in VBA di Excel, è possibile utilizzare l'istruzione OnError. Tuttavia, ci sono alcune cose che devi sapere prima. È possibile utilizzare l'istruzione On Error in tre modi.
Sintassi | Che cosa fa |
---|---|
On Error GoTo etichetta | Dopo aver eseguito questa istruzione, VBA riprende l'esecuzione all'istruzione
seguendo l'etichetta specificata. È necessario includere un punto dopo l'etichetta in modo che VBA lo riconosca come etichetta. |
On Error GoTo 0 | Dopo aver eseguito questa istruzione, VBA riprende il suo normale comportamento di controllo degli errori
. Utilizzare questa istruzione dopo aver utilizzato una delle altre istruzioni On Error o quando si desidera rimuovere la gestione degli errori nella procedura. |
On Error Resume Next | Dopo aver eseguito questa istruzione, VBA semplicemente ignora tutti gli errori
e riprende l'esecuzione con la successiva istruzione. |
Ripresa dopo un errore
In alcuni casi, si desidera semplicemente che la routine termini con garbo quando si verifica un errore. Ad esempio, è possibile visualizzare un messaggio che descrive l'errore e quindi uscire dalla procedura. (L'esempio di EnterSquareRoot5 mostrato in precedenza utilizza questa tecnica.) In altri casi, se possibile, si desidera ripristinare l'errore.
Per recuperare da un errore, è necessario utilizzare un'istruzione Riprendi. Questo cancella la condizione di errore e ti consente di continuare l'esecuzione in qualche luogo. È possibile utilizzare l'istruzione Riprendi in tre modi.
Sintassi | Cosa fa |
---|---|
Riprendi | L'esecuzione riprende con l'affermazione che ha causato l'errore. Usa
se il tuo codice di gestione degli errori corregge il problema e va bene continuare. |
Riprendi Avanti | L'esecuzione riprende con l'istruzione immediatamente successiva all'istruzione
che ha causato l'errore. Questo essenzialmente ignora l'errore . |
Riprendi etichetta | L'esecuzione riprende dall'etichetta specificata. |
L'esempio seguente utilizza un'istruzione Resume dopo che si è verificato un errore:
Sub EnterSquareRoot6 () Dim Num As Variant Dim Msg As String Dim Ans As Integer TryAgain: 'Imposta la gestione degli errori On Error GoTo BadEntry 'Richiedi un valore Num = InputBox ("Inserisci un valore") Se Num = "" Quindi Esci da Sub "Inserisci la radice quadrata di ActiveCell. Valore = Sqr (Num) Esci Sub BadEntry: Msg = Err. Numero & ":" & Errore (numero errato) Msg = Msg & vbNewLine & vbNewLine Msg = Msg & "Assicurarsi che sia selezionato un intervallo," Msg = Msg & "il foglio non è protetto," Msg = Msg & "e inserisci un valore non negativo. "Msg = Msg & vbNewLine & vbNewLine &" Riprova? "Ans = MsgBox (Msg, vbYesNo + vbCritical) Se Ans = vbYes Then Resume TryAgain End Sub
Questa procedura ha un'altra etichetta: TryAgain.Se si verifica un errore, l'esecuzione continua con l'etichetta BadEntry e il codice visualizza il messaggio seguente. Se l'utente risponde facendo clic su Sì, viene attivata l'istruzione Riprendi e l'esecuzione torna all'etichetta TryAgain. Se l'utente fa clic su No, la procedura termina.
Si noti che il messaggio di errore include anche il numero dell'errore, insieme alla descrizione dell'errore "ufficiale".
L'istruzione Resume cancella la condizione di errore prima di continuare. Per vedere questo, prova a sostituire la seguente istruzione per la penultima dichiarazione nell'esempio precedente:
Se Ans = vbYes Then GoTo TryAgain
Il codice non funziona correttamente se usi GoTo piuttosto che Resume. Per dimostrare, inserire un numero negativo. Si ottiene il prompt di errore. Fare clic su Sì per riprovare e quindi immettere un altro numero negativo . Questo secondo errore non viene intrappolato perché la condizione di errore originale non è stata cancellata.
Gestione degli errori in breve
Per aiutarti a mantenere tutte queste attività di gestione degli errori dirette, ecco un riassunto rapido e sporco. Un blocco di codice di gestione degli errori ha le seguenti caratteristiche:
-
Inizia immediatamente dopo l'etichetta specificata nell'istruzione On Error.
-
Dovrebbe essere raggiunto dalla tua macro solo se si verifica un errore. Ciò significa che è necessario utilizzare una dichiarazione come Exit Sub o Exit Function immediatamente prima dell'etichetta.
-
Potrebbe richiedere un'istruzione Riprendi. Se si sceglie di non interrompere la procedura quando si verifica un errore, è necessario eseguire un'istruzione Resume prima di tornare al codice principale.
Sapere quando ignorare gli errori
In alcuni casi, è perfettamente corretto ignorare gli errori. Ecco quando entra in gioco l'istruzione On Error Resume Next.
Il seguente esempio scorre attraverso ogni cella nell'intervallo selezionato e converte il valore nella sua radice quadrata. Questa procedura genera un messaggio di errore se una cella nella selezione contiene un numero o un testo negativo:
Sub SelectionSqrt () Dim cella As Range If TypeName (Selection) <> "range" Then Exit Sub For Each cell Nella cella Selection. Valore = Sqr (valore cella) Fine cella successiva Sub
In questo caso, è possibile saltare semplicemente una cella che contiene un valore che non è possibile convertire in una radice quadrata. Puoi creare ogni sorta di capacità di controllo degli errori utilizzando le strutture If-Then, ma puoi escogitare una soluzione migliore (e più semplice) semplicemente ignorando gli errori che si verificano.
La seguente routine ottiene ciò utilizzando l'istruzione On Error Resume Next:
Sub SelectionSqrt () Dim cella As Range If TypeName (Selection) <> "range" Then Exit Sub On Error Riprendi Next For Each cell In Selection cellula. Valore = Sqr (valore cella) Fine cella successiva Sub
In generale, è possibile utilizzare un'istruzione On Error Resume Next se si ritiene che gli errori siano innocui o irrilevanti per l'attività.
