VBA Изберете декларация за случай

Във VBA, Изберете Декларация за случая е алтернатива на Изявление Ако-тогава, което ви позволява да тествате дали условията са изпълнени, изпълнявайки специфичен код за всяко условие. Изявлението за избор е за предпочитане пред изявлението If, когато има няколко условия за обработка.

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

Този пример подканва потребителя с YesNoCancel MessageBox и тества коя опция е избрал потребителят:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult Като VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Изберете Case nResultСлучай vbДаMsgBox "Да"Дело vbNoMsgBox "Не"Калъф vbCancelMsgBox "Отказ"Край ИзберетеEnd Sub

По -долу сме изписали еквивалента, използвайки вместо това Statement If. Ще забележите, че декларацията за избор на случай включва малко по -малко въвеждане - тази полза се усилва при тестване на множество критерии.

12345678910111213 Sub Ако_Да_Не_Отказ ()Dim nResult Като VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Ако nResult = vbДа ТогаваMsgBox "Да"В противен случай, ако nResult = vbNo ТогаваMsgBox "Не"ElseIf nResult = vbCancel ТогаваMsgBox "Отказ"Край АкоEnd Sub

Синтаксис на казус

Синтаксисът на Избор на изявление на случая е следният:

12345678910 Изберете случай [Тестов израз]Случай [условие 1][Действие, ако условие 1 е вярно]Случай [условие 2][Действие, ако условие 2 е вярно]Случай [условие n][Действие, ако условие n е вярно]Дело иначе[Действие, ако нито едно не е вярно]Край Изберете

Където:

[Тестов израз] - Стойността е за оценка. Обикновено това е променлива.

[Действие, ако условие n е вярно] - Само кодът да се изпълнява, ако условието е изпълнено (точно както при оператор If)

[Условие n] - Условието за тестване. Има много различни начини за тестване на условията. Ще ги обсъдим по -долу.

Декларацията за случая ще изпълни кода за ПЪРВОТО условие, за което се установи, че е TRUE. Ако не е изпълнено условие, няма да се изпълни код, освен ако не е добавена клаузата Else.

Изберете критерии за случай

Избраните случаи могат да се използват за оценка както на числови стойности, така и на текст. Първо ще обсъдим как да използваме Select Cases за оценка на числови изрази.

Точно съвпадение - числа

Можете лесно да тествате за точно съвпадение с Case Statement:

1 Случай 10

или добавете запетаи за тестване за точно съвпадение с множество числа:

1 Дело 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers ()Dim n като цяло числоn = CInt (InputBox ("…"))Изберете случай nСлучай 10'Ако n е 10, тогаваДело 20, 30, 40'Ако n е 20/30/40 ТогаваДело иначе'Ако n не е 10/20/30/40 ТогаваКрай ИзберетеEnd Sub

Диапазони

Можете да тествате дали дадено число попада в диапазон по следния начин:

1 Дело 55 до 74

Тази процедура ще генерира писмен резултат за студент въз основа на числения им резултат:

12345678910111213141516171819202122 Под Calc_Grade ()Dim Score As IntegerЗатъмнете LetterGrade As StringРезултат = InputBox ("Въведете студентски резултат")Изберете Case ScoreДело 90 до 100LetterGrade = "А"Дело 80 до 90LetterGrade = "B"Случай 70 до 80LetterGrade = "C"Дело 60 до 70LetterGrade = "D"Дело иначеLetterGrade = "F"Край ИзберетеMsgBox "Оценката на ученика е:" & LetterGradeEnd Sub

Можете също да тествате диапазони с Case Is

Изберете Case Is

1234 Делото е <55„Не правете нищоСлучай <= 74MsgBox "В обхват"

Не забравяйте, че State Statement ще изпълнява код САМО за първото съвпадение.

Тази процедура ще изчисли оценката на ученика, като използва Case Is вместо Case To.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Dim Score As IntegerЗатъмнете LetterGrade As StringРезултат = InputBox ("Въведете студентски резултат")Изберете Case ScoreДелото е> = 90LetterGrade = "А"Случаят е> = 80LetterGrade = "B"Случаят е> = 70LetterGrade = "C"Случаят е> = 60LetterGrade = "D"Дело иначеLetterGrade = "F"Край ИзберетеMsgBox "Оценката на ученика е:" & LetterGradeEnd Sub

Дело иначе

Можете да добавите „Case Otherse“ в края на вашия Statement Case, за да направите нещо, ако не са изпълнени условия:

1 Дело иначе

Вижте края на предишния пример за код, за да видите как може да се използва Case Else.

Изберете Дело - текст и подобен оператор

Досега нашите примери за Select Case са работили само с числа. Можете също да използвате изявления за Избор на случай с текст.

Точно съвпадение - текст

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

1 Калъф "Цвекло"

Или използвайте запетаи, за да проверите дали изразът съвпада точно с повече от една фраза:

1 Калъф "Apple", "Banana", "Orange"

Сглобяването му изглежда така:

12345678910 Sub ExactMatch_Food ()Изберете Диапазон на случаите ("a1"). СтойностКалъф "Цвекло"MsgBox "Зеленчук"Калъф "Apple", "Banana", "Orange"MsgBox "Плодове"Край ИзберетеEnd Sub

Големи и малки букви

По подразбиране VBA е чувствителен към регистър. Това означава, че VBA счита „Текст“ за различен от „текст“. За да изключите чувствителността към регистър, добавете Опция Сравняване на текст в горната част на вашия модул:

1 Опция Сравняване на текст

Този пример ще направи регистъра на регистрите нечувствителен при работа с текст:

123456789101112 Опция Сравняване на текстSub ExactMatch_Food ()Изберете Диапазон на случаите ("a1"). СтойностКалъф "Цвекло"MsgBox "Зеленчук"Калъф "Apple", "Banana", "Orange"MsgBox "Плодове"Край ИзберетеEnd Sub

Дело като

Операторът Like ми позволява да правите неточни сравнения. Ако текстът съвпада, Like връща TRUE, ако не съвпада, връща FALSE. Това прави оператора Like лесен за използване с If изявления, но няма да работи толкова лесно с State Case.

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

Следният код показва, че операторът Like не работи с Select Case:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Затъмнена дума As Stringword = "COCOA"Изберете Писателна думаДелна дума2 Като "*C*C*"MsgBox "Добре"Дело иначеMsgBox "Не е добре"Край ИзберетеEnd Sub

Случай като - правилният начин

Въпреки това, можем да добавим в израза TRUE, за да накараме оператора за избор да работи с оператора Like:

1234567891011 Sub Select_Case_Like_CorrectWay ()Затъмнена дума As Stringword = "COCOA"Изберете True CaseДелнична дума като "*C*C*"MsgBox "Добре"Дело иначеMsgBox "Не е добре"Край ИзберетеEnd Sub

Калъф - Колон

Когато използвате Case Statement, можете да добавите толкова редове код, колкото искате да изпълните с всяко условие. Ако обаче трябва да изпълните само един ред код. Можете да използвате двоеточие (:), за да напишете всичко на същия ред.

Ето същия пример за оценка на учениците както преди, с изключение на използването на двоеточие за съкращаване на кода:

1234567891011121314151617 Под Calc_Grade_colon ()Dim Score As IntegerЗатъмнете LetterGrade As StringРезултат = InputBox ("Въведете студентски резултат")Изберете Case ScoreДело 90 до 100: LetterGrade = "A"Случай 80 до 90: LetterGrade = "B"Случай 70 до 80: LetterGrade = "C"Дело 60 до 70: LetterGrade = "D"Друг случай: LetterGrade = "F"Край ИзберетеMsgBox "Оценката на ученика е:" & LetterGradeEnd Sub

Избор на случай - и / или - множество условия

Можете да използвате операторите And / Or, за да тествате допълнителни критерии заедно с Select Case.

В този пример използваме Select Case за променливата „възраст“, ​​но също така искаме да тестваме пола. Затова използваме оператора And за извършване на по -сложния тест:

123456789101112131415161718 Sub NestedSelectCase ()Dim sex As StringDim age As Integersex = "мъж" или женавъзраст = 15Изберете Възраст на случаяДелото е <20 И пол = "мъжки"Msgbox "Мъж под 20"Дело е <20 И пол = "женски"Msgbox "Жена под 20"Случай е> = 20 И пол = "мъжки"Msgbox "Мъж над 20"Случай е> = 20 И пол = "женски"Msgbox "Жена над 20"Край ИзберетеEnd Sub

Вложени изявления на случаите

Точно като If Statements, можете да поставите State Statements един в друг:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Dim sex As StringDim age As Integersex = "мъж" или женавъзраст = 15Изберете Възраст на случаяСлучаят е <20Изберете Секс по случайКалъф "мъжки"MsgBox "Мъж под 20"Калъф "женски"MsgBox "Жена под 20"Край ИзберетеСлучай е> = 20 И пол = "женски"Изберете Секс по случайКалъф "мъжки"MsgBox "Мъж над 20"Калъф "женски"MsgBox "Жена над 20"Край ИзберетеКрай ИзберетеEnd Sub

Изложение на случая срещу изявление на If

Колкото повече условия за тестване, толкова по -полезна е декларацията за случая в сравнение с изявлението If. Нека разгледаме един пример.

Ето кода, необходим за тестване дали името на работен лист се равнява на набор от стойности, използвайки оператор If:

12345 Ако Име = "Бюджет" Или Име = "Прогноза" Или Име = "Продължаващо12" Или _Name = "Flex" Or Name = "OtherRatios" Или Name = "Сравнение" Или _Name = "BudReview" Или Name = "P & L_Review" Или Name = "Други" Тогава'Направи нещоКрай Ако

Ето същия код, като вместо това се използва Избрано изявление:

12345 Изберете Име на случаяДело "Бюджет", "Прогноза", "Затваряне12", "Гъвкаво", "Други съотношения", _„Сравнение“, „BudReview“, „P & L_Review“, „Други“'Направи нещоКрай Изберете

Можете да видите, че е много по -лесно да използвате Избрано изявление в този сценарий. Това е значително по -малко писане и е много по -лесно за четене.

Примери за избор на VBA

Пример 1. Декларация за случая Функция, дефинирана от потребителя (UDF)

Нека да възпроизведем нашия пример за изчисляване на оценките по -горе и да създадем UDF за изчисляване на резултата на ученика:

12345678910111213141516 Функция GetGrade (Score As Integer) As StringИзберете Case ScoreДело 90 до 100GetGrade = "А"Дело 80 до 90GetGrade = "B"Случай 70 до 80GetGrade = "C"Дело 60 до 70GetGrade = "D"Дело иначеGetGrade = "F"Край ИзберетеКрайна функция

Сега можем да използваме Функция GetGrade в нашия работен лист на Excel за бързо изчисляване на оценките на учениците:

Пример 2. Име на тестовия лист / Декларация за случай на цикъл

Този код ще премине през всички работни листове в работна книга, листове за защита, които отговарят на определени критерии:

123456789101112 Sub Case_UnProtectSheet ()Затъмнете като работен листЗа всеки ws в работни листовеИзберете Case ws.Name 'Списък на всички листове с съотношенияДело "Бюджет", "Прогноза", "Затваряне12", "Гъвкаво", "Други съотношения", _„Сравнение“, „BudReview“, „P & L_Review“, „Други“ws.UnprotectКрай ИзберетеСледващата wsEnd Sub

Пример 3. Изберете случай - Стойност на клетката

Този пример ще тества оценката на ученик в клетка, извеждайки оценката на буквата директно в клетката вдясно.

12345678910111213141516 Sub TestCellValue ()Затъмняване на клетката като обхватЗадаване на клетка = Обхват ("C1")Изберете Case cell.ValueДело 90 до 100cell.Offset (0, 1) = "A"Дело 80 до 90cell.Offset (0, 1) = "B"Случай 70 до 80cell.Offset (0, 1) = "C"Дело 60 до 80cell.Offset (0, 1) = "D"Край ИзберетеEnd Sub

Пример 4. Изберете случай - Дати

Този пример за избор на случай е функция, която тества в кое тримесечие на датата попада.

123456789101112131415161718 Sub TestDate ()MsgBox GetQuarter (CDate ("7/20/2019"))End SubФункция GetQuarter (dt като дата) като цяло числоDim sht като работен листИзберете Case dtДело CDate ("01/01/2019") Към CDate ("31/03/2019")GetQuarter = 1Дело CDate ("04/01/2019") Към CDate ("30/06/2019")GetQuarter = 2Дело CDate ("07/01/2019") Към CDate ("30/09/2019")GetQuarter = 3Дело CDate ("10/01/2019") Към CDate ("31/12/2019")GetQuarter = 4Край ИзберетеКрайна функция

Тъй като това е функция, можете да я използвате като функция в Excel:

Пр. 5 Проверете дали числото е нечетно или четно

Този пример тества дали числото е нечетно или четно.

123456789101112 Sub CheckOddEven ()Dim n като цяло числоn = InputBox ("Въведете число")Изберете случай n Mod 2Случай 0MsgBox "Номерът е четен."Случай 1MsgBox "Номерът е нечетен."Край ИзберетеEnd Sub

Пр. 6 Проверете дали датата е в делничен или уикенд

Тези примери ще тестват дали датата пада в делничен ден или уикенд.

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt като датаdt = CDate ("1/1/2020")Избор на делния ден (dt)Дело vbПонеделникMsgBox "Понеделник е"Дело vbВторникMsgBox "Вторник е"Дело vbСрядаMsgBox "Сряда е"Дело vbЧетвъртъкMsgBox "Четвъртък е"Дело vbПетъкMsgBox "Петък е"Дело vbСъботаMsgBox "Събота е"Случай vbSundayMsgBox "Неделя е"Край ИзберетеEnd Sub
123456789101112 Sub CheckWeekend ()Dim dt като датаdt = CDate ("1/1/2020")Избор на делния ден (dt)Дело vbСъбота, vbСъботаMsgBox "Това е уикенд"Дело иначеMsgBox "Това не е уикенд"Край ИзберетеEnd Sub

VBA Изберете случай в Access

Всички горепосочени примери работят абсолютно същото в Access VBA като в Excel VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs като база данниПърво затъмнете като RecordSetЗадайте dbs = CurrentDBЗадайте rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)С първи.Преместете първо.РедактиранеИзберете Case rst.Fields ("City")Калъф "Остин".rst.Fields ("TelCode") = "512"Калъф "Чикаго".rst.Fields ("TelCode") = "312"Дело "Ню Йорк".rst.Fields ("TelCode") = "1212"Калъф "Сан Франциско".rst.Fields ("TelCode") = "415"Край Изберете.АктуализиранеКрай сКрай Сус
wave wave wave wave wave