Le IIf()
fonction et la IIf()
déclaration sont des animaux fondamentalement différents.
Malheureusement, ils sont presque impossibles à distinguer. Et pourtant, il est important de pouvoir le faire. Pourquoi?
Parce que cette fonction IIf() est une erreur d'exécution en attente de se produire :
IIf(Attempts = 0, 0, Successes / Attempts)
Alors que cette instruction IIf() renverra en toute sécurité une valeur même si Attempts = 0
:
IIf(Attempts = 0, 0, Successes / Attempts)
Alors, saurez-vous faire la différence entre les deux ?
Les différencier
Si vous ne pouvez pas repérer la différence entre les deux échantillons ci-dessus, c'est parce qu'il n'y a pas de différence.
Le IIf()
fonction semble identique au IIf()
déclaration.
La différence réside dans le comment, ou plus précisément, où– ils sont évalués.
- La fonction IIf est membre de la bibliothèque standard VBA.Interaction.
- L'instruction IIf est évalué par le service d'expression du moteur de base de données Jet/ACE (acees.dll).
J'ai écrit sur les différences entre le code et les expressions ici :
Expressions vs. CodeQuand est-ce que le code n'est pas du code ? Quand c'est une expression. Quelle est la différence et qui s'en soucie vraiment ? Explorons. Plus définiMike WolfeLa différence fondamentale entre la fonction IIf() et l'instruction IIf()
Trois mots :évaluation de court-circuit.
- L'instruction IIf a-t-il.
- La fonction IIf pas.
Qu'est-ce que l'évaluation de court-circuit ?
Dans l'évaluation de court-circuit, le code évalue uniquement les expressions nécessaires pour déterminer le résultat.
L'instruction IIf et la fonction IIf prennent toutes deux trois arguments :
- expression : une condition booléenne
- partie vraie : le résultat à retourner si expr est vrai
- fausse partie : le résultat à retourner si expr est faux
Avec l'instruction IIf, seuls deux de ces arguments sont évalués :le expr et–selon le résultat de l'expr– soit la truepart OU la fausse partie .
Avec la fonction IIf, les trois arguments DOIVENT être évalués avant même d'être transmis à la fonction.
Pourquoi c'est important
Revenons à l'exemple de code d'origine :
IIf(Attempts = 0, 0, Successes / Attempts)
Que se passe-t-il si la valeur de Tentatives est zéro ?
IIf instruction
- L'expression est évalué à Vrai.
- La partie vraie évalue à
0
. - L'instruction renvoie
0
.
IIf fonction
- L'expression est évalué à Vrai.
- La partie vraie évalue à
0
. - La partie fausse est évalué à #ERROR# :Division par zéro
La fonction version renvoie une erreur car elle a été forcée d'évaluer à la fois la truepart et la fausse partie expressions.
Où est IIf Traité comme une déclaration ?
Si est évalué comme une déclaration aux endroits suivants :
- Requêtes
- Propriétés de formulaire/rapport/contrôle (par exemple, un TextBox ControlSource)
- La fonction Access Application.Eval()
Pour plus de détails, y compris comment tester définitivement si IIf est traité comme une instruction ou une fonction - lisez mon article sur les différences entre les expressions et le code :Expressions vs. Code .