Una Gestione degli Errori presentata da Andrea Bruno.    e-mail : br.and@inwind.it

Andrea si dichiara un neofita del VBA, ma ha realizzato una routine di gestione degli errori tipici del foglio di lavoro che ritengo meriti di essere segnalata. Potrą interessare sicuramente il come ha sviluppato le istruzioni basate sulla Funzione CVErr e le sue Costanti, unita ad una gestione delle condizioni di verifica basate sull'istruzione Select Case al posto dei tradizionali If...Then. La funzionalitą della routine č efficace, anche se strettamente legata ad un suo problema, comunque valida per l'idea di far sostituire una formula (sul foglio di lavoro) modificandola, sempre via codice, con una formula che preveda l'errore. La sua necessitą primaria era di modificare in un foglio con 10000 celle occupate, le molte celle che ospitavano una formula di divisione dei valori tra le due celle a lato. Se una delle due celle, o entrambe, sono vuote o uguali a zero, Excel pone un messaggio di errore nella cella della formula in quanto non č concesso fare divisioni per zero. Andrea ha quindi sfruttato una formula condizionale che controlla SE la formula fornisce un errore, sostituisce il risultato con un asterisco (*), altrimenti fa eseguire la divisione. Ognuno ne tragga le idee che gli possono interessare. Questa la routine:

Private Sub CommandButton1_Click()
   Worksheets("Foglio1").Activate
   Dim r, c As Long
     For r = 1 To 100
         For c = 1 To 100
         If IsError(Cells(r, c).Value) And Cells(r, c).HasFormula _
         And Cells(r, c).FormulaR1C1 = "=RC[-1]/RC[-2]" Then
             valerrore = Cells(r, c).Value
         Select Case valerrore
             Case CVErr(xlErrDiv0)
    Cells(r, c).FormulaR1C1 = "=IF(ISERROR(RC[-1]/RC[-2]),""*"",(RC[-1]/RC[-2]))"
             Case CVErr(xlErrNA)
                 MsgBox "Si č verificato un errore di tipo #N/D"
             Case CVErr(xlErrName)
                 MsgBox "Si č verificato un errore di tipo #NOME?"
             Case CVErr(xlErrNull)
                 MsgBox "Si č verificato un errore di tipo #NULLO!"
             Case CVErr(xlErrNum)
                 MsgBox "Si č verificato un errore di tipo #NUM!"
             Case CVErr(xlErrRef)
                 MsgBox "Si č verificato un errore di tipo #RIF!"
             Case CVErr(xlErrValue)
                 MsgBox "Si č verificato un errore di tipo #VALORE!"
             Case Else
                 MsgBox "Questo errore non dovrebbe mai verificarsi!"
         End Select
         End If
         Next c
     Next r
 End Sub

Un bravo ed grazie ad Andrea.