ВБА Селецт Цасе Статемент

У ВБА, Изаберите Изјаву о случају је алтернатива за Изјава Иф-Тхен, омогућавајући вам да тестирате да ли су услови испуњени, покрећући посебан код за сваки услов. Изјава о избору је пожељнија од изјаве Иф ако постоји више услова за обраду.

Изаберите Пример случаја

Овај пример од корисника тражи ИесНоЦанцел МессагеБок и тестира коју је опцију корисник изабрао:

1234567891011121314 Суб Селецт_Цасе_Иес_Но_Цанцел ()Дим нРесулт Као ВбМсгБокРесултнРесулт = МсгБок ("…", вбИесНоЦанцел)Изаберите Цасе нРесултСлучај вбДаМсгБок "Да"Случај вбНоМсгБок "Не"Цасе вбЦанцелМсгБок "Откажи"Крај ИзаберитеЕнд Суб

У наставку смо исписали еквивалент користећи уместо Иф наредбу. Приметићете да изјава о избору случаја укључује нешто мање куцања - ова корист се појачава при тестирању више критеријума.

12345678910111213 Суб Иф_Иес_Но_Цанцел ()Дим нРесулт Као ВбМсгБокРесултнРесулт = МсгБок ("…", вбИесНоЦанцел)Ако је нРесулт = вбДаМсгБок "Да"ОсталоАко нРесулт = вбНо ОндаМсгБок "Не"ЕлсеИф нРесулт = вбЦанцел ЗатимМсгБок "Откажи"Крај АкоЕнд Суб

Синтакса изјаве случаја

Синтакса Селецт Цасе Статемент је следећа:

12345678910 Изаберите случај [Тест Екпрессион]Случај [Услов 1][Радња ако је услов 1 тачан]Случај [услов 2][Радња ако је услов 2 тачан]Случај [Услов н][Радња ако је услов н тачан]Цасе Елсе[Радња ако ниједна није тачна]Крај Изаберите

Где:

[Тест Екпрессион] - Да ли је вредност за процену. Обично је ово променљива.

[Радња ако је услов н тачан] - Да ли се само код може покренути ако је услов испуњен (баш као и са Иф изјавом)

[Услов н] - Да ли је услов за тестирање. Постоји много различитих начина тестирања услова. О њима ћемо расправљати у наставку.

Изјава о случају ће извршити код за ПРВИ услов за који се утврди да је ИСТИНА. Ако ниједан услов није испуњен, неће се извршити код, осим ако се не дода клаузула Елсе.

Изаберите Критеријуми случаја

Изабрани случајеви се могу користити за процену нумеричких вредности и текста. Прво ћемо разговарати о томе како користити Селецт Цасес за процену нумеричких израза.

Тачно подударање - бројеви

Лако можете тестирати да ли се тачно подудара са изјавом случаја:

1 Случај 10

или додајте зарезе за тестирање тачних подударања са више бројева:

1 Предмети 20, 30, 40
1234567891011121314 Суб ЕкацтМатцх_Нумберс ()Дим н Ас Интегерн = ЦИнт (ИнпутБок ("…"))Изаберите Случај брСлучај 10'Ако је н 10 ТадаПредмети 20, 30, 40'Ако је н 20/30/40 ТадаЦасе Елсе'Ако н није 10/20/30/40 ТадаКрај ИзаберитеЕнд Суб

Домети

Можете тестирати да ли неки број спада у опсег овако:

1 Случај 55 до 74

Ова процедура ће генерисати словну оцену ученика на основу њихове нумеричке оцене:

12345678910111213141516171819202122 Под Цалц_Граде ()Дим Сцоре Ас ИнтегерДим ЛеттерГраде Ас СтрингСцоре = ИнпутБок ("Унесите оцену ученика")Изаберите Оцена случајаСлучај 90 до 100ЛеттерГраде = "А"Случај 80 до 90ЛеттерГраде = "Б"Случај 70 до 80ЛеттерГраде = "Ц"Случај 60 до 70ЛеттерГраде = "Д"Цасе ЕлсеЛеттерГраде = "Ф"Крај ИзаберитеМсгБок "Оцена ученика је:" & ЛеттерГрадеЕнд Суб

Такође можете тестирати домете помоћу Цасе Ис

Изаберите Цасе Ис

1234 Случај је <55'Не ради ништаСлучај <= 74МСБок "У домету"

Запамтите да ће изјава случаја извршити код САМО за прво подударање.

Ова процедура ће израчунати оцену ученика користећи Цасе Ис уместо Цасе То.

12345678910111213141516171819202122 Суб Селецт_Цасе_Ис_Граде ()Дим Сцоре Ас ИнтегерДим ЛеттерГраде Ас СтрингСцоре = ИнпутБок ("Унесите оцену ученика")Изаберите Оцена случајаСлучај је> = 90ЛеттерГраде = "А"Случај је> = 80ЛеттерГраде = "Б"Случај је> = 70ЛеттерГраде = "Ц"Случај је> = 60ЛеттерГраде = "Д"Цасе ЕлсеЛеттерГраде = "Ф"Крај ИзаберитеМсгБок "Оцена ученика је:" & ЛеттерГрадеЕнд Суб

Цасе Елсе

Можете додати „Случај Елсе“ на крај Изјаве о случају да бисте учинили нешто ако нису испуњени услови:

1 Цасе Елсе

Погледајте крај претходног примера кода да бисте видели како се Цасе Елсе може користити.

Одаберите Цасе - Тект & Лике Оператор

До сада су наши примери Селецт Цасе радили само са бројевима. Такође можете користити изјаве Изабери случај са текстом.

Тачно подударање - текст

Можете тестирати да ли се израз подудара са тачном фразом попут ове:

1 Случај "Цвекла"

Или помоћу зареза проверите да ли се израз тачно подудара са више фраза:

1 Футрола "Аппле", "Банана", "Оранге"

Састављање изгледа овако:

12345678910 Суб ЕкацтМатцх_Фоод ()Изаберите Распон великих слова ("а1"). ВредностСлучај "Цвекла"МсгБок "Поврће"Футрола "Аппле", "Банана", "Оранге"МсгБок "Воће"Крај ИзаберитеЕнд Суб

Велико и мало слово

Подразумевано, ВБА је осетљив на велика и мала слова. То значи да ВБА сматра „Текст“ другачијим од „текста“. Да бисте искључили велика и мала слова, додајте опцију Упореди текст на врх модула:

1 Опција Упореди текст

Овај пример ће учинити Одабир великих и малих слова неосетљивим при раду са текстом:

123456789101112 Опција Упореди текстСуб ЕкацтМатцх_Фоод ()Изаберите Распон великих слова ("а1"). ВредностСлучај "Цвекла"МсгБок "Поврће"Футрола "Аппле", "Банана", "Оранге"МсгБок "Воће"Крај ИзаберитеЕнд Суб

Цасе Лике

Оператор Лике вам омогућава да направите нетачна поређења. Ако се текст подудара, Лике враћа ТРУЕ, ако се не подудара, враћа ФАЛСЕ. Ово чини оператор Лике лаким за коришћење са Иф изјавама, међутим неће радити тако лако са изјавама случаја.

Случај као - неуспешан тест

Следећи код показује да оператер Лике не ради са Селецт Цасе:

1234567891011 Суб Селецт_Цасе_Лике_ДоеснотВорк ()Мрачна реч као низворд = "ЦОЦОА"Изаберите Писана речВелика слова 2 Као "*Ц*Ц*"МсгБок "Добро"Цасе ЕлсеМсгБок "Није добро"Крај ИзаберитеЕнд Суб

Случај као - исправан начин

Међутим, можемо додати израз ТРУЕ да би Изјава Селецт радила са оператором Лике:

1234567891011 Суб Селецт_Цасе_Лике_ЦоррецтВаи ()Мрачна реч као низворд = "ЦОЦОА"Изаберите Труе ЦасеВелика слова попут „*Ц*Ц*“МСБок "Добро"Цасе ЕлсеМсгБок "Није добро"Крај ИзаберитеЕнд Суб

Случај - Дебело црево

Када користите Цасе Статемент, можете додати онолико редова кода колико желите да покренете са сваким условом. Међутим, ако требате покренути само један ред кода. Можете користити Цолон (:) да све напишете у исти ред.

Ево истог примера оцене ученика као и раније, осим коришћења двотачке за скраћивање кода:

1234567891011121314151617 Под Цалц_Граде_цолон ()Дим Сцоре Ас ИнтегерДим ЛеттерГраде Ас СтрингСцоре = ИнпутБок ("Унесите оцену ученика")Изаберите Оцена случајаСлучај 90 до 100: ЛеттерГраде = "А"Случај 80 до 90: ЛеттерГраде = "Б"Случај 70 до 80: ЛеттерГраде = "Ц"Случај 60 до 70: ЛеттерГраде = "Д"Други случај: ЛеттерГраде = "Ф"Крај ИзаберитеМсгБок "Оцена ученика је:" & ЛеттерГрадеЕнд Суб

Избор случаја - И / Или - Више услова

Помоћу оператора И / Или можете да тестирате додатне критеријуме заједно са случајем одабира.

У овом примеру користимо Селецт Цасе на променљивој „аге“, али желимо и да тестирамо пол. Зато користимо Анд Оператор за извођење сложенијег теста:

123456789101112131415161718 Под НестедСелецтЦасе ()Дим сек Ас СтрингДим аге Ас Интегерсек = "мушко" или женскостарост = 15Изаберите Старост случајаСлучај је <20 И пол = "мушки"СМС порука „Мушкарци млађи од 20 година“Случај је <20 И пол = "женски"СМС порука „Жене млађе од 20 година“Случај је> = 20 И пол = "мушки"СМС порука „Мушкарци старији од 20 година“Случај је> = 20 И пол = "женски"СМС порука „Жене старије од 20 година“Крај ИзаберитеЕнд Суб

Изјаве о угнежђеним случајевима

Баш као и Иф Статементс, можете угнеждити изјаве случајева једна у другу:

123456789101112131415161718192021222324 Под НестедСелецтЦасе ()Дим сек Ас СтрингДим аге Ас Интегерсек = "мушко" или женскостарост = 15Изаберите Старост кућиштаСлучај је <20Изаберите Случајни полСлучај "мушки"МсгБок "Мушкарци испод 20 година"Случај "женски"МсгБок "Жене испод 20 година"Крај ИзаберитеСлучај је> = 20 И пол = "женски"Изаберите Случајни полСлучај "мушки"МсгБок "Мушкарци старији од 20 година"Случај "женски"МсгБок "Жене старије од 20 година"Крај ИзаберитеКрај ИзаберитеЕнд Суб

Цасе Статемент вс. Иф Статемент

Што је више услова за тестирање, изјава случаја је кориснија у поређењу са изјавом Иф. Погледајмо пример.

Ево кода који је потребан за тестирање да ли је назив радног листа једнак скупу вредности помоћу наредбе Иф:

12345 Иф Наме = "Будгет" Или Наме = "Форецаст" Или Наме = "Траилинг12" Или _Наме = "Флек" Или Наме = "ОтхерРатиос" Или Наме = "Поређење" Или _Наме = "БудРевиев" Или Наме = "П & Л_Ревиев" Или Наме = "Остало" Затим'Уради нештоКрај Ако

Ево истог кода уместо којег се користи изјава о избору:

12345 Изаберите Назив случајаСлучај "Буџет", "Предвиђање", "Траилинг12", "Флек", "ОтхерРатиос", _„Поређење“, „БудРевиев“, „П & Л_Ревиев“, „Остало“'Уради нештоКрај Изаберите

Можете видети да је у овом сценарију много лакше користити изјаву о избору. Знатно је мање куцања и много је лакше читати.

ВБА Изаберите примере случајева

Примјер 1. Изјава о случају Кориснички дефинирана функција (УДФ)

Хајде да поновимо наш горњи пример израчунавања оцена и направимо УДФ за израчунавање оцене ученика:

12345678910111213141516 Функција ГетГраде (Сцоре Ас Интегер) Ас СтрингИзаберите Оцена случајаСлучај 90 до 100ГетГраде = "А"Случај 80 до 90ГетГраде = "Б"Случај 70 до 80ГетГраде = "Ц"Случај 60 до 70ГетГраде = "Д"Цасе ЕлсеГетГраде = "Ф"Крај ИзаберитеЗавршна функција

Сада можемо користити функцију ГетГраде на нашем Екцел радном листу за брзо израчунавање оцена ученика:

Пример 2. Назив испитног листа / Изјава о случају петље

Овај код ће проћи кроз све радне листове у радној свесци, листове за заштиту који задовољавају одређене критеријуме:

123456789101112 Суб Цасе_УнПротецтСхеет ()Дим вс Ас ВорксхеетЗа сваки вс у радним листовимаИзаберите Цасе вс.Наме 'Листа свих листова са односимаСлучај "Буџет", "Предвиђање", "Траилинг12", "Флек", "ОтхерРатиос", _„Поређење“, „БудРевиев“, „П & Л_Ревиев“, „Остало“вс.УнпротецтКрај ИзаберитеНект всЕнд Суб

Примјер 3. Одаберите случај - вриједност ћелије

Овај пример ће тестирати оцену ученика у ћелији, исписујући словну оцену директно у ћелију десно.

12345678910111213141516 Суб ТестЦеллВалуе ()Дим целл Ас РангеПостави ћелију = опсег ("Ц1")Одаберите Цасе целл.ВалуеСлучај 90 до 100целл.Оффсет (0, 1) = "А"Случај 80 до 90целл.Оффсет (0, 1) = "Б"Случај 70 до 80целл.Оффсет (0, 1) = "Ц"Случај 60 до 80целл.Оффсет (0, 1) = "Д"Крај ИзаберитеЕнд Суб

Примјер 4. Одаберите случај - датуми

Пример овог избора случаја је функција која тестира у који квартал датум пада.

123456789101112131415161718 Суб ТестДате ()МсгБок ГетКуартер (ЦДате ("20.7.2019."))Енд СубФункција ГетКуартер (дт као датум) као цео бројДим схт Ас ВорксхеетИзаберите Цасе дтСлучај ЦДате ("01.01.2019") За ЦДате ("31.03.2019")ГетКуартер = 1Случај ЦДате ("04/01/2019") За ЦДате ("30/06/2019")ГетКуартер = 2Случај ЦДате ("07/07/2019") За ЦДате ("30/09/2019")ГетКуартер = 3Случај ЦДате ("01.10.2019") За ЦДате ("31.12.2019")ГетКуартер = 4Крај ИзаберитеЗавршна функција

Пошто је то функција, можете је користити као функцију унутар програма Екцел:

Ек. 5 Проверите да ли је број непаран или паран

Овај пример проверава да ли је број непаран или паран.

123456789101112 Суб ЦхецкОддЕвен ()Дим н Ас Интегерн = ИнпутБок ("Унесите број")Изаберите Случај н Мод 2Случај 0МсгБок "Број је паран."Случај 1МсгБок "Број је непаран."Крај ИзаберитеЕнд Суб

Ек. 6 Тестирајте да ли је датум радним даном или викендом

Ови примери ће тестирати да ли датум пада радним даном или викендом.

123456789101112131415161718192021 Суб ЦхецкВеекДаи ()Дим дт Ас Датедт = ЦДате ("1/1/2020")Одаберите радни дан (дт)Цасе вбМондаиМсгБок "Понедељак је"Цасе вбТубедаиМсгБок "Уторак је"Случај вбСриједаМсгБок "Среда је"Случај вбЧетвртакМсгБок "Четвртак је"Случај вбФридаиМсгБок "Петак је"Случај вбСуботаМсгБок "Субота је"Случај вбСундаиМсгБок "Недеља је"Крај ИзаберитеЕнд Суб
123456789101112 Суб ЦхецкВеекенд ()Дим дт Ас Датедт = ЦДате ("1/1/2020")Одаберите радни дан (дт)Случај вбСубота, вбСедњаМсгБок "Викенд је"Цасе ЕлсеМсгБок "Није викенд"Крај ИзаберитеЕнд Суб

ВБА Изаберите случај у Аццессу

Сви горе наведени примери раде потпуно исто у Аццесс ВБА као и у Екцел ВБА.

123456789101112131415161718192021 Суб ТестЦеллВалуе ()Дим дбс као база податакаЗатамните прво као РецордСетСет дбс = ЦуррентДБПостави рст = дбс.ОпенРецордсет ("тблЦлиентс", дбОпенДинасет)Са првим.МовеФирст.УредитиИзаберите случај рст.Фиелдс ("Град")Случај "Аустин".рст.Фиелдс ("ТелЦоде") = "512"Случај "Чикаго".рст.Фиелдс ("ТелЦоде") = "312"Случај "Нев ИорК".рст.Фиелдс ("ТелЦоде") = "1212"Случај "Сан Франсисцо".рст.Фиелдс ("ТелЦоде") = "415"Крај Изаберите.АжурирањеЗавршитиЕнд Сус
wave wave wave wave wave