IIf()
funkcja i IIf()
oświadczenie to zasadniczo różne zwierzęta.
Niestety są prawie niemożliwe do odróżnienia. A jednak ważne jest, aby móc to zrobić. Czemu?
Ponieważ ta IIf() funkcja to błąd wykonania, który czeka na wystąpienie:
IIf(Attempts = 0, 0, Successes / Attempts)
Podczas gdy to IIf() instrukcja bezpiecznie zwróci wartość, nawet jeśli Attempts = 0
:
IIf(Attempts = 0, 0, Successes / Attempts)
Czy potrafisz dostrzec różnicę między nimi?
Rozmawianie z nimi
Jeśli nie możesz dostrzec różnicy między dwiema powyższymi próbkami, to dlatego, że nie ma różnicy.
IIf()
funkcja wygląda identycznie jak IIf()
oświadczenie.
Różnica polega na tym, jak – a dokładniej gdzie– są oceniane.
- Funkcja IIf jest członkiem standardowej biblioteki VBA.Interaction.
- Oświadczenie IIf jest oceniany przez usługę Expression Service silnika bazy danych Jet/ACE (acees.dll).
O różnicach między kodem a wyrażeniami pisałem tutaj:
Wyrażenia a kodKiedy kod nie jest kodem? Kiedy jest to ekspresja. Jaka jest różnica i kogo to obchodzi? Odkryjmy. Nie można już ustawićMike WolfePodstawowa różnica między funkcją IIf() a instrukcją IIf()
Trzy słowa:ocena zwarcia.
- Oświadczenie IIf ma to.
- Funkcja IIf nie.
Co to jest ocena zwarcia?
W ocenie zwarcia kod ocenia tylko te wyrażenia, które są niezbędne do określenia wyniku.
Instrukcja IIf i funkcja IIf przyjmują trzy argumenty:
- wyrażenie: warunek logiczny
- truepart: wynik do zwrócenia, jeśli expr to prawda
- falsepart: wynik do zwrócenia, jeśli expr jest fałszywe
W przypadku wyrażenia IIf tylko dwa z tych argumentów są zawsze oceniane:wyraż i – w zależności od wyniku expr– albo truepart LUB falsepart .
W przypadku funkcji IIf wszystkie trzy argumenty MUSZĄ zostać ocenione, zanim zostaną przekazane do funkcji.
Dlaczego to ma znaczenie
Wróćmy do oryginalnego przykładowego kodu:
IIf(Attempts = 0, 0, Successes / Attempts)
Co się stanie, jeśli wartość Próby jest zero?
IIf oświadczenie
- wyraż ocenia na Prawda.
- Prawdziwa część ocenia do
0
. - Oświadczenie zwraca
0
.
IIf funkcja
- wyraż ocenia na Prawda.
- Prawdziwa część ocenia do
0
. - falsepart oblicza #ERROR#:dzielenie przez zero
funkcja wersja zwraca błąd, ponieważ została zmuszona do oceny obu truepart i falsepart wyrażenia.
Gdzie jest IIf Traktowany jako oświadczenie?
IIf jest oceniany jako oświadczenie w następujących miejscach:
- Zapytania
- Właściwości formularza/raportu/kontroli (np. TextBox ControlSource)
- Funkcja Access Application.Eval()
Aby uzyskać więcej informacji, w tym jak ostatecznie sprawdzić, czy IIf jest traktowany jako instrukcja lub funkcja – przeczytaj mój artykuł o różnicach między wyrażeniami a kodem:Wyrażenia a kod .