IIf()
функция и IIf()
твърдение са коренно различни животни.
За съжаление, те са почти невъзможно да бъдат разграничени. И все пак е важно да можете да го направите. Защо?
Защото тази функция на IIf(). е грешка по време на изпълнение, която чака да се случи:
IIf(Attempts = 0, 0, Successes / Attempts)
Докато това IIf() изявление безопасно ще върне стойност, дори ако Attempts = 0
:
IIf(Attempts = 0, 0, Successes / Attempts)
И така, можете ли да забележите разликата между двете?
Разделянето им
Ако не можете да забележите разликата между двете проби по-горе, това е, защото няма разлика.
IIf()
функция изглежда идентично с IIf()
изявление.
Разликата е в това как – или по-точно, къде те се оценяват.
- Функцията IIf е член на стандартната библиотека VBA.Interaction.
- Изявлението IIf се оценява от Expression Service на машината за база данни Jet/ACE (acees.dll).
Писах за разликите между кода и изразите тук:
Изрази срещу код Кога кодът не е код? Когато е израз. Каква е разликата и кой наистина се интересува? Да изследваме. Вече не се задава Майк УлфФундаменталната разлика между функцията IIf() и изявлението IIf()
Три думи:оценка на късо съединение.
- Изявлението IIf има го.
- Функцията IIf не.
Какво е оценка на късо съединение?
При оценката на късо съединение кодът оценява само онези изрази, необходими за определяне на резултата.
Изявлението IIf и функцията IIf приемат три аргумента:
- израз: булево условие
- вярна част: резултатът за връщане if expr е вярно
- фалшива част: резултатът за връщане if expr е False
С оператора IIf само два от тези аргумента винаги се оценяват:expr и–в зависимост от резултата от expr– или истинската част ИЛИ фалшивата част .
С функцията IIf и трите аргумента ТРЯБВА да бъдат оценени, преди дори да бъдат предадени на функцията.
Защо е важно
Нека се върнем към оригиналния примерен код:
IIf(Attempts = 0, 0, Successes / Attempts)
Какво се случва, ако стойността на Опити е нула?
IIf изявление
- Expr оценява на True.
- Истинската част оценява на
0
. - Изразът връща
0
.
IIf функция
- Expr оценява на True.
- Истинската част оценява на
0
. - Невярната част се оценява на #ГРЕШКА#:Деление на нула
Функциятана версия връща грешка, защото е била принудена да оцени и двете truepart и фалшивата част изрази.
Къде е IIf Третира се като изявление?
IIf се оценява като изявление на следните места:
- Запитвания
- Свойства на формуляр/отчет/контрола (напр. TextBox ControlSource)
- Функцията Access Application.Eval()
За повече подробности – включително как да тествате окончателно дали IIf се третира като изявление или функция – прочетете статията ми за разликите между изрази и код:Изрази срещу код .