< návrat zpět

MS Excel


Téma: On error goto 0 rss

Zaslal/a 12.8.2014 17:53

Ahoj,
napište, prosím, co víte o příkazu On Error GoTo 0.

Díky

Zaslat odpověď >

Strana:  1 2   další »
#021067
avatar
Strýček Google neporadil?
P.citovat
#021068
avatar
Jde mi o to zjistit co je obecne znamo. Na to se strejda moc nehodi. Vyrusim zachytavani chyb a dal...?
Dikycitovat
#021069
avatar
Muze to byt treba vedlejsi efekt,ktery cloveka na prvni pohled netrkne atp...citovat
#021074
avatar
Já o tom vím toto.
On Error Resume Next potlačí přerušení při chybě, pokračuje se dalším řádkem a umožní to vlastní zpracování chyby podle čísla chyby Err.Number
On Error Goto 0 zase zapne zachytávání chyb, nastaví kód chyby na Nothingcitovat
#021075
avatar
On error pri chybe vytvori objekt err a pomoci konstruktoru preda hodnoty do instancnich datovych slozek objektu err (number, desc. apod)? Pri pouziti ...GoTo 0 je objekt err. uvolnen z pameti a je zruseno cosi co pri chybe vytvari objekt err pri chybe? Jak to podle Vas je?citovat
#021076
avatar
Je objekt err osamelec (singleton), vytvoji se vzdy Jen jedna instance?citovat
icon #021077
eLCHa
Já jsem jen amatér a nemám žádné IT vzdělání, takže pokud to nebude odborně správně tak se omlouvám, ale:

On error pri chybe vytvori objekt err a pomoci konstruktoru preda hodnoty do instancnich datovych slozek objektu err?
Nevytvoří - Objekt Err je (pravděpodobně) vytvořen prvním spuštěním kódu a (pravděpodobně) zaniká ukončením kódu. To si ověříte jednoduše, pokud si vytvoříte nejjednodušší proceduru jaká lze a toSub test()
End Sub
umístíte na ni kurzor, pravým tlačítkem vyberete Add Watch... a do Expression vložíte Err. Zobrazíte si okno Watches a na proceduře stisknete F8. Okamžitě vidíte, že existuje objekt Err s hodnotou 0.
Pravděpodobně je tam proto, že možná existuje celou dobu s aplikací, ale to nevím a tuto informaci ani nepotřebuji, takže to nezkoumám.

Takže pokud tomu výrazu rozumím, tak ano je to Singleton. Upravte si kódSub test()
On Error Resume Next
a = 1 / 0
Dim b As Byte
b = 1000
End Sub
a opět krokujte a uvidíte, že se mění tentýž jediný objekt

Instrukce On Error pouze nastavuje, jak se má kód chovat, pokud narazí na chybu.
http://support.microsoft.com/kb/141571/en-uscitovat
#021081
avatar
Svůj text jsem nemyslel jako tvrzení, a proto bych na konci Vaši citace uvítal "...?" Ale nechci být hnidopich, protože jsem Vám za Vaší odpověď vděčný.

Došel jsem k podobným závěrům, i když jiným způsobem.
Jde mi především o upozornění na zvláštní chování On error GoTo 0 případně i okolo objetu err a příkatu On error (Resume nest, Goto ErrorHandler atp)..
Spoléhám na Vaší odbornost, abych nemusel provádět řadu testů. Děškuji za pochopení

Viz dále v kódu

Sub Test()

Dim objErr As ErrObject
Dim objErr1 As ErrObject
Dim objWBook As Workbook

'Test existence objektu err - můžu získat vlastnost objektu
Debug.Print Err.Number

'Další test existence - můžu spustit metodu objektu
Err.Clear

'Další test existence
If Err Is Nothing Then
Debug.Print "Err is nothing"
Else
Debug.Print "Err not is nothing"
End If


'------

'Vlastnost Number je kupodivu i pro zápis
Err.Number = 5

'Desc. jakby smet
Err.Description = "Prd"

'...důkaz
Debug.Print Err.Number
Debug.Print Err.Description

'------

'Přkaz, který mě zajímá
On Error GoTo 0

'On error goto 0 "resetuje" vlastnosti objektu,
'tedy pouze nenastavuje chování
'Takové chování mě zajímá
Debug.Print Err.Number ' vrátí nulu
Debug.Print Err.Description = vbNullString

'------

'Získat odkaz na objekt err
Set objErr = Err
Set objErr1 = Err

'Přiřazení hodnot vlastnostem pro následné testování
objErr.Number = 1
objErr1.Number = 5

'objErr a objErr1 odkazují na stejný objekt err v paměti
Debug.Print "err:" & objErr.Number
Debug.Print "err1:" & objErr1.Number

'..zdá se, že ano
Debug.Print CStr(objErr Is objErr1)

'Funguje test?
Debug.Print CStr(objErr Is objWBook)

'------

'Nějaké další postřehy, prosím....

End Subcitovat
icon #021083
eLCHa
? doplněn ;)

Tak Err existuje určitě jen 1 - ověřil jsem pomocí následujícího kóduSub test11()
On Error Resume Next

Dim err1 As ErrObject
a = 1 / 0
Debug.Print Err.Number, Err.Description

Call test12(Err)

Debug.Print Err.Number, Err.Description
End Sub

Sub test12(err1 As ErrObject)
On Error Resume Next

Dim b As Byte
b = 1000

Debug.Print Err.Number, Err.Description
Debug.Print err1.Number, err1.Description
End Sub
Dokonce nepomůže ani odkaz hodnotouSub test12(ByVal err1 As ErrObject)Jde prostě o referenci na objekt a když ho dáte do dvou proměnných, obě odkazují na tentýž objekt. Je to podobné jakoSub test2()
Dim r As Range
Set r = Range("A1")
Debug.Print CStr(r.Value)
'změňte hodnotu v buňce A1
Debug.Print CStr(r.Value)
End Sub
Také se vždy zobrazí aktuální hodnota a ne hodnota v době nastavení.

Pokud si chcete uchovat 2 chybové hodnoty, můžete to udělat následovněSub test()
Dim err1 As Long, err2 As Long
On Error Resume Next
a = 1 / 0
err1 = Err.Number

Dim b As Byte
b = 1000
err2 = Err.Number
Debug.Print err1, Error(err1)
Debug.Print err2, Error(err2)
End Sub


Jde mi především o upozornění na zvláštní chování On error GoTo 0 případně i okolo objetu err a příkatu On error (Resume nest, Goto ErrorHandler atp)..
V čem Vám to přijde podivné?

Chcete dosáhnout něčeho konkrétního nebo jen zkoumáte?citovat
#021090
avatar
Ano 1 , jak jsme oba dokázali v kódu. Takže je to buď statický obj nebo singleton. Spíše to první.

"Zvláštním" jsem neměl namysli podivné, ale spíše záludné.

Jde mi o emulaci v jiném jazyku
Děkuji moc za účast. Hezký dencitovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje