Ако-онда је најважнија контролна структура ВБА. Ову команду ћете вероватно користити свакодневно. Користите структуру Иф-Тхен када желите да извршите једну или више наредби условно. Опциона клаузула Елсе, ако је укључена, омогућава вам да извршите једну или више наредби ако услов који тестирате није тачан. Ево једноставне процедуре ЦхецкУсер, прекодиране да користи структуру Иф-Тхен-Елсе:
Суб ЦхецкУсер2()
Корисничко име = ИнпутБок(“Унесите своје име: “)
Ако је корисничко име = „Сатиа Наделла“ Онда
МсгБок („Добродошла Сатја…“)
' …[Више кода овде] …
Иначе
МсгБок „Извини. Само Сатја Надела може ово да води.”
Крај Ако
Енд Суб
Ако-Онда примери
Следећа рутина показује структуру Иф-Тхен без опционе Елсе клаузуле:
Суб ГреетМе()
Ако је време < 0,5 онда МсгБок „Добро јутро“
Енд Суб
ГреетМе процедура користи ВБА-ову функцију Тиме да добије системско време. Ако је тренутно време мање од 0,5, рутина приказује пријатељски поздрав. Ако је Време веће или једнако .5, рутина се завршава и ништа се не дешава.
Да бисте приказали другачији поздрав ако је Тиме веће или једнако .5, можете додати још једну ако-онда изјаву после прве:
Суб ГреетМе2()
Ако је време < 0,5 онда МсгБок „Добро јутро“
Ако је време >= 0,5 онда МсгБок „Добар дан“
Енд Суб
Приметите да се >= (веће или једнако) користи за другу наредбу Иф-Тхен. Ово осигурава да цео дан буде покривен. Да је коришћено > (веће од) не би се појавила порука да је ова процедура извршена тачно у 12:00. То је мало вероватно, али са оваквим важним програмом, не желите да ризикујете.
Пример Ако-Онда-Елсе
Други приступ претходном проблему користи клаузулу Елсе. Ево исте рутине прекодиране да користи структуру Иф-Онда-Елсе:
Суб ГреетМе3()
Ако је време < 0,5 онда МсгБок „Добро јутро“ Друго _
МсгБок „Добар дан“
Енд Суб
Приметите да се у претходном примеру користи знак за наставак реда (подвлака). Наредба Иф-Тхен-Елсе је заправо једна изјава. ВБА пружа мало другачији начин кодирања Иф-Тхен-Елсе конструкција које користе Енд Иф наредбу. Стога се ГреетМе процедура може преписати као
Суб ГреетМе4()
Ако је време < 0,5 Онда
МсгБок „Добро јутро“
Иначе
МсгБок „Добар дан“
Крај Ако
Енд Суб
У ствари, можете уметнути било који број исказа у део Иф и било који број исказа у део Елсе. Ова синтакса је лакша за читање и чини исказе краћим.
Шта ако треба да проширите ГреетМе рутину да бисте решили три услова: јутро, поподне и вече? Имате две опције: Користите три Иф-Онда изјаве или користите угнежђену Иф-Онда-Елсе структуру. Угнежђење значи постављање Иф-Онда-Елсе структуре унутар друге Иф-Онда-Елсе структуре. Први приступ, користећи три Иф-Тхен изјаве, је једноставнији:
Суб ГреетМе5()
Пригуши поруку као стринг
Ако је време < 0,5 онда је порука = „Јутро“
Ако је време >= 0,5 и време < 0,75, онда је порука = „Поподне“
Ако је време >= 0,75, онда је порука = „вече“
МсгБок „Добро“ & Мсг
Енд Суб
Додан је нови обрт уз употребу променљиве. Варијабла Мсг добија другачију текстуалну вредност, у зависности од доба дана. МсгБок изјава приказује поздрав: Добро јутро, Добар дан или Добро вече.
Следећа рутина обавља исту радњу, али користи структуру Иф-Тхен-Енд Иф:
Суб ГреетМе6()
Пригуши поруку као стринг
Ако је време < 0,5 Онда
Порука = „Јутро“
Крај Ако
Ако је време >= 0,5 и време < 0,75 Онда
Порука = „Поподне“
Крај Ако
Ако је Време >= 0,75 Онда
Порука = „Вече“
Крај Ако
МсгБок „Добро“ & Мсг
Енд Суб
Коришћење ЕлсеИф
У претходним примерима, свака наредба у рутини се извршава. Мало ефикаснија структура би изашла из рутине чим се утврди да је услов тачан. Ујутру, на пример, процедура треба да прикаже поруку Добро јутро, а затим да изађе — без процене других сувишних услова.
Са оваквом малом рутином, не морате да бринете о брзини извршења. Али за веће апликације у којима је брзина критична, требало би да знате још једну синтаксу за структуру Иф-Тхен.
Ево како можете да препишете ГреетМе рутину користећи ову синтаксу:
Суб ГреетМе7()
Пригуши поруку као стринг
Ако је време < 0,5 Онда
Порука = „Јутро“
ЕлсеИф Време >= 0,5 И Време < 0,75 Онда
Порука = „Поподне“
Иначе
Порука = „Вече“
Крај Ако
МсгБок „Добро“ & Мсг
Енд Суб
Када је услов тачан, ВБА извршава условне наредбе, а структура Иф се завршава. Другим речима, овај поступак је мало ефикаснији од претходних примера. Компромис је у томе што је код теже разумљив.
Још један пример ако-онда
Ево још једног примера који користи једноставан облик структуре Иф-Тхен. Ова процедура тражи од корисника количину, а затим приказује одговарајући попуст, на основу количине коју корисник унесе:
Суб СховДисцоунт()
Дим Куантити Ас Лонг
Дим Дисцоунт Ас Доубле
Количина = ИнпутБок(“Унесите количину:”)
Ако је количина > 0, онда је попуст = 0,1
Ако је количина >= 25, онда је попуст = 0,15
Ако је количина >= 50, онда је попуст = 0,2
Ако је количина >= 75, онда је попуст = 0,25
МсгБок „Попуст:“ & Попуст
Енд Суб
Обратите пажњу на то да се свака наредба Иф-Тхен у овој рутини извршава, а вредност за Дисцоунт може да се промени како се искази извршавају. Међутим, рутина на крају приказује тачну вредност за попуст јер су изјаве Иф-Тхен у растућем реду вредности попуста.
Следећа процедура обавља исте задатке коришћењем алтернативне ЕлсеИф синтаксе. У овом случају, рутина се завршава одмах након извршавања наредби за прави услов:
Суб СховДисцоунт2()
Дим Куантити Ас Лонг
Дим Дисцоунт Ас Доубле
Количина = ИнпутБок(“Унесите количину: “)
Ако је количина > 0 и количина < 25 Онда
Попуст = 0,1
Иначе ако је количина >= 25 и количина < 50 Тада
Попуст = 0,15
Иначе ако је количина >= 50 и количина < 75 Тада
Попуст = 0,2
ЕлсеИф Количина >= 75 Онда
Попуст = 0,25
Крај Ако
МсгБок „Попуст:“ & Попуст
Енд Суб
Ове вишеструке ако-онда структуре су прилично гломазне. Можда ћете желети да користите структуру Иф-Тхен само за једноставне бинарне одлуке.