Ultima riga VBA

di il
3 risposte

Ultima riga VBA

Buongiorno a tutti.

Chiedo agli esperti se esiste un modo per CONOSCERE l'ultima riga di comando VBA eseguita.

Mi spiego meglio. Il mio database è strutturato con una modalità Debug ed una RunTime che bypassa con un semplice resume l'avvenire di un errore (questo per evitare che l'applicativo che viene eseguito a 400km da casa mia vada in blocco per errori banali di sintassi ecc ecc). Affiancato al resume ho imposto al database di comunicarmi via mail il tipo di errore, l'utente connesso, le maschere aperte e sto lavorando sul controllo attivo... Ma sarebbe utile al fine di trovare più rapidamente l'errore anche conoscere l'ultimo comando VBA eseguito prima dell'errore.

E' una cosa fattibile?

3 Risposte

  • Re: Ultima riga VBA

    Certo. teoricamente dovrebbe essere fattibile ma.....
    Devi mettere le righe al codice, ma da quello che ricordo non è proprio agevole gestire la cosa, perchè comunque i messaggi di errore di sistema hanno la priorità e rischi sopratutto di creare dei loop che impediscono l'interruzione dell'applicazione, a volte impossibile da sbloccare anche con ctrl+break
    sconsigliabile.
    Devi usare il metodo nascosto della libreria VB
    VBA.Information.Erl
    ecco un esempio di errore generato.
    
    On Error GoTo VisualizzaERL
    
    
    10 Err.Raise 1, , "errore di prova"
    EsciVisualizzaERL:
    Exit Sub
    
    VisualizzaERL:
    MsgBox Err.Description & vbCrLf & "avvenuto alla riga " & VBA.Information.Erl
    Resume EsciVisualizzaERL
    Resume
    Altro errore con definizione di assegnazione alla variabile
    
    Dim pippo As Integer
    
    On Error GoTo VisualizzaERL
    
    
    '10 Err.Raise 1, , "errore di prova"
    20 pippo = "mio"
    EsciVisualizzaERL:
    Exit Sub
    
    VisualizzaERL:
    MsgBox Err.Description & vbCrLf & "avvenuto alla riga " & VBA.Information.Erl
    Resume EsciVisualizzaERL
    Resume
    
    Ma... nella gestione degli errori non è molto agevole.
    Ti rimando alla documentazione:
    https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/raise-method
    Il prossimo link riguarda VB6, ma dovrebbe essere lo stesso in VBA

    https://learn.microsoft.com/it-it/dotnet/api/microsoft.visualbasic.information.erl?view=net-6.0
  • Re: Ultima riga VBA

    LoScortese ha scritto:


    Ma sarebbe utile al fine di trovare più rapidamente l'errore anche conoscere l'ultimo comando VBA eseguito prima dell'errore.
    (nel frattempo fratac ha già dato una buona mano, ormai ho scritto e proseguo)
    Esiste la funzione Erl che restituisce il numero di riga che ha dato l'errore, però il codice deve essere scritto con i numeri di riga, altrimenti dirà sempre 0
    Private Sub ErrorTest()
    10 On Error GoTo ErrorHandler
    20 Eval(1/0)
    
    30 ExitSub:
    40 Exit Sub
    
    50 ErrorHandler:
    60 Debug.Print Err.Description & " on line " & Erl
    70 Resum Exit
    
    End Sub
    (è codice scritto al volo, tanto per far capire/vedere il discorso della numerazione delle righe)
    Raramente si trova codice scritto in questo modo se non per comodità di riferimento ad una righa precisa (ad esempio se si posta su un forum una routine particolarmente lunga)
    Se l'ambiente in cui il tuo db gira non è quello di solo runtime (nel post parli di una modalità debug e una runtime ma non capisco bene a cosa ti riferisci) non molto tempo ho trovato questo
    https://sites.google.com/site/msaccesscode/vba-3/showerrorlineinvba
    in cui, in pratica, il codice genera al volo una routine numerata clone di quella in cui l'errore si è veramente verificato. E' ovvio che serve Access completo e che non sia un mde/accde in cui l'editor VBA non è gestibile.
    La pagina fa rifermento al "glorioso" MzTools che però non è più freeware e le recenti versioni di Access sono incompatibili con la versione 3.
  • Re: Ultima riga VBA

    Philcattivocarattere ha scritto:


    Private Sub ErrorTest()
    
    20 Eval(1/0)
    
    
    
    
    
    End Sub
    Grazie.
    Non conoscevo EVAL.
Devi accedere o registrarti per scrivere nel forum
3 risposte