Nata
Norint pasiekti šį puslapį, reikalingas leidimas. Galite pabandyti prisijungti arba pakeisti katalogus.
Norint pasiekti šį puslapį, reikalingas leidimas. Galite pabandyti pakeisti katalogus.
| Funkcijos | Taikoma (kam) |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
Aptinka klaidas ir pateikia alternatyvią reikšmę arba atlieka veiksmus. Sukurkite pasirinktinę klaidą arba perduokite klaidą.
Pastaba.
Jei programa išjungė formulės lygio klaidų valdymo funkciją, esančią dalyje Pašalinti parametrų>naujinimai>, šios funkcijos neveiks tinkamai.
IfError
Funkcija IfError tikrina reikšmes, kol randa klaidą. Jei funkcija aptinka klaidą, ji įvertina ir pateikia atitinkamą pakaitinę reikšmę bei sustabdo tolimesnį vertinimą. Taip pat gali būti pateikta numatytoji reikšmė, kai klaidų nerandama. Struktūra panaši į funkcijos If: IfErrorIfError tikrina, ar yra klaidų, o Jei tikrina, ar yra teisinga.
Naudokite IfError klaidai pakeisti tinkama reikšme, kad tolesni skaičiavimai galėtų būti atliekami toliau. Pavyzdžiui, šią funkciją naudokite, jei gali būti, kad vartotojo įvestis yra dalyba iš nulio:
IfError( 1/x, 0 )
Ši formulė pateikia 0 , jei reikšmė x lygi nuliui, kaip 1/x pateikia klaidą. Jei x nėra nulis, pateikiama 1/x.
Tolimesnio apdorojimo sustabdymas
Formules sujungiant į grandinęveikimo formulėse, pvz.:
Patch( DS1, ... );
Patch( DS2, ... )
Bus bandoma vykdyti antrąją funkciją Patch su DS2, net jei Patch su DS1 nepavyksta. Klaida aprėpia tik kiekvieną į grandinę sujungtą formulę.
Naudokite IfError veiksmui atlikti ir toliau apdoroti, tik jei veiksmas buvo sėkmingas. Taikoma IfError šiame pavyzdyje:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Jei, vykdant DS1, kyla problema, vykdoma pirmoji Notify. Daugiau nieko neapdorojama, įskaitant antrąją DS2. Jei pirmoji Patch bus sėkminga, bus vykdoma antroji Patch.
Jei klaidų neaptinkama, pateikiamas pasirenkamasis argumentas DefaultResult (jei pateiktas). Jei šis argumentas nepateiktas, pateikiamas paskutinis Value argumentas.
Remiantis paskutiniu pavyzdžiu galima patikrinti grąžinamą reikšmę, IfError kad būtų galima nustatyti, ar kilo problemų:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Tipų suderinamumas
IfError grąžina vieno iš argumentų reikšmę. Visų reikšmių, kurias IfError gali grąžinti, tipai turi būti suderinami.
Paskutiniame pavyzdyje Patch pateikia įrašą, kuris nesuderinamas su Bulio logika, naudojama pakeitimo formulėms arba DefaultResult. Tai gerai, nes nėra situacijos, kai grąžinama reikšmė iš šių Pataisa iškvietimų būtų grąžinta IfError.
Pastaba.
Kol vyksta keitimo veikimas, visų argumentų tipai turi būti suderinami IfError šiuo metu.
Paprastame pavyzdyje, kuris buvo aprašytas anksčiau:
IfError( 1/x, 0 )
Tipai 1/x ir 0 buvo suderinami, kadangi abu yra skaičiai. Jei taip nėra, antrasis argumentas yra priverstas atitikti pirmojo argumento tipą.
Excel rodo#DIV /0! kai įvyksta padalijimas iš nulio.
Verčiau apsvarstykite IfError šiuos dalykus:
IfError( 1/x, "#DIV/0!" )
Pirmiau pateikta formulė neveiks. Teksto eilutė "#DIV/0!" perkoduojama į pirmojo argumento į IfErrortipą , kuris yra skaičius.
IfError Rezultatas yra dar viena klaida, nes teksto eilutės negalima pakeisti. Pataisydami konvertuokite pirmąjį argumentą į teksto eilutę, kad IfError visada būtų pateikiama teksto eilutė:
IfError( Text( 1/x ), "#DIV/0!" )
Kaip parodyta anksčiau, gali pateikti klaidą, IfError jei klaida yra Pakaitinis arba DefaultResult .
Pirmoji klaida / Visos klaidos
Pakeitimo formulėse informacija apie rastas klaidas yra pasiekiama naudojant FirstError įrašą ir AllErrors lentelę. AllErrors yra klaidų informacijos įrašų lentelė, kurioje FirstError yra nuoroda į pirmąjį šios lentelės įrašą. FirstError visada grąžina tą pačią reikšmę kaip First (AllErrors ).
Error įrašai:
| Laukas | Tipas | Aprašą |
|---|---|---|
| Rūšis | ErrorKind išvardijimas (skaičius) | Klaidos kategorija. |
| Pranešimas | Teksto eilutė | Pranešimas apie klaidą, tinkamas rodyti galutiniam vartotojui. |
| Šaltinis | Teksto eilutė | Vieta, kur atsirado klaida, naudojama ataskaitoms. Pavyzdžiui, formulės, susietos su valdiklio ypatybe, reikšmė yra formoje ControlName.PropertyName. |
| Pastebėta | Teksto eilutė | Vieta, kur vartotojui rodoma klaida, naudojama ataskaitoms. Pavyzdžiui, formulės, susietos su valdiklio ypatybe, reikšmė yra formoje ControlName.PropertyName. |
| Išsami informacija | Įrašas | Informacija apie klaidą. Šiuo metu išsami informacija pateikiama tik apie tinklo klaidas. Šis įrašas apima HttpStatusCode , kuriame yra HTTP būsenos kodas, ir HttpResponse , kuriame yra atsakymas iš jungties arba tarnybos tekstas. |
Pavyzdžiui, apsvarstykite galimybę šią formulę naudoti kaip mygtuko valdiklio ypatybę OnSelect:
Set( a, 1/0 )
O ši formulė antrojo OnSelect ypatybė antrajam Mygtukui valdikliui:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
Aukščiau pateiktoje formulės pavyzdyje rodoma ši reklaminė juosta, kai du mygtukai aktyvuojami seka:
Paprastai bus tik viena klaida, su kuria "FirstError" gali pakankamai dirbti. Tačiau yra scenarijų, kai gali būti pateiktos kelios klaidos. Pvz., naudojant formulės sujungimo į grandinę operatorių arba funkciją Concurrent ". Net ir šiais atvejais gali užtekti pranešti apie FirstError norint parodyti problemą, užuot apkrovus vartotoją keliomis klaidomis. Jei vis tiek būtina dirbti su kiekviena klaida atskirai, galite naudoti lentelę AllErrors.
IsError
Funkcija IsError tikrina, ar nėra klaidos reikšmės.
Pateikiama reikšmė yra true arba false Bulio logikos reikšmė.
Naudojant IsError neleidžiama toliau apdoroti klaidos.
IsBlankOrError
Funkcija IsBlankOrError tikrina tuščią reikšmę arba klaidos reikšmę ir yra lygi Or( IsBlank( X ), IsError( X ) ).
Įgalindami esamų programų klaidų apdorojimą, apsvarstykite galimybę pakeisti "IsBlankIsBlankOrError", kad išlaikytumėte esamą programos veikimą. Prieš pridedant klaidų apdorojimą, tuščia reikšmė buvo naudojama tiek neapibrėžtoms reikšmėms iš duomenų bazių, tiek klaidų reikšmėms pateikti. Error tvarkymas atskiria šiuos du tuščio teksto aiškinimus, kurie gali pakeisti esamų programų, kurios toliau naudoja "IsBlank", veikimą.
Pateikiama reikšmė yra true arba false boolean reikšmė.
Naudojant IsBlankOrError neleidžiama toliau apdoroti klaidos.
Error Naudokite funkciją, kad sukurtumėte ir praneštumėte apie pasirinktinę klaidą. Pavyzdžiui, jums gali atrodyti logiška nustatyti, ar kuri nors duotoji reikšmė tinka jūsų kontekstui, ar ne – tai, ko nepatikrinsi automatiškai, ar nėra problemos. Galite sukurti ir pateikti savo klaidą, užbaidami veiksmą Kind ir Message, naudodami tą patį anksčiau IfError aprašytą funkcijos įrašą.
Kontekste IfErrornaudokite Error funkciją, kad ataugtumėte arba pereitumėte per klaidą. Pvz., jūsų logika IfError gali nuspręsti, kad kai kuriais atvejais klaida gali būti saugiai ignoruojama, tačiau kitais atvejais klaida yra svarbi siunčiant. Programoje IfError arba App.OnError naudokite Error( FirstError ), kad pereitumėte per klaidą.
Ši Error funkcija taip pat gali būti pateikta klaidų lentelėje, kaip tai būtų galima rasti lentelėje AllErrors . Naudokite Error( AllErrors ) norėdami atkurti visas klaidas, o ne tik pirmąją.
Tuščias įrašas arba tuščia lentelė perduota, kad Error nebūtų klaidų.
Sintaksė
Error( KlaidaĮrašas )
Error( ErrorTable )
- ErrorRecord – būtina. Error informacijos įrašą, įskaitant tipą, pranešimą ir kitus laukus. Reikia natūros . "FirstError" galima perduoti tiesiogiai.
- ErrorTable – būtina. Klaidų informacijos įrašų lentelė. "AllErrors" galima perduoti tiesiogiai.
IfError( Reikšmė1, Pakeitimas1 [, Reikšmė2, Pakeitimas2, ... [, DefaultResult ] ] )
- Vertybės – būtina. Formulė (-ės), kurią (-ias) reikia išbandyti ieškant klaidos reikšmės.
- Pakeitimai - Būtina. Formulės, kurias reikia įvertinti, ir reikšmės, kurias reikia pateikti, jei atitinkantys Value argumentai pateikė klaidą.
- DefaultResult – neprivaloma. Vertintinos formulės, jei formulė neranda jokių klaidų.
IsError( Reikšmė )
IsBlankOrError( Reikšmė )
- reikšmė – būtina. Tikrintinė formulė.
Pavyzdžiai
Paprastas IfError
| Formulė | Aprašą | Rezultatas |
|---|---|---|
| IfError( 1, 2 ) | Pirmasis argumentas nėra klaida. Funkcija neturi kitų tikrintinų klaidų ir jokios numatytosios pateikiamos reikšmės. Funkcija pateikia paskutinį įvertintą reikšmės argumentą. | 1 |
| IfError( 1/0, 2 ) | Pirmasis argumentas pateikia klaidos reikšmę (dėl dalybos iš nulio). Funkcija įvertina antrąjį argumentą ir jį pateikia kaip rezultatą. | 2 |
| IfError( 10, 20, 30 ) | Pirmasis argumentas nėra klaida. Funkcija neturi kitų tikrintinų klaidų, tačiau turi numatytąją pateikiamą reikšmę. Funkcija pateikia DefaultResult argumentą. | 30 |
| IfError( 10, 11, 20, 21, 300 ) | Pirmasis argumentas 10 nėra klaida, todėl funkcija nevertina to argumento atitinkamo pakaito 11. Trečiasis argumentas 20 irgi nėra klaida, todėl funkcija nevertina to argumento atitinkamo pakaito 21. Penktasis argumentas 300 neturi atitinkamo pakaito ir yra numatytasis rezultatas. Funkcija tą rezultatą pateikia, nes formulėje nėra klaidų. | 300 |
| IfError( 1/0, Notify( "Iškilo vidinė problema" ) ) | Pirmasis argumentas pateikia klaidos reikšmę (dėl dalybos iš nulio). Funkcija įvertina antrąjį argumentą ir vartotojui pateikia pranešimą. Grąžinama reikšmė IfError yra pranešimo grąžinama reikšmė, kuri buvo perverta į tą patį tipą, kaip ir pirmasis argumentas IfError (skaičius). | 1 |
Paprastas IsError
| Formulė | Aprašą | Rezultatas |
|---|---|---|
| IsError( 1 ) | Argumentas nėra klaida. | klaidinga |
| IsError( Tuščias() ) | Argumentas yra tuščias, bet ne klaida. | klaidinga |
| IsError( 1/0 ) | Argumentas yra klaida. | Tiesa |
| If( IsError( 1/0 ), Notify( "Iškilo vidinė problema" ) ) | Argumentas, kuris IsError pateikia klaidos reikšmę (dėl dalybos iš nulio). Ši funkcija pateikia teisinga, kuri sukielia jei siekiant rodyti pranešimą vartotojui su Pranešti funkcija. Pateikiama If reikšmė yra pateikiama Notify reikšmė, pakeista į tą patį tipą, kaip pirmasis If argumentas (Bulio logikos reikšmė). | Tiesa |
Paprastas IsBlankOrError
| Formulė | Aprašą | Rezultatas |
|---|---|---|
| IsBlankOrError( 1 ) | Argumentas nėra klaida ar tuščias. | klaidinga |
| IsBlankOrError( Tuščias() ) | Argumentas yra tuščias. | Tiesa |
| IsBlankOrError( 1/0 ) | Argumentas yra klaida. | Tiesa |
Paprastas Error
Šiame pavyzdyje datos patikrinamos viena su kita ir, jei yra problema, gaunama klaida.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
Šiame pavyzdyje kai kurioms klaidoms leidžiama praeiti, o kitos yra slopinamos ir pakeičiamos reikšme. Pirmuoju atveju b yra klaidos būsenoje, nes funkcija Reikšmė turi netinkamą argumentą. Kadangi formulės rašytojas tai netikėta, jis perduodamas, kad vartotojas jį matytų. Antruoju atveju, naudojant tą pačią formulę,b turi reikšmę 0, todėl padalijimas iš nulio. Tokiu atveju formulės kūrėjas gali žinoti, kad tai priimtina šiai logikai, nerodyti klaidos (nerodoma jokia juosta) ir vietoje to pateikti -1.
With( {a: 1, b: Value("a")},
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns an error with Kind = ErrorKind.InvalidArgument
With( {a: 1, b: 0} )
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns -1
Lentelę AllErrors galima filtruoti kaip bet kurią kitą lentelę. Naudojant su Error funkcija, tikėtinas klaidas galima pašalinti, o likusios klaidos paliekamos ir pranešamos. Pavyzdžiui, jei žinojome, kad padalijimas iš nulio nebus problema tam tikrame kontekste, šias klaidas galima išfiltruoti, paliekant visas kitas klaidas nepažeistas naudojant šią formulę:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
Nuoseklūs veiksmai
Įtraukite teksto įvesties valdiklį ir jį pavadinkite TextInput1 (jei numatytasis jo pavadinimas nėra toks).
Įtraukite žymos valdiklį ir jį pavadinkite Label1 (jei numatytasis jo pavadinimas nėra toks).
Label1 ypatybės Text formulę nustatykite kaip:
IfError( Value( TextInput1.Text ), -1 )Valdiklyje TextInput1 įveskite 1234.
Label1 rodo reikšmę 1234 , nes tai yra tinkama funkcijos Reikšmė įvestis.
Valdiklyje TextInput1 įveskite ToInfinity.
Label1 rodo reikšmę-1 , nes tai nėra tinkama funkcijos Reikšmė įvestis. Nekeliant funkcijos Value su IfError, žyma nerodys jokios reikšmės, nes klaidos reikšmė laikoma tuščia.