VB Corso pg 5
Sommario
La gestione degli errori L 'oggetto ERR L 'istruzione Resume L 'istruzione On Resume Next Errori definiti dall'utente 
La gestione degli errori

Il codice  per la gestione degli errori è la parte meno entusiasmante della programmazione.Si tratta di codice  che in apparenza non fa nulla di ecclatante, rimane il fatto ,tuttavia, che un programma che non prevede un codice per la gestione degli errori ben progettato  sicuramente provocherebbe il malcontento degli utenti nei confronti del programmatore, ciò premesso veniamo a qualcosa di più concreto.
Ecco un'elenco di alcuni tra i più comuni errori :
Inserimento di una stringa a un prompt per la richiesta di un numero
Inserimento di dati che portano a un tentativo di divisione per zero
Tentativo di lettura di un file  che non si trova più sul disco
l'elenco potrebbe continuare.
Contro questi errori il programmatore  può solo dotare il programma di un codice  per la gestione degli errori.Questo compito si può svolgere sfruttando le caratteristiche di VB per l'intercettazione degli errori.Se il programma viene eseguito all'interno dell'ambiente di sviluppo  viene visualizzata   una finestra  di dialogo  che descrive l'errore .La finestra   visualizza il numero di errore  e una breve descrizione,il programma resta sospeso  e se si preme fine termina se si fa click su debug  il cursore viene posto  sulla linea di codice che ha provocato l'errore  e si può modificare   tale codice  e premere poi F5 per riprendere l'esecuzione del programma.
Se invece  si esegue un programma come EXE gli errori non intercettati  vengono visualizzati in una finestra ma non è possibile modificare il codice e continuare l'esecuzione . Quindi in conclusione gli utenti si troverebbero ad avere a che fare con un programma  che non funziona e questa situazione va evitata tramite l'intercettazione degli errori. 

Intercettazionione degli errori
L'intercettazione degli errori  per alcuni aspetti  è simile alla gestione degli eventi.La differenza sta nel fatto che un errore non innesca una routine di eventi discreta e quindi bisogna avvalersi   dell'istruzione On Error per specificare a che punto  del codice saltare se si verifica un errore.Ad es. l'istruzione On Error  Goto Errori significa che se si verifica un errore l'esecuzione deve proseguire   alla riga di codice identificata  dall'etichetta Errori ,le etichette consistono di un nome seguito da due punti es. Errori: .Il codice per la gestione degli errori di solito di una routine viene inserito alla fine della riutine stessa  prima di End Sub.Bisogna ricordarsidi inserire l'istruzione Exit Sub prima dell'etichetta  che identifica il codice di gestione degli errori per impedire   che l'esecuzione  prosegua con il codice di gestione dell'errore.
L'istruzione On Error ha due forme 1) On Error Goto 0 con questa si disattiva  la gestione degli errori. 2) On Error Resume Next il programma continua  l'esecuzione con l'istruzione successiva  a quella che ha generato l'errore. Vediamo ora un es. di codice per l'intercettazione degli errori in una routine.La routine non contiene  vero codice ma solo le istruzioni  che intercettano l'errore e i commenti.
Private Sub DemoErrori( )
A questo punto  prima di qualsiasi On Error  sia eseguito gli errori saranno indicati dalla finestra  di dialogo secondo un'impostazione predefinita.
On Error Goto GliErrori:
Qui  quando si verifica l'errore   l'esecuzione passa al punto identificato dall'etichetta Gli Errori.
On Error Goto 0
Qui il codice di intercettazione  non è attiva gli errori sono notificati nella finestra di dialogo predefinita.
On Error Resume Next
Qui il codice di intercettazione  viene rimandata.
On Error Goto GliErrori:
Qui l'intercettazione  è nuovamente diretta al codice che segue l'etichetta GliErrori. Exit Sub è richiesta , in questo modo l'esecuzione non ricade nel codice di gestione dell'errore seguente.
Exit Sub
GliErrori:
Il codice di gestione degli errori si trova qui.
End Sub

L'oggetto ERR

A ogni programma VB viene assegnato   automaticamente un singolo oggetto ERR, visibile globalmente  e accessibile quindi  da ogni parte del programma.Le proprietà  dell'oggetto ERR che srvono più spesso sono:
Namber : un intero di tipo long che identifica l'errore verificato
Description: descrive l'errore
Source : stringa che identifica il nome dell'oggetto oppure l'applicazione che lo ha generato.
Le prime due  contengono lo stesso codice numerico e la stessa descrizione che vengono presentati nella finestra di dialogo visualizzata quando avviene un errore  e la gestione degli errori non è abilitatà.La proprietà Source  non è molto usata internamente a una'applicazione perchè fornisce solo  il nome del progetto VB; è più utile quando si dispone   di oggetti esterni Un errore tra i più diffusi  è quello che avviene quando   si cerca di aprire un file su un dischetto senza che questo sia stato inserito.Il n. di errore è  71.
Esempio:
Private Sub SaveData ( )
Dim f as long
On Error Goto  FileError
f = FreeFile
Open "a:\junk.dat"
For Binary As #f
Qui viene inserito il codice  per scrivere i dati .
Close #f
Exit Sub
FileError:
If Err.Number =71 Then
MsgBox ( " Si inserisca un dischetto nel drive A:, quindi si prema Ok")
Resume
End If
End Sub
Il codice  proposto funziona ma non lo si può usare   in un programma vero , perchè se si verifica un errore diverso l'esecuzione passa a FileError, ma la condizione IF non sarebbe True e di conseguenza le istruzioni associate   non verebbero eseguite. Al contrario  l'esecuzione uscirebbe dalla routine e l'errore non sarebbe gestito. Questo significa che bisogna creare  un gestore   di errori più generico non così specifico altrimenti si dovrà scrivere molto codice per far fronte a ogni possibile errore

L'istruzione Resume

Quando viene usata  senza argomenti l'esecuzione riprende dall'istruzione che ha causato l'errore, se invece si desidera che l'esecuzione riprenda da un punto diverso esistono due possibilità:
Resume Next - fa riprendere l'esecuzione dall'istruzione  immediatamente successiva   rispetto a quella che ha causato l'errore.
Resume Label -fa riprendere l'esecuzione  a partire dalla riga identificata dall'etichetta.
Private sub SaveData ( )
Dim f As Long, Reply As Integer
Dim msg As String
On Error Goto FileErrori
f = FreeFile
Open "a:\junk.dat" For Binary As #f
Il codice per scrivere i dati si inserisce qua.
Close #f
Exit Sub
FileErrori:
if Err.Number = 71 Then
msg ="Inserire un disco nel drive A e fare click su riprova"
msg = msg & Chr$(13)
msg =msg & "Oppure fare click su cancella per riprovare dopo"
Reply = vbRiprova Then
Resume
If Reply = vbCancella Then
Resume Finish
End If
Collocare qua un'altro errore di gestione del codice
Finish:
End If
Exit Sub

L'istruzione On Resume Next

Quando questa istruzione è attiva e si verifica un errore   l'esecuzione prosegue dall'istruzione
successiva a quella che ha causato l'errore.
Private Sub AccessObjet ( )
Dim MyObj As Objet , msg As String
On Error Resume Next  'Rimanda l'interc. dell'errore
'Cerca di avviare un oggetto che non esiste
MyObj = GetObjet ("MyWord.Basic")
'Test per identif. l'errore 432
If Err.Number =432 Then 'errore di automazione ole
' dire all'utente cosa è accaduto
msg =" Si è verificato un errore nel tentativo di aprire l'oggetto OLE1"
msg = msg & Chr$(13)
msg = msg & "Fonte di errore:  " & Err.Source
msg = msg  & Chr$(13) & "n. di errore: " & Err.Number
MsgBox (msg)
'cancellare le proprietà Err dell'oggetto
Err.Clear
End If
End Sub

Errori definiti dall'utente

Generazione di errori personalizzati. Si attribuisce un n. di errore non utilizzato a un'occorrenza che si desidera considerare un errore.Quando si verifica la condizione di errore  si applicherà il metodo Raise per generare l'errore e gli usuali medoti di gestione dell'errore per trattarlo  ( On Error Goto e Resume ) . Esempio
Private Sub Form_Click ( )
Dim buf As String
On Error Goto ErrorHandler
GetData:
buf = InputBox ("Inserisci qualsiasi nome eccetto Giovanni ")

If buf ="Giovanni" Then Err.Raise 1234, , "Nome errato"
MsgBox ("Grazie")
Exit Sub
ErrorHandler:
If Err = 1234 Then
MsgBox (Err.Description)

Resume GetData
End Sub
I numeri di errore fino al 1000 sono riservati a VB.