VBA Izjava o slučaju

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
wave wave wave wave wave