Ez az oktatóanyag elmagyarázza, hogyan kell használni az IIF -et a VBA -ban
A VBA IIF függvény hasonló az Excel IF funkciójához. Ellenőrzi, hogy egy feltétel teljesül -e, és visszaad egy értéket (vagy számítást), ha IGAZ, egy másik értéket (vagy számítást), ha HAMIS.
Hasonló a VBA If utasításhoz, sokan ezt a módszert használják gyorsbillentyűnek, mivel csak egy kódsort kell írnia a kívánt eredmény eléréséhez, nem pedig Ha… Akkor… Más… Vége Ha rutin. Azonban helyesen kell használni, mivel problémákhoz vezethet a kódban.
IIF szintaxis
Az IFF függvény 3 részből áll - a logikai tesztből, az igaz részből és a hamis részből.
- Kifejezés:A logikai teszt, amelyre sor kerül.
- Igaz rész: Az eredmény, amely akkor kerül visszaadásra, ha a logikai teszt IGAZ.
- Hamis rész: Az eredmény, amelyet hamis logikai teszt esetén ad vissza.
IIF függvényeljárás írása
123 | Funkció GetNames (strName As String) StringkéntGetNames = IIf (strName = "János", "A név János", "A név nem János")Vége funkció |
A fenti függvényben egy al-eljárással tesztelhetjük, hogy a függvénynek átadott változó a „John” karakterlánc
123 | Sub TestGetNamaes ()MsgBox GetNames ("John")End Sub |
Ha a TestGetNames alfolyamatot futtatnánk, az meghívná a GetNames függvényt, és visszaadna egy üzenetdobozt.
Ha helyette az If metódust használtuk volna, a kód így nézne ki:
1234567 | Funkció GetNames (strName As String) StringkéntHa (strName = "John") AkkorGetNames = "A név John"MásGetNames = "A név nem János"Vége HaVége funkció |
Valójában egy sor kódot írtunk 5 kódsor helyett - lenyűgöző!
Miért használja az If -t?
Tekintsük a következő
123 | Funkció GetNames (strName As String) StringkéntGetNames = IIf (strName = "John", MsgBox ("A név John"), MsgBox ("A név nem John"))Vége funkció |
Most, ha a következő al-eljárást futtatja a függvény meghívásához
123 | Sub TestGetNames ()GetNames ("János")End Sub |
Ugyanazt az üzenetdobozt kapná, mint korábban, de utána azonnal - a következő üzenetdobozt!
Az IIF függvény végrehajtja a kód sorának IGAZ és HAMIS szakaszát is - nem lép ki a kódból, ha a feltételt igaznak találta - továbbra is végrehajtja a hamis részt is - így hamis üzenetet ad nekünk a második üzenetdoboz. Ha használtad volnaHa… Akkor… Más… Vége Ha - ez nem történt volna meg - az IF függvény csak a kód IGAZ vagy HAMIS szakaszát hajtja végre - attól függően, hogy milyen logikát ad át a kódnak.
A kód rosszul van megtervezve (szándékosan!), Az üzenetdobozokat azon kódsoron belül tartják, amelyen az IIF utasítás található, nem pedig a kód után, vagy az alrutinban. Mivel az IIF függvény az utasítás TRUE és FALSE szakaszát is futtatja, mindkét üzenet visszaküldésre kerül.
Ezt a hibát kijavíthatjuk úgy, hogy az üzenetdobozt az IIF függvénysor alá helyezzük, az alábbi kód szerint, vagy az üzenetdobozt a cikk első példája szerinti al-eljárásra helyezzük át.
1234 | Funkció GetNames (strName As String) StringkéntGetNames = IIf (strName = "János", "A név János", "A név nem János")MsgBox (GetNames)Vége funkció |
Ha óvatos, amikor kódot ír, az IIF funkció rengeteg kódsort és extra gépelést takaríthat meg!
Beágyazott IIF -ek
Az IIF függvényt az IF függvény beágyazásához hasonló módon fészkelhetjük be, de ismét minden egy sorban történik.
123 | Funkció GetDiscount (dblPrice As Double) DuplakéntGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Vége funkció |
Ezt a függvényt egy al-eljárásból hívhatjuk meg
12345 | Sub FindDiscount ()Dim dblP DuplakéntdblP = 899MsgBox ("Az elérhető kedvezmény" & GetDiscount (dblP) & "%")End Sub |
vagy hívhatja Excel -ből, UDF -ként (felhasználó által definiált funkció) használva