vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest środa, 07 maja 2025 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Obsługa błędów


otwartyotwarty rozpoczął: mcgluszak postów: 10



napisał: jalamas
postów: 316


umieszczony:
18 lutego 2007
18:57

edytowany:
18 lutego 2007
19:19

  
on error goto 0.....
proszę jeszcze raz przeczytać, co robi i zasięg, a zwłaszcza kiedy nic nie robi...
Tu nie ma żadnej "paki", że jak mówisz, każde środowisko ma swoje zasady.... na to nie ma rady....
Niemniej jednak, nie wiem po co stosować tę linijkę, przecież MZtools zapewnia generowanie podstawowej obsługi błędów.
Polecam:
http://www.visibleprogress.com/vb_error_handling.htm
napisał: mcgluszak
postów: 36


umieszczony:
18 lutego 2007
16:43

  
Masz rację, nie doczytałem.
Imo Bill dał tu trochę ciała, bo z jakiej paki on error goto pararararabumbum w procedurze wywołującej ma mieć pierwszeńśtwo przed ostatnio wykonaną linią on error goto 0.
Enyłej, dzięki za pomoc.
napisał: jalamas
postów: 316


umieszczony:
18 lutego 2007
14:15

edytowany:
18 lutego 2007
14:16

  
Jakie cudo, przecież wyraźnie w helpie vb i tutaj:
Error Handling With Multiple Procedures (Pearson)
w podanym linku jest to wyjaśnione.
napisał: mcgluszak
postów: 36


umieszczony:
18 lutego 2007
14:02

  
Dzięki za kompleksowe podejście do tematu. Ale cudo chyba na zawsze zostanie tajemnicą - poradziłem sobie starą sprawdzoną techniką: wydupcyłem wszystko w diobły i napisałem od początku. (na moje oko niczym się nie różni, ale działa)
napisał: jalamas
postów: 316


umieszczony:
16 lutego 2007
15:34

edytowany:
16 lutego 2007
21:21

  
Może tak, dodaj nowy moduł, wpisz co następuje...
Oraz potem posługując się Wywolujaca włączać opcje 1,2,3 grupami lub nic
w Wywolywana.
Potem...
Proszę też dla wszystkich tych kombinacji wykonać bezpośrednio
procedurę Wywolywana bez wywoływania !!!!!!!!!!! z innej procedury
tylko z okienka kody VBA zobaczyć rożnice
Option Explicit

Sub Wywolujaca()
    On Error GoTo Wywolujaca_Error

    Call Wywolywana

Wywolujaca_Exit:
    On Error Resume Next
    Exit Sub
Wywolujaca_Error:
    MsgBox "Błąd - " & Err.Number & vbCrLf & _
           "Opis - " & Err.Description & vbCrLf & _
           "Procedura - " & "Wywolujaca !!!!!!!!!!!!!!!!! -przypadek - włączone 3 i 1 LUB nic LUB tylko 1 ", vbExclamation
    Resume Wywolujaca_Exit
End Sub



Sub Wywolywana()

 On Error GoTo Wywolywana_Error ' przypadek 3
Dim a As Double
    ' On Error GoTo 0 ' - 1 wyłącza obsługę błędu w bieżącej procedurze tą co była linijke wyzej !
    ' a skoro nie byloby zadnej to nie bylo zadnej to moze niec nie byc
    
    ' On Error Resume Next ' -2 powoduje przekazanie sterowania do instrukcji, następnej po instrukcji
    a = 1 / 0
    MsgBox "Było On Error Resume Next- przypadek - włączone 3 i 2 LUB tylko 2"

Wywolywana_Exit:

    Exit Sub
Wywolywana_Error:
    MsgBox "Mój komunikat :" & vbNewLine & "Błąd - " & Err.Number & vbCrLf & _
           "Opis - " & Err.Description & vbCrLf & _
           "Procedura - " & "Wywolywana przypadek właczone tylko - 3 ", vbExclamation, "Mój komunikat"
    Resume Wywolywana_Exit
End Sub


patrz:
http://www.iaii.weia.po.opole.pl/dyplomy/VBasic/iso2_t/rozkazy/onerror.htm
http://www.cpearson.com/excel/ErrorHandling.htm
na dole....
napisał: mcgluszak
postów: 36


umieszczony:
16 lutego 2007
11:59

  
Cytat:
Czy należy rozumieć, że po napotkaniu błędu w procedurze B działanie makra natychmiast wyskakuje do procedury A, czy najpierw skoczy np do End Sub procedury B i dopiero potem powrót do procedury A?


wyskakuje od razu do procedury A
napisał: mcgluszak
postów: 36


umieszczony:
16 lutego 2007
11:50

  
Panowie,

nie sądze żeby to miało związek z treścią procedury. Pobawiłem się trochę i ograniczyłem ją do postaci:

Sub LoadSubreportZasiegiTimebandyyy()
On Error GoTo 0
Dim a As Double
a = 1 / 0 ''' - w tym miejscu zamiast się zatrzymać wyskakuje z procedury

End Sub

I w dalszym ciągu zamiast zatrzymać się na dzieleniu przez zero wyskakuje z procedury i wraca linijkę za call LoadSubreportZasiegiTimebandyyy

Dodatkowe hinty:
- jak calluje inną procedurę to dzieje się to samo
- jak zrobie błąd w procedurze wywołującej (przed callowaniem feralnej procedury) to obsługa błędów działa normalnie
- po callowaniu feralnej procedury wyłącza mi się obsługa "on error goto 0" i zachowuje się tak jakgdyby było "on errror resume next" (chociaż takiej linijki wogóle nie mam)
- ale jak włącze jeszcze raz "on error goto 0" to działa normalnie.

(a jak widać z przykładu kodu, w "feralnej procedurze" statement on error goto 0 jest zupełnie zlewany i niezależnie od tego jaka obsługa błędów jest włączona, po prostu wyskakuje z procedury)
napisał: jalamas
postów: 316


umieszczony:
16 lutego 2007
03:48

edytowany:
16 lutego 2007
03:49

  
Cytat:

jakiś syf powoduje
może byś tak uprzejmie zacytował te procedury....
napisał: mcgluszak
postów: 36


umieszczony:
15 lutego 2007
23:03

  
Ghost in the shell?
Dzieje mi się następujące cudo.
Procedura A wywołuje procedurę B.
W procedurze B ze względu na istotę sprawy dałem on error resume next i sprawdzam dopiero na koniec czy błędu nie ma.
A tu niespodzianka.
W momencie napotkania błędu makro wyskakuje z procedury B i wznawia się w procedurze A, zaraz za Call B.

Mało tego.
W procedurze B zamieniam spowrotem na on error goto 0 i nic się nie zmienia: dalej jakiś syf powoduje wyskoczenie z bieżącej procedury.
Restart excela nie pomaga.
No co jest na boga?
Help, bo zaraz pojade do tego ^&#$&$# seattle i zrobię porządki.


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z