IIf()
funktionen og IIf()
udsagn er fundamentalt forskellige dyr.
Desværre er de næsten umulige at skelne fra hinanden. Og alligevel er det vigtigt at kunne gøre det. Hvorfor?
Fordi denne IIf() funktion er en køretidsfejl, der venter på at ske:
IIf(Attempts = 0, 0, Successes / Attempts)
Mens denne IIf() sætning returnerer sikkert en værdi, selvom Attempts = 0
:
IIf(Attempts = 0, 0, Successes / Attempts)
Så kan du se forskellen mellem de to?
Fortæl dem fra hinanden
Hvis du ikke kan se forskellen mellem de to eksempler ovenfor, er det fordi der ikke er nogen forskel.
IIf()
funktion ser identisk ud med IIf()
erklæring.
Forskellen ligger i hvordan – eller mere præcist, hvor – de bliver evalueret.
- IIf funktionen er medlem af VBA.Interaction standardbiblioteket.
- IIf erklæringen bliver evalueret af Jet/ACE-databasemotorens Expression Service (acees.dll).
Jeg skrev om forskellene mellem kode og udtryk her:
Udtryk vs. kode Hvornår er kode ikke kode? Når det er et udtryk. Hvad er forskellen, og hvem bekymrer sig egentlig? Lad os udforske. Ikke længere indstilletMike WolfeDen grundlæggende forskel mellem IIf()-funktionen og IIf()-sætningen
Tre ord:kortslutningsevaluering.
- IIf erklæringen har det.
- IIf funktionen ikke.
Hvad er kortslutningsevaluering?
Ved kortslutningsevaluering evaluerer koden kun de udtryk, der er nødvendige for at bestemme resultatet.
IIf-sætningen og IIf-funktionen tager begge tre argumenter:
- udløb: en boolsk tilstand
- truepart: resultatet, der returneres, hvis udt. er sandt
- falsepart: resultatet, der returneres, hvis udt. er falsk
Med IIf-sætningen bliver kun to af disse argumenter nogensinde evalueret:expr og–afhængigt af resultatet af udtr.– enten den sande del ELLER falseparten .
Med IIf-funktionen SKAL alle tre argumenter evalueres, før de overhovedet bliver overført til funktionen.
Hvorfor det betyder noget
Lad os gå tilbage til den oprindelige eksempelkode:
IIf(Attempts = 0, 0, Successes / Attempts)
Hvad sker der, hvis værdien af Forsøg er nul?
IIf erklæring
- Den udg. vurderer til Sand.
- Den sande del evalueres til
0
. - Sætningen returnerer
0
.
IIf funktion
- Den udl. evalueres til Sand.
- Den sande del evalueres til
0
. - Den falsedel evalueres til #ERROR#:Division med nul
funktionen version returnerer en fejl, fordi den blev tvunget til at evaluere både truepart og falseparten udtryk.
Hvor er IIf Behandles som en erklæring?
If vurderes som et udsagn følgende steder:
- Forespørgsler
- Formular/Rapport/Kontrolegenskaber (f.eks. en TextBox ControlSource)
- Access Application.Eval()-funktionen
For flere detaljer – herunder hvordan man definitivt tester om IIf bliver behandlet som et udsagn eller en funktion – læs min artikel om forskellene mellem udtryk og kode:Udtryk vs. kode .