To WIELKIE nieporozumienie! Istnieje ważna różnica pomiędzy:
Err.Clear
GoTo CleanUp
a:
Resume CleanUp
nigdy nie używać pierwszej formy, należy zawsze skrócie czyszczenia (tylko). Wznów, wykonaj RESET wewnętrznego błędu VB6, więc gdy pojawi się INNY błąd, zostanie zastosowana "On Error GoTo Label". Używam "Err.Clear", a następnie obiekt Err zostanie wyczyszczony, ale stan błędu WEWNĘTRZNEGO NIE zostanie wyczyszczony, a gdy pojawi się inny błąd, jest on traktowany jako kod BEZ dowolnego programu obsługi wyjątku i wyrzuca go poza funkcję. Nie można naprawić za pomocą „On Error GoTo Label2”
Rozważmy następujący kod: „ERROR”
Public Sub Test()
On Error GoTo L1
MsgBox 0/(1 - 1)
Exit Sub
L1:
Err.Clear
L0:
On Error GoTo L2
MsgBox 0/(1 - 1) 'ERROR!
Exit Sub
L2:
MsgBox Err
End Sub
Jeśli uruchomić to będzie przerwać na linia. Po zamianie "Err.Clear" na "Resume L0", wykonanie nie przerywa w "ERROR!" linia i kod przeskakują do etykiety "L2" i dostarczają "MsgBox Err"
Pozdrowienia od MarkJ, wiele się z tej odpowiedzi nie uczymy. –
Podczas testów odkryłem, że jeśli błąd zostanie zgłoszony w CleanUp, pętla infinte będzie istniała podskakując między blokami ErrorHandler i CleanUp. Czy zalecana technika ma mieć opcję Wznów błąd przy następnym czyszczeniu? –
@Rich Oliver Tak, właśnie to robię. Sprawdź to pytanie http://stackoverflow.com/questions/536379/how-do-you-handle-errors-in-error-handlers-in-vb6 lub nawet przejrzyj inne pytania oznaczone tagami 'vb6' i' obsługa błędów: http://stackoverflow.com/questions/tagged?tagnames=vb6%2berror-handling&sort=votes&pagesize=15 – MarkJ