Komentáře Programovanie makier v LibreOffice: Chyby (2)

user avatar lp.
Odpovědět
Programovanie makier v LibreOffice: Chyby (2)
17. 05. 2017, 13:07:52
Řešení obsluhy chyb je poměrně složitá.

Příklad na CVErr je hooodně nepovedený. Funce CVErr slouží k informaci o chybě. V příkladu je použita nesmyslně. Její využití může vypadat následovně:

Sub Example
Dim pole(-3 To 3) As Integer
Dim x As Integer

x = 6
pole(-3) = 1
pole(-2) = 2
pole(-1) = 3
pole(0) = 4
pole(1) = 5
pole(2) = 6
pole(3) = 7

Dim retazec As String
For i = -3 To 3

retazec = retazec & "Ideme delit: " & pole(i) & " s " & x

d = Deleni(pole(i), x)
if iserror(d) then
if d = CVErr("Nula") then
retazec = retazec & " Nulou nedělíme!" & Chr(10)
else
retazec = retazec & " Nejde dělit!" & Chr(10)
end if
else
retazec = retazec & " sa rovna: " & pole(i)/x & Chr(10)
end if

x = x - 1
Next

MsgBox retazec
End Sub


function Deleni(a as variant, b as variant) as variant

on error goto Chyba
Deleni = a / b
exit function

Chyba: ' Funkce končí korektně ale hodnota signalizuje chybu
if b = 0 then
Deleni = CVErr("Nula")
else
Deleni = CVErr("Jiná chyba")
endif
end function

Příklad použití RESUME NEXT ve spojení ON ERROR se řadí k nejhorší praxi programátora. Program doběhne a nevaruje, že je něco špatně.

Jeho použití by mělo být omezeno jen na nezbytnou část kódu. Příkaz zároveň nuluje proměnnou ERR a je vhodné následně tuto proměnnou zkontrolovat.

Mimochodem, jeho platnost se ukončuje ON ERROR GOTO 0.
 
 
woo jaw demo hz