Secondo On Error NON intercetta errore



  • Secondo On Error NON intercetta errore
    di marinoernestoch data: 10/10/2017 10:03:35

    Buon giorno.
    Come da titolo, ho notato che in presenza di due errori consecutivi e con l'istruzione On Error Goto etichetta, il primo errore viene intercettato, mentre il secondo NO.
    Modificando la logica, inserendo l' On Error Resume Next e testando l'eventuale codice di errore a posteriori, funziona. Perchè nel caso iniziale ho l'errore? Risulta anche a voi?.
    Il codice sotto, scritto solo per verificare le condizioni, ne è un veloce esempio.
    Grazie.
    marino ernesto
     
    Sub errore()
     ' se resume next: OK
     ' se goto xx:  al secondo errore KO
     Dim comodo$, indirizzo$
       
       ' On Error GoTo no1
        On Error Resume Next
        'comodo = Range(" ").Address
        Kill Environ$("TEMP") & "dati.csv"      'nella direttrice TEMP
        If Err.Number > 0 Then MsgBox "errore dentro = " & Err.Number
        GoTo dopo
    no1:
       MsgBox "errore fuori 1= " & Err.Number
    dopo:
       Err.Clear
       'On Error GoTo no2
       On Error Resume Next
        comodo = Range(" ").Address
       ' Kill Environ$("TEMP") & "dati.csv"       'nella direttrice TEMP
        If Err.Number > 0 Then MsgBox "errore dentro dopo 1 = " & Err.Number
        GoTo qui_errore_non_gestito
    no2:
       MsgBox "errore fuori 2= " & Err.Number
    
    qui_errore_non_gestito:
        Err.Clear
         On Error GoTo vediamo_poi
        Kill Environ$("TEMP") & "dati.csv"      'nella direttrice TEMP
        'If Err.Number > 0 Then MsgBox "errore qui gestito = " & Err.Number
        GoTo dopo_vediamo_poi
    vediamo_poi:
       MsgBox "errore qui gestito fuori = " & Err.Number
    dopo_vediamo_poi:
       Err.Clear
       'On Error Resume Next
       On Error GoTo no_ci_arriva_mai
        comodo = Range(" ").Address
       ' Kill Environ$("TEMP") & "dati.csv"       'nella direttrice TEMP
        If Err.Number > 0 Then MsgBox "errore dentro a vediamo_poi = " & Err.Number
        Err.Clear
        Exit Sub
    no_ci_arriva_mai:
       MsgBox "qui no_ci_arriva_mai 2= " & Err.Number
    End Sub
    



  • di oregon (utente non iscritto) data: 10/10/2017 11:27:39

    In effetti usi male la On Error ...

    Dato che nel codice c'è una confusione elevata, esattamente vorresti spiegare cosa vorresti ottenere ?



  • di marinoernestoch data: 10/10/2017 12:56:51

    Ciao Oregon.
    Come ho detto sopra, le istruzioni non hanno logica! sono SOLO state scritte per dimostrare che a fronte di due ON error Goto, la seconda condizione non viene intercettata. (Per evitare il problema, nella sub che sto scrivendo -che nulla a che vedere con quanto postato- ho già modificato la logica, usando la 'On Error Resume Next.) Quello che chiedo è se anche ad altri utenti è capitata la situazione esposta, oppure se eventualmente esiste un qualche parametro da impostare che governi meglio la gestione di errori multipli.
    Grazie



  • di oregon (utente non iscritto) data: 11/10/2017 17:29:21

    Non so ma se scrivi il codice che ti mostro, non mi pare ci siano problemi


     
        On Error GoTo FirstHandler
        
        Kill "UnFILE"
        GoTo Nxt1
    
    FirstHandler:
        MsgBox "Primo errore"
        Resume Next
        
    Nxt1:
        On Error GoTo SecondHandler
        
        Kill "UnAltroFILE"
        GoTo Nxt2
    
    SecondHandler:
        MsgBox "Secondo errore"
        Resume Next
        
    Nxt2:



  • di marinoernestoch data: 11/10/2017 18:54:03

    OK Oregon.
    Ho imparato l'uso del Resume next (privo di ON Error).
    Mi era parso di capire che dopo un errore fosse consigliato di dare un err.clear.
    Leggendo ora l'help, il Resume next cancella implicitamente l'errore.
    Nella mia 'semplicità', dopo l'Err.Clear scendevo in sequenza; di fatto con Resume torno indietro di un passo, per poi avanzare di due (col Goto) . Ma così funziona: allora ci adeguiamo.
    Grazie della disponibilità Oregon