- Odaberite Primjer slučaja
- Sintaksa iskaza slučaja
- Odaberite Kriterije slučaja
- Odaberite velika slova - operator i operater sličan
- Slučaj - debelo crijevo
- Odabir slučaja - I / Ili - Više uvjeta
- Ugniježđene izjave slučajeva
- Case Statement vs If If Statement
- VBA Odabir primjera slučajeva
- VBA Odaberite slučaj u Accessu
U VBA -i, Odaberite Izjavu o slučaju alternativa je Izjava If-Then, omogućujući vam da testirate jesu li ispunjeni uvjeti, pokrećući specifični kod za svaki uvjet. Izjava o odabiru poželjnija je od izjave If ako postoji više uvjeta za obradu.
Odaberite Primjer slučaja
Ovaj primjer od korisnika traži YesNoCancel MessageBox i testira koju je opciju korisnik odabrao:
1234567891011121314 | Sub Select_Case_Yes_No_Cancel ()Dim nResult Kao VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Odaberite Case nResultSlučaj vbDaMsgBox "Da"Slučaj vbNoMsgBox "Ne"Slučaj vbCancelMsgBox "Otkaži"Kraj OdaberiteKraj podm |
U nastavku smo ispisali ekvivalent koristeći umjesto If naredbu. Primijetit ćete da izjava o odabiru slučaja uključuje nešto manje tipkanja - ta se prednost pojačava pri testiranju više kriterija.
12345678910111213 | Sub Ako_Da_Ne_Odustani ()Dim nResult Kao VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Ako je nResult = vbDaMsgBox "Da"OstaloAko je nResult = vbNo TadaMsgBox "Ne"OstaloAko je nResult = vbOdustani ZatimMsgBox "Otkaži"Završi akoKraj podm |
Sintaksa iskaza slučaja
Sintaksa Select Case Statement je sljedeća:
12345678910 | Odaberite slučaj [Test Expression]Slučaj [Uvjet 1][Radnja ako je uvjet 1 istinit]Slučaj [Uvjet 2][Radnja ako je uvjet 2 istinit]Slučaj [Uvjet n][Radnja ako je uvjet n istinit]Drugi slučaj[Radnja ako ništa nije točno]Kraj Odaberite |
Gdje:
[Testni izraz] - Je li vrijednost koju treba procijeniti. Obično je ovo varijabla.
[Radnja ako je uvjet n istinit] - Je li samo kôd za pokretanje ako je uvjet ispunjen (baš kao i s If izjavom)
[Uvjet n] - Je li uvjet za testiranje. Postoji mnogo različitih načina ispitivanja uvjeta. O njima ćemo raspravljati u nastavku.
Izjava slučaja izvršit će kôd za PRVI uvjet za koji se utvrdi da je TRUE. Ako nijedan uvjet nije ispunjen, neće se izvršiti kôd, osim ako se ne doda klauzula Else.
Odaberite Kriterije slučaja
Odabrani slučajevi mogu se koristiti za procjenu numeričkih vrijednosti i teksta. Prvo ćemo razgovarati o tome kako koristiti Select Cases za procjenu numeričkih izraza.
Točno podudaranje - brojevi
Lako možete provjeriti točno podudaranje s izjavom slučaja:
1 | Slučaj 10 |
ili dodajte zareze za provjeru točnih podudaranja s više brojeva:
1 | Slučajevi 20, 30, 40 |
1234567891011121314 | Sub ExactMatch_Numbers ()Dim n kao cijeli brojn = CInt (InputBox ("…"))Odaberite Slučaj brSlučaj 10'Ako je n 10 TadaSlučajevi 20, 30, 40'Ako je n 20/30/40 TadaSlučaj Inače'Ako n nije 10/20/30/40 TadaKraj OdaberiteKraj podm |
Dometi
Možete provjeriti spada li broj u raspon ovako:
1 | Slučaj 55 do 74 |
Ovaj postupak generirat će slovnu ocjenu za studente na temelju njihove brojčane ocjene:
12345678910111213141516171819202122 | Pod Calc_Grade ()Zatamni rezultat kao cijeli brojZatamni LetterGrade As StringScore = InputBox ("Unesite ocjenu učenika")Odaberite Ocjenu slučajaSlučaj 90 do 100LetterGrade = "A"Slučaj 80 do 90LetterGrade = "B"Slučaj 70 do 80LetterGrade = "C"Slučaj 60 do 70LetterGrade = "D"Drugi slučajLetterGrade = "F"Kraj OdaberiteMsgBox "Ocjena učenika je:" & LetterGradeKraj podm |
Raspone možete testirati i pomoću Case Is
Odaberite Case Is
1234 | Slučaj je <55'Ne čini ništaSlučaj <= 74MsgBox "U dometu" |
Upamtite da će izjava slučaja izvršiti kôd SAMO za prvo podudaranje.
Ovaj postupak izračunat će ocjenu učenika koristeći Case Is umjesto Case To.
12345678910111213141516171819202122 | Sub Select_Case_Is_Grade ()Zatamni rezultat kao cijeli brojZatamni LetterGrade As StringScore = InputBox ("Unesite ocjenu učenika")Odaberite Ocjenu slučajaSlučaj je> = 90LetterGrade = "A"Slučaj je> = 80LetterGrade = "B"Slučaj je> = 70LetterGrade = "C"Slučaj je> = 60LetterGrade = "D"Slučaj InačeLetterGrade = "F"Kraj OdaberiteMsgBox "Ocjena učenika je:" & LetterGradeKraj podm |
Slučaj Inače
Možete dodati “Case Else” na kraj svoje izjave o slučaju da učinite nešto ako nisu ispunjeni uvjeti:
1 | Drugi slučaj |
Pogledajte kraj prethodnog primjera koda da biste vidjeli kako se Case Else može koristiti.
Odaberite velika slova - operator i operater sličan
Do sada su naši primjeri Select Case radili samo s brojevima. Također možete koristiti izjave Odaberi slučaj s tekstom.
Točno podudaranje - tekst
Možete provjeriti odgovara li izraz točnoj frazi poput ove:
1 | Slučaj "Cikla" |
Ili pomoću zareza provjerite podudara li se izraz točno s više fraza:
1 | Kućište "Apple", "Banana", "Orange" |
Sastavljanje izgleda ovako:
12345678910 | Sub ExactMatch_Food ()Odaberite Raspon slučajeva ("a1"). VrijednostSlučaj "Cikla"MsgBox "Povrće"Kućište "Apple", "Banana", "Orange"MsgBox "Voće"Kraj OdaberiteKraj podm |
Veliko i malo slovo
Prema zadanim postavkama, VBA je osjetljiv na velika i mala slova. To znači da VBA smatra "Tekst" drugačijim od "teksta". Da biste isključili velika i mala slova, dodajte opciju Usporedi tekst na vrh modula:
1 | Opcija Usporedi tekst |
Ovaj primjer učinit će Odabir velikih i malih slova neosjetljivim pri radu s tekstom:
123456789101112 | Opcija Usporedi tekstSub ExactMatch_Food ()Odaberite Raspon slučajeva ("a1"). VrijednostSlučaj "Cikla"MsgBox "Povrće"Kućište "Apple", "Banana", "Orange"MsgBox "Voće"Kraj OdaberiteKraj podm |
Slučaj kao
Operator Like omogućuje vam da napravite netočne usporedbe. Ako se tekst podudara, Like vraća TRUE, ako se ne podudara, vraća FALSE. To čini operator Like lakim za korištenje s If Statementima, međutim neće raditi tako lako s State Case.
Slučaj poput - neuspješan test
Sljedeći kôd pokazuje da operator Like Like ne radi s Select Case:
1234567891011 | Sub Select_Case_Like_DoesnotWork ()Prigušena riječ kao nizword = "COCOA"Odaberite Pisana riječVelika riječ 2 Kao "*C*C*"MsgBox "Dobro"Slučaj InačeMsgBox "Nije dobro"Kraj OdaberiteKraj podm |
Slučaj kao - ispravan način
Međutim, možemo dodati izraz TRUE kako bi Izjava Select radila s operatorom Like:
1234567891011 | Sub Select_Case_Like_CorrectWay ()Prigušena riječ kao nizword = "COCOA"Odaberite True CaseVelika slova poput "*C*C*"MsgBox "Dobro"Slučaj InačeMsgBox "Nije dobro"Kraj OdaberiteKraj podm |
Slučaj - debelo crijevo
Kada koristite Case Statement, možete dodati onoliko redaka koda koliko želite pokrenuti sa svakim uvjetom. Međutim, ako trebate pokrenuti samo jedan redak koda. Možete koristiti Colon (:) da sve napišete u isti redak.
Ovdje je isti primjer ocjene učenika kao i prije, osim korištenja dvotočke za skraćivanje koda:
1234567891011121314151617 | Pod Calc_Grade_colon ()Zatamni rezultat kao cijeli brojZatamni LetterGrade As StringScore = InputBox ("Unesite ocjenu učenika")Odaberite Ocjenu slučajaSlučaj 90 do 100: LetterGrade = "A"Slučaj 80 do 90: LetterGrade = "B"Slučaj 70 do 80: LetterGrade = "C"Slučaj 60 do 70: LetterGrade = "D"Drugi slučaj: LetterGrade = "F"Kraj OdaberiteMsgBox "Ocjena učenika je:" & LetterGradeKraj podm |
Odabir slučaja - I / Ili - Više uvjeta
Možete upotrijebiti operatore I / Ili za testiranje dodatnih kriterija zajedno sa slučajem odabira.
U ovom primjeru koristimo Select Case na varijabli "dob", ali također želimo testirati spol. Stoga koristimo And Operator za izvođenje složenijeg testa:
123456789101112131415161718 | PodgniježđenoSelectCase ()Dim sex As StringZatamni dob kao cijeli brojspol = "muško" ili ženskodob = 15Odaberite Dob slučajaSlučaj je <20, a spol = "muški"SMS poruka "Muškarci mlađi od 20 godina"Slučaj je <20, a spol = "ženski"SMS poruka "Žene mlađe od 20 godina"Slučaj je> = 20 I spol = "muški"SMS poruka "Muškarci stariji od 20 godina"Slučaj je> = 20 I spol = "ženski"SMS poruka "Žene starije od 20 godina"Kraj OdaberiteKraj podm |
Ugniježđene izjave slučajeva
Baš kao i If Statements, izjave slučajeva možete ugnijezditi jedna u drugu:
123456789101112131415161718192021222324 | PodgniježđenoSelectCase ()Dim sex As StringZatamni dob kao cijeli brojspol = "muško" ili ženskodob = 15Odaberite Dob slučajaSlučaj je <20Odaberite Slučajni spolSlučaj "muški"MsgBox "Muški do 20 godina"Slučaj "ženski"MsgBox "Žene mlađe od 20 godina"Kraj OdaberiteSlučaj je> = 20 I spol = "ženski"Odaberite Slučajni spolSlučaj "muški"MsgBox "Muškarci stariji od 20 godina"Slučaj "ženski"MsgBox "Žene starije od 20 godina"Kraj OdaberiteKraj OdaberiteKraj podm |
Case Statement vs If If Statement
Što je više uvjeta za testiranje, izjava slučaja je korisnija u usporedbi s izjavom If. Pogledajmo primjer.
Ovdje je kôd potreban za testiranje je li naziv radnog lista jednak skupu vrijednosti pomoću naredbe If:
12345 | Ako je Naziv = "Proračun" Ili Naziv = "Prognoza" Ili Naziv = "Na kraju12" Ili _Name = "Flex" Ili Name = "OtherRatios" Ili Name = "Usporedba" Ili _Name = "BudReview" Ili Name = "P & L_Review" Ili Name = "Ostalo" Zatim'Učini neštoZavrši ako |
Evo istog koda koji umjesto toga koristi izjavu o odabiru:
12345 | Odaberite naziv slučajaSlučaj "Proračun", "Prognoza", "Trailing12", "Flex", "Ostali omjeri", _"Usporedba", "BudReview", "P & L_Review", "Ostalo"'Učini neštoKraj Odaberite |
Možete vidjeti da je u ovom scenariju mnogo lakše koristiti izjavu o odabiru. Znatno je manje tipkanja i puno je lakše čitati.
VBA Odabir primjera slučajeva
Primjer 1. Izjava o slučaju Korisnički definirana funkcija (UDF)
Ponovimo naš gornji primjer izračunavanja ocjena i stvorimo UDF za izračun učenikovog rezultata:
12345678910111213141516 | Funkcija GetGrade (boduje kao cijeli broj) kao nizOdaberite Ocjenu slučajaSlučaj 90 do 100GetGrade = "A"Slučaj 80 do 90GetGrade = "B"Slučaj 70 do 80GetGrade = "C"Slučaj 60 do 70GetGrade = "D"Slučaj InačeGetGrade = "F"Kraj OdaberiteZavršna funkcija |
Sada možemo koristiti funkciju GetGrade na našem radnom listu programa Excel za brzo izračunavanje ocjena učenika:
Primjer 2. Naziv ispitnog lista / Izjava o slučaju petlje
Ovaj kôd će proći kroz sve radne listove u radnoj knjizi, listove za zaštitu koji zadovoljavaju određene kriterije:
123456789101112 | Sub Case_UnProtectSheet ()Zatamni kao radni listZa svaki ws u radnim listovimaOdaberite Case ws.Name 'Popis svih listova s omjerimaSlučaj "Proračun", "Prognoza", "Trailing12", "Flex", "Ostali omjeri", _"Usporedba", "BudReview", "P & L_Review", "Ostalo"ws.UnprotectKraj OdaberiteSljedeći wsKraj podm |
Primjer 3. Odaberite slučaj - vrijednost ćelije
Ovaj primjer će testirati učenikov rezultat u ćeliji, ispisujući ocjenu slova izravno u ćeliju s desne strane.
12345678910111213141516 | Pod TestCellValue ()Prigušena ćelija kao rasponPostavi ćeliju = raspon ("C1")Odaberite Slučajna ćelija.VrijednostSlučaj 90 do 100cell.Offset (0, 1) = "A"Slučaj 80 do 90cell.Offset (0, 1) = "B"Slučaj 70 do 80cell.Offset (0, 1) = "C"Slučaj 60 do 80cell.Offset (0, 1) = "D"Kraj OdaberiteKraj podm |
Primjer 4. Odaberite slučaj - datumi
Ovaj primjer odabira slučaja je funkcija koja testira u koji kvartal pada datum.
123456789101112131415161718 | Sub TestDate ()MsgBox GetQuarter (CDate ("20.7.2019."))Kraj podmFunkcija GetQuarter (dt kao datum) kao cijeli brojZatamni kao radni listOdaberite Case dtSlučaj CDate ("01/01/2019") Za CDate ("31/03/2019")GetQuarter = 1Slučaj CDate ("04/01/2019") Za CDate ("30/06/2019")GetQuarter = 2Slučaj CDate ("07/01/2019") Za CDate ("30/09/2019")GetQuarter = 3Slučaj CDate ("10/01/2019") Za CDate ("31/12/2019")GetQuarter = 4Kraj OdaberiteZavršna funkcija |
Budući da je funkcija, možete je koristiti kao funkciju unutar programa Excel:
Npr. 5 Provjerite je li broj neparan ili paran
Ovaj primjer provjerava je li broj neparan ili paran.
123456789101112 | Sub CheckOddEven ()Dim n kao cijeli brojn = InputBox ("Unesite broj")Odaberite slučaj n Mod 2Slučaj 0MsgBox "Broj je paran."Slučaj 1MsgBox "Broj je neparan."Kraj OdaberiteKraj podm |
Npr. 6 Testirajte je li datum radnim danom ili vikendom
Ovi će primjeri provjeriti pada li datum na dan radnog dana ili vikend.
123456789101112131415161718192021 | Sub CheckWeekDay ()Priguši dt kao datumdt = CDate ("1/1/2020")Odaberite radni dan (dt)Slučaj vbponedjeljakMsgBox "Danas je ponedjeljak"Slučaj vbUtorakMsgBox "Utorak je"Slučaj vbSrijedaMsgBox "Srijeda je"Slučaj vbČetvrtakMsgBox "Četvrtak je"Slučaj vbPetakMsgBox "Petak je"Slučaj vbSubotaMsgBox "Subota je"Slučaj vbSundayMsgBox "Nedjelja je"Kraj OdaberiteKraj podm |
123456789101112 | Sub CheckWeekend ()Priguši dt kao datumdt = CDate ("1/1/2020")Odaberite radni dan (dt)Slučaj vbSubota, vbNedeljaMsgBox "Vikend je"Slučaj InačeMsgBox "Nije vikend"Kraj OdaberiteKraj podm |
VBA Odaberite slučaj u Accessu
Svi gornji primjeri rade potpuno isto u Access VBA kao i u Excel VBA.
123456789101112131415161718192021 | Pod TestCellValue ()Dim dbs kao baza podatakaPrvo zatamnite kao RecordSetPostavite dbs = CurrentDBPostavi rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)S prvim.Pomiči se prvo.UrediOdaberite slučaj rst.Fields ("Grad")Slučaj "Austin".rst.Fields ("TelCode") = "512"Slučaj "Chicago".rst.Fields ("TelCode") = "312"Slučaj "New YorK".rst.Fields ("TelCode") = "1212"Slučaj "San Fransisco".rst.Fields ("TelCode") = "415"Kraj Odaberite.AžuriranjeZavrši sKraj Sus |