If-Then е най-важната контролна структура на VBA. Вероятно ще използвате тази команда всеки ден. Използвайте структурата If-Then, когато искате да изпълните един или повече оператори условно. Незадължителната клауза Else, ако е включена, ви позволява да изпълните един или повече оператори, ако условието, което тествате, не е вярно. Ето една проста процедура CheckUser, прекодирана за използване на структурата If-Then-Else:
Sub CheckUser2()
Потребителско име = InputBox(„Въведете вашето име:“)
Ако потребителско име = „Satya Nadella“ Тогава
MsgBox („Добре дошла Сатя…“)
„…[Още код тук]…
иначе
MsgBox „Съжалявам. Само Сатя Надела може да управлява това."
Край, ако
Край под
Ако-тогава примери
Следната рутина демонстрира структурата If-Then без незадължителната клауза Else:
Под GreetMe()
Ако времето < 0,5, тогава MsgBox „Добро утро“
Край под
Процедурата GreetMe използва функцията Time на VBA, за да получи системното време. Ако текущото време е по-малко от .5, рутината показва приятелски поздрав. Ако Time е по-голямо или равно на .5, рутината приключва и нищо не се случва.
За да покажете различен поздрав, ако Времето е по-голямо или равно на .5, можете да добавите друго изявление If-Then след първото:
Под GreetMe2()
Ако времето < 0,5, тогава MsgBox „Добро утро“
Ако Времето >= 0,5 Тогава MsgBox „Добър ден“
Край под
Забележете, че >= (по-голямо или равно на) се използва за втория израз If-Then. Това гарантира, че целият ден е покрит. Ако беше използван > (по-голям от), нямаше да се появи съобщение, ако тази процедура беше изпълнена точно в 12:00 на обяд. Това е малко вероятно, но с важна програма като тази не искате да рискувате.
Пример "Ако-то-друго".
Друг подход към предходния проблем използва клаузата Else. Ето същата рутина, прекодирана за използване на структурата If-Then-Else:
Под GreetMe3()
Ако времето < 0,5, тогава MsgBox „Добро утро“ Друго _
MsgBox „Добър ден“
Край под
Забележете, че символът за продължение на реда (долно черти) се използва в предходния пример. Инструкцията If-Then-Else всъщност е едно изявление. VBA предоставя малко по-различен начин за кодиране на конструкции If-Then-Else, които използват израз End If. Следователно процедурата GreetMe може да бъде пренаписана като
Под GreetMe4()
Ако Времето < 0,5 Тогава
MsgBox „Добро утро“
иначе
MsgBox „Добър ден“
Край, ако
Край под
Всъщност можете да вмъкнете произволен брой изрази в частта If и произволен брой изрази в частта Else. Този синтаксис е по-лесен за четене и прави изразите по-кратки.
Ами ако трябва да разширите рутината на GreetMe, за да се справите с три условия: сутрин, следобед и вечер? Имате две опции: Използвайте три оператора If-Then или използвайте вложена структура If-Then-Else. Влагането означава поставяне на структура If-Then-Else в друга If-Then-Else структура. Първият подход, използващ три израза If-Then, е по-прост:
Под GreetMe5()
Затъмни съобщение като низ
Ако Времето < 0,5 Тогава Msg = „Сутрин“
Ако Време >= 0,5 и Време < 0,75 Тогава Msg = „След обяд“
Ако Времето >= 0,75 Тогава Msg = „Вечер“
MsgBox „Добре“ & Msg
Край под
Добавен е нов обрат с използването на променлива. Променливата Msg получава различна текстова стойност в зависимост от времето на деня. Изявлението MsgBox показва поздрава: Добро утро, Добър ден или Добър вечер.
Следната рутина изпълнява същото действие, но използва структура If-Then-End If:
Под GreetMe6()
Затъмни съобщение като низ
Ако Времето < 0,5 Тогава
Съобщение = "Утро"
Край, ако
Ако Времето >= 0,5 и Времето < 0,75 Тогава
Съобщение = „Следобед“
Край, ако
Ако Времето >= 0,75 Тогава
Съобщение = „Вечер“
Край, ако
MsgBox „Добре“ & Msg
Край под
Използване на ElseIf
В предишните примери се изпълнява всеки израз в рутината. Малко по-ефективна структура би напуснала рутината веднага щом се установи, че дадено условие е вярно. Сутринта, например, процедурата трябва да покаже съобщението „Добро утро“ и след това да излезе — без да оценява другите излишни условия.
С малка рутина като тази, не е нужно да се притеснявате за скоростта на изпълнение. Но за по-големи приложения, в които скоростта е критична, трябва да знаете за друг синтаксис за структурата If-Then.
Ето как можете да пренапишете рутината GreetMe, като използвате този синтаксис:
Под GreetMe7()
Затъмни съобщение като низ
Ако Времето < 0,5 Тогава
Съобщение = "Утро"
ElseIf Време >= 0,5 И Време < 0,75 Тогава
Съобщение = „Следобед“
иначе
Съобщение = „Вечер“
Край, ако
MsgBox „Добре“ & Msg
Край под
Когато дадено условие е вярно, VBA изпълнява условните оператори и структурата If завършва. С други думи, тази процедура е малко по-ефективна от предишните примери. Компромисът е, че кодът е по-труден за разбиране.
Друг пример ако-тогава
Ето още един пример, който използва простата форма на структурата If-Then. Тази процедура подканва потребителя за количество и след това показва съответната отстъпка въз основа на количеството, което потребителят въвежда:
Подпокажи отстъпка()
Затъмнено количество толкова дълго
Дим отстъпка като двойна
Количество = InputBox („Въведете количество:“)
Ако количество > 0, тогава отстъпка = 0,1
Ако количеството >= 25, тогава отстъпката = 0,15
Ако количеството >= 50 Тогава отстъпка = 0,2
Ако количеството >= 75, тогава отстъпката = 0,25
MsgBox „Отстъпка:“ и отстъпка
Край под
Забележете, че всеки оператор If-Then в тази рутина се изпълнява и стойността за Discount може да се промени, докато операторите се изпълняват. Въпреки това, рутината в крайна сметка показва правилната стойност за отстъпка, тъй като операторите If-Then са във възходящ ред на стойностите на отстъпката.
Следващата процедура изпълнява същите задачи, като използва алтернативния синтаксис ElseIf. В този случай рутината приключва веднага след изпълнение на операторите за истинско условие:
ПодпокажиОтстъпка2()
Затъмнено количество толкова дълго
Дим отстъпка като двойна
Количество = InputBox(„Въведете количество:“)
Ако количество > 0 и количество < 25 Тогава
Отстъпка = 0,1
Иначе, ако количество >= 25 и количество < 50 Тогава
Отстъпка = 0,15
ElseIf Количество >= 50 И Количество < 75 Тогава
Отстъпка = 0,2
ElseIf Количество >= 75 Тогава
Отстъпка = 0,25
Край, ако
MsgBox „Отстъпка:“ и отстъпка
Край под
Тези множество структури If-Then са доста тромави. Може да искате да използвате структурата If-Then само за прости двоични решения.