onerror
Rozkaz On Error
Rozkaz On Error
Instrukcja służy do przekazania sterowania podczas powstania błędu do podprogramu obsługi błędu w procedurze. Może być także użyta do wyłączenia obsługi błędu.
Składnia instrukcji On Error:
On Error GoTo Linia
On Error Resume Next
On Error GoTo 0
Składnia instrukcji On Error może mieć następujące formy:
On Error GoTo Linia
Włącza kod obsługi błędu, który zaczyna się od linii określonej przez argument Linia. Argument Linia może być etykietą linii albo numerem linii. Jeżeli wystąpi błąd w czasie wykonania programu, sterowanie zostaje przekazane do Linii i wykonywana jest obsługa błędu. Określona Linia musi znajdować się w tej samej procedurze co instrukcja On Error; w przeciwnym razie wystąpi błąd w trakcie kompilacji programu.
On Error Resume Next
W chwili wystąpienia błędu, sterowanie zostaje przekazane do instrukcji, następnej po instrukcji, która spowodowała wystąpienie błędu i wykonanie programu jest kontynuowane. Należy używać tej formy zamiast On Error GoTo przy dostępie do obiektu.
On Error GoTo 0
Wyłącza wszystkie kody obsługi błędu w procedurze, w której jest użyta.
Jeżeli nie zostanie użyta instrukcja On Error, wówczas gdy wystąpi błąd w trakcie wykonania programu, to błąd jest fatalny tzn. zostanie wyświetlony tylko komunikat błędu i wykonanie programu zostanie przerwane.
Obsługa błędu jest włączona, kiedy jest w procedurze umieszczona instrukcja On Error, natomiast jest aktywna wtedy, gdy jest przez nią obsługiwany błąd. Jeżeli wystąpi błąd gdy obsługa błędu jest aktywna (błąd w czasie obsługi błędu) (pomiędzy wystąpieniem błędu i instrukcją Resume, Exit Sub, Exit Function, Exit Property), aktualna obsługa błędu procedury nie może obsłużyć błędu. Sterowanie powraca do procedury wywołującej. Jeżeli wywołująca procedura posiada włączoną obsługę błędu, to jest ona aktywowana do obsłużenia błędu. Jeżeli w wywołującej procedurze obsługa błędu jest także aktywna, sterowanie powraca do poprzednio wywołującej procedury aż do znalezienia włączonej, ale nieaktywnej obsługi błędu. Jeżeli nie zostanie znaleziona włączona ale nieaktywna obsługa błędu, wówczas błąd jest fatalny, praktycznie w momencie w którym wystąpi. Za każdym razem gdy obsługa błędu zwraca sterowanie to procedury która ją wywołała, to staje się ona bieżącą procedurą. Gdy błąd jest obsługiwany przez obsługę błędu w jakiejkolwiek procedurze, wykonanie programu jest kontynuowane w bieżącej procedurze w punkcie wyznaczonym przez instrukcję Resume.
Kod obsługi błędu nie jest procedurą Sub ani procedurą Function. Jest to część kodu wyznaczona przez etykietę linii lub numer linii.
W kodzie obsługi błędu przyczyna wystąpienia błędu sprawdzana jest poprzez wartość właściwości Number obiektu Err.
Kod obsługi błędu powinien sprawdzać lub zapisywać istotne wartości właściwości obiektu Err zanim może wystąpić jakiś kolejny błąd lub zanim zostanie wywołana procedura, która może spowodować błąd. Wartości właściwości obiektu Err odzwierciedlają tylko ostatnio wystąpienie błędu. Komunikat błędu odpowiedni do Err.Number znajduje się w Err.Description.
Instrukcja On Error Resume Next powoduje przekazanie sterowania do instrukcji, następnej po instrukcji, która spowodowała wystąpienie błędu, i kontynuowanie programu lub do instrukcji następnej po ostatnio wzywanej procedurze zawierającej instrukcję On Error Resume Next. Ta instrukcja pozwala przywrócic wykonywanie programu pomimo wystąpienia błędu w czasie wykonania programu. Można umieścić obsługę błędu tam gdzie błąd może wystąpić, zamiast przenoszenia kontroli w inną lokalizację w procedurze. Instrukcja On Error Resume Next staje się nieaktywana jeżeli inna procedura jest wywołana, więc należy umieszczać tą instrukcję w każdym bloku programu, w którym ma być wykonywana natychmiastowa obsługa błędu.
Instrukcja On Error GoTo 0 wyłącza obsługę błędu w bieżącej procedurze. Nie określa ona linii 0 jako początku kodu obsługi błędu, nawet jeżeli procedura zawiera linię o numerze 0. Bez instrukcji On Error GoTo 0, obsługa błędu jest wyłączana kiedy procedura jest opuszczana.
Aby zapobiec uruchamianiu kodu obsługi błędu, gdy nie wystąpi żaden błąd, należy bezpośrednio przed tym kodem umieszczać instrukcję Exit Sub, Exit Function, Exit Property, jak w przykładzie:
Sub MojaProcedura
On Error Goto ObslugaBledow
. . .
Exit Sub
ObslugaBledow:
. . .
Resume Next
End Sub
Kod obsługi błędów zaczyna się tu za rozkazem Exit Sub a kończy przed End Sub, aby oddzielić go od reszty procedury. Blok obsługi błędów może się znajdować w dowolnym miejscu w procedurze.
Nieprzechwytywalne błędy w obiektach są zwracane do aplikacji kontrolującej podczas, gdy obiekt jest wykonywany z pliku wykonywalnego. W środowisku programistycznym nieprzechwytywalne błędy są tylko zwracane do aplikacji kontrolującej, jeżeli zostaną ustawione odpowiednie opcje. Należy przeczytać w dokumentacji aplikacji nadrzędnej (host), które opcje powinny być ustawione w czasie debuggowania i jak to zrobić.
na górę strony...
Poprzednia |
Wyżej |
Strona główna |
Spis Treści |
Index haseł |
Opis VB
Rozkaz On Error
Rozkaz On Error
Instrukcja sĹuĹźy do przekazania sterowania podczas powstania bĹÄdu do podprogramu obsĹugi bĹÄdu w procedurze. MoĹźe byÄ takĹźe uĹźyta do wyĹÄ
czenia obsĹugi bĹÄdu.
SkĹadnia instrukcji On Error:
On Error GoTo Linia
On Error Resume Next
On Error GoTo 0
SkĹadnia instrukcji On Error moĹźe mieÄ nastÄpujÄ
ce formy:
On Error GoTo Linia
WĹÄ
cza kod obsĹugi bĹÄdu, ktĂłry zaczyna siÄ od linii okreĹlonej przez argument Linia. Argument Linia moĹźe byÄ etykietÄ
linii albo numerem linii. JeĹźeli wystÄ
pi bĹÄ
d w czasie wykonania programu, sterowanie zostaje przekazane do Linii i wykonywana jest obsĹuga bĹÄdu. OkreĹlona Linia musi znajdowaÄ siÄ w tej samej procedurze co instrukcja On Error; w przeciwnym razie wystÄ
pi bĹÄ
d w trakcie kompilacji programu.
On Error Resume Next
W chwili wystÄ
pienia bĹÄdu, sterowanie zostaje przekazane do instrukcji, nastÄpnej po instrukcji, ktĂłra spowodowaĹa wystÄ
pienie bĹÄdu i wykonanie programu jest kontynuowane. NaleĹźy uĹźywaÄ tej formy zamiast On Error GoTo przy dostÄpie do obiektu.
On Error GoTo 0
WyĹÄ
cza wszystkie kody obsĹugi bĹÄdu w procedurze, w ktĂłrej jest uĹźyta.
JeĹźeli nie zostanie uĹźyta instrukcja On Error, wĂłwczas gdy wystÄ
pi bĹÄ
d w trakcie wykonania programu, to bĹÄ
d jest fatalny tzn. zostanie wyĹwietlony tylko komunikat bĹÄdu i wykonanie programu zostanie przerwane.
ObsĹuga bĹÄdu jest wĹÄ
czona, kiedy jest w procedurze umieszczona instrukcja On Error, natomiast jest aktywna wtedy, gdy jest przez niÄ
obsĹugiwany bĹÄ
d. JeĹźeli wystÄ
pi bĹÄ
d gdy obsĹuga bĹÄdu jest aktywna (bĹÄ
d w czasie obsĹugi bĹÄdu) (pomiÄdzy wystÄ
pieniem bĹÄdu i instrukcjÄ
Resume, Exit Sub, Exit Function, Exit Property), aktualna obsĹuga bĹÄdu procedury nie moĹźe obsĹuĹźyÄ bĹÄdu. Sterowanie powraca do procedury wywoĹujÄ
cej. JeĹźeli wywoĹujÄ
ca procedura posiada wĹÄ
czonÄ
obsĹugÄ bĹÄdu, to jest ona aktywowana do obsĹuĹźenia bĹÄdu. JeĹźeli w wywoĹujÄ
cej procedurze obsĹuga bĹÄdu jest takĹźe aktywna, sterowanie powraca do poprzednio wywoĹujÄ
cej procedury aĹź do znalezienia wĹÄ
czonej, ale nieaktywnej obsĹugi bĹÄdu. JeĹźeli nie zostanie znaleziona wĹÄ
czona ale nieaktywna obsĹuga bĹÄdu, wĂłwczas bĹÄ
d jest fatalny, praktycznie w momencie w ktĂłrym wystÄ
pi. Za kaĹźdym razem gdy obsĹuga bĹÄdu zwraca sterowanie to procedury ktĂłra jÄ
wywoĹaĹa, to staje siÄ ona bieĹźÄ
cÄ
procedurÄ
. Gdy bĹÄ
d jest obsĹugiwany przez obsĹugÄ bĹÄdu w jakiejkolwiek procedurze, wykonanie programu jest kontynuowane w bieĹźÄ
cej procedurze w punkcie wyznaczonym przez instrukcjÄ Resume.
Kod obsĹugi bĹÄdu nie jest procedurÄ
Sub ani procedurÄ
Function. Jest to czÄĹÄ kodu wyznaczona przez etykietÄ linii lub numer linii.
W kodzie obsĹugi bĹÄdu przyczyna wystÄ
pienia bĹÄdu sprawdzana jest poprzez wartoĹÄ wĹaĹciwoĹci Number obiektu Err.
Kod obsĹugi bĹÄdu powinien sprawdzaÄ lub zapisywaÄ istotne wartoĹci wĹaĹciwoĹci obiektu Err zanim moĹźe wystÄ
piÄ jakiĹ kolejny bĹÄ
d lub zanim zostanie wywoĹana procedura, ktĂłra moĹźe spowodowaÄ bĹÄ
d. WartoĹci wĹaĹciwoĹci obiektu Err odzwierciedlajÄ
tylko ostatnio wystÄ
pienie bĹÄdu. Komunikat bĹÄdu odpowiedni do Err.Number znajduje siÄ w Err.Description.
Instrukcja On Error Resume Next powoduje przekazanie sterowania do instrukcji, nastÄpnej po instrukcji, ktĂłra spowodowaĹa wystÄ
pienie bĹÄdu, i kontynuowanie programu lub do instrukcji nastÄpnej po ostatnio wzywanej procedurze zawierajÄ
cej instrukcjÄ On Error Resume Next. Ta instrukcja pozwala przywrĂłcic wykonywanie programu pomimo wystÄ
pienia bĹÄdu w czasie wykonania programu. MoĹźna umieĹciÄ obsĹugÄ bĹÄdu tam gdzie bĹÄ
d moĹźe wystÄ
piÄ, zamiast przenoszenia kontroli w innÄ
lokalizacjÄ w procedurze. Instrukcja On Error Resume Next staje siÄ nieaktywana jeĹźeli inna procedura jest wywoĹana, wiÄc naleĹźy umieszczaÄ tÄ
instrukcjÄ w kaĹźdym bloku programu, w ktĂłrym ma byÄ wykonywana natychmiastowa obsĹuga bĹÄdu.
Instrukcja On Error GoTo 0 wyĹÄ
cza obsĹugÄ bĹÄdu w bieĹźÄ
cej procedurze. Nie okreĹla ona linii 0 jako poczÄ
tku kodu obsĹugi bĹÄdu, nawet jeĹźeli procedura zawiera liniÄ o numerze 0. Bez instrukcji On Error GoTo 0, obsĹuga bĹÄdu jest wyĹÄ
czana kiedy procedura jest opuszczana.
Aby zapobiec uruchamianiu kodu obsĹugi bĹÄdu, gdy nie wystÄ
pi Ĺźaden bĹÄ
d, naleĹźy bezpoĹrednio przed tym kodem umieszczaÄ instrukcjÄ Exit Sub, Exit Function, Exit Property, jak w przykĹadzie:
Sub MojaProcedura
On Error Goto ObslugaBledow
. . .
Exit Sub
ObslugaBledow:
. . .
Resume Next
End Sub
Kod obsĹugi bĹÄdĂłw zaczyna siÄ tu za rozkazem Exit Sub a koĹczy przed End Sub, aby oddzieliÄ go od reszty procedury. Blok obsĹugi bĹÄdĂłw moĹźe siÄ znajdowaÄ w dowolnym miejscu w procedurze.
Nieprzechwytywalne bĹÄdy w obiektach sÄ
zwracane do aplikacji kontrolujÄ
cej podczas, gdy obiekt jest wykonywany z pliku wykonywalnego. W Ĺrodowisku programistycznym nieprzechwytywalne bĹÄdy sÄ
tylko zwracane do aplikacji kontrolujÄ
cej, jeĹźeli zostanÄ
ustawione odpowiednie opcje. NaleĹźy przeczytaÄ w dokumentacji aplikacji nadrzÄdnej (host), ktĂłre opcje powinny byÄ ustawione w czasie debuggowania i jak to zrobiÄ.
na gĂłrÄ strony...
Poprzednia |
WyĹźej |
Strona gĹĂłwna |
Spis TreĹci |
Index haseĹ |
Opis VB
Wyszukiwarka
WystâpiĹ bĹâd podczas wyszukiwania.
WiÄcej podobnych podstron228/5702,
234/882,
210/622,
140/7880,
108/865,
126/7576,
711/5147,
707/8296,
715/5763,
1011/264,
1003/9607,
1025/1009,