Incuriosito dal thread di michelecali, dove ho scoperto ON ERROR GOTO/RESUME NEXT, ho fatto una (molto) veloce ricerca su internet dove ho superficialmente capito che:
1 è stato sostituito da TRY/CATCH
2 è stato mantenuto per motivi di compatibilità
3 è meglio usare TRY/CATCH
A scopo didattico, con il codice di test alla fine del post in cui genero un' eccezione sulla conversione da string a byte, ho cercato di fare le stesse cose usando i due metodi.
Penso che salti subito all' occhio che nella sub TRY_CATCH c' è molto più codice e vengono gestiste nel "particolare" solo le eccezioni della textbox1 mentre nella sub ON_ERROR le eccezioni possono essere gestite nel "particolare" per entrambe le textbox.
Quindi non mi spiego i tre punti sopra...mi stò perdendo qualcosa???
NB: portate pazienza, faccio tutt' altro mestiere che il programmatore, sono abbastanza autodidatta
codice:
 
    Dim a As Byte
    Dim b As Byte
    Dim f As String
    Private Sub TRY_CATCH() Handles Button1.Click
        a = 0
        b = 0
        f = ""
        Try
            a = CByte(TextBox1.Text)
        Catch ex As OverflowException
            If MessageBox.Show("errore overflow" & vbCrLf & "continuare?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then
                Exit Sub
            Else
                f = f & "errore: " & ex.Message & vbCrLf
            End If
        Catch ex As InvalidCastException
            If MessageBox.Show("errore testo" & vbCrLf & "continuare?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then
                Exit Sub
            Else
                f = f & "errore: " & ex.Message & vbCrLf
            End If
        Catch ex As Exception
            f = f & "errore: " & ex.Message & vbCrLf
        End Try
        Try
            b = CByte(TextBox2.Text)
        Catch ex As Exception
            f = f & "errore: " & ex.Message & vbCrLf
        End Try
        MsgBox("ERRORI" & vbCrLf & f)
    End Sub

    Private Sub ON_ERROR() Handles Button2.Click
        a = 0
        b = 0
        f = ""
        On Error GoTo Errori
        a = CByte(TextBox1.Text)
        b = CByte(TextBox2.Text)
        On Error GoTo 0
        MsgBox("ERRORI" & vbCrLf & f)
        Exit Sub
Errori:
        If Err.Number = 6 Then
            If MessageBox.Show("errore overflow" & vbCrLf & "continuare?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then
                Exit Sub
            End If
        End If
        If Err.Number = 13 Then
            If MessageBox.Show("errore testo" & vbCrLf & "continuare?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then
                Exit Sub
            End If
        End If
        f = f & "errore N° " & Err.Number & ": " & Err.Description & vbCrLf
        Resume Next
    End Sub