Il IIf()
e la funzione IIf()
dichiarazione sono animali fondamentalmente diversi.
Sfortunatamente, sono quasi impossibili da distinguere. Eppure, è importante essere in grado di farlo. Come mai?
Perché questa IIf() funzione è un errore di runtime in attesa di verificarsi:
IIf(Attempts = 0, 0, Successes / Attempts)
Mentre questa IIf() dichiarazione restituirà in modo sicuro un valore anche se Attempts = 0
:
IIf(Attempts = 0, 0, Successes / Attempts)
Quindi, riesci a individuare la differenza tra i due?
Distinguerli
Se non riesci a individuare la differenza tra i due campioni sopra, è perché non c'è differenza.
Il IIf()
funzione sembra identico a IIf()
dichiarazione.
La differenza sta nel come, o più precisamente, nel dove– vengono valutati.
- La funzione di IIf è un membro della libreria standard VBA.Interaction.
- La dichiarazione di IIf viene valutato dal servizio di espressione del motore di database Jet/ACE (acees.dll).
Ho scritto delle differenze tra codice ed espressioni qui:
Espressioni e codiceQuando il codice non è codice? Quando è un'espressione Qual è la differenza e a chi importa davvero? Esploriamo. Non è più impostatoMike WolfeLa differenza fondamentale tra la funzione IIf() e l'istruzione IIf()
Tre parole:valutazione di cortocircuito.
- La dichiarazione di IIf ce l'ha.
- La funzione di IIf no.
Cos'è la valutazione di cortocircuito?
Nella valutazione di cortocircuito, il codice valuta solo le espressioni necessarie per determinare il risultato.
L'istruzione IIf e la funzione IIf accettano entrambe tre argomenti:
- espr: una condizione booleana
- parte vera: il risultato da restituire se expr è vero
- falsepart: il risultato da restituire se expr è falso
Con l'istruzione IIf, vengono valutati solo due di questi argomenti:expr e–a seconda del risultato dell'espr– o la parte vera OPPURE il falsepart .
Con la funzione IIf, tutti e tre gli argomenti DEVONO essere valutati prima ancora di essere passati alla funzione.
Perché è importante
Torniamo al codice di esempio originale:
IIf(Attempts = 0, 0, Successes / Attempts)
Cosa succede se il valore di Tentativi è zero?
IF dichiarazione
- L'espr restituisce True.
- La parte vera restituisce
0
. - L'istruzione restituisce
0
.
IF funzione
- L'espr restituisce True.
- La parte vera restituisce
0
. - Il falso restituisce #ERROR#:Divisione per zero
La funzione version restituisce un errore perché è stato forzato a valutare sia il truepart e la falsa parte espressioni.
Dov'è IIf Trattata come una dichiarazione?
Se viene valutato come un'istruzione nei seguenti punti:
- Query
- Proprietà modulo/report/controllo (ad es. una sorgente di controllo TextBox)
- La funzione Access Application.Eval()
Per ulteriori dettagli, incluso come verificare definitivamente se IFf viene trattato come un'istruzione o una funzione:leggi il mio articolo sulle differenze tra espressioni e codice:Espressioni vs. codice .