V VBA je Izberite izjavo o primeru je alternativa Izjava če-potem, ki vam omogoča, da preizkusite, ali so pogoji izpolnjeni, z izvajanjem posebne kode za vsak pogoj. Izjava o izbiri je boljša od izjave If, če je za obdelavo več pogojev.
Izberite Primer primera
Ta primer uporabnika pozove z YesNoCancel MessageBox in preizkusi, katero možnost je uporabnik izbral:
1234567891011121314 | Sub Select_Case_Yes_No_Cancel ()Zatemni nResult Kot VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Izberite Primer nRezultatPrimer vbDaMsgBox "Da"Primer vbNoMsgBox "Ne"Primer vbCancelMsgBox "Prekliči"Konec IzberiteEnd Sub |
Spodaj smo enakovredno zapisali z uporabo stavka If. Opazili boste, da izjava o izbiri primera vključuje nekoliko manj tipkanja - ta prednost se poveča pri preizkušanju več meril.
12345678910111213 | Sub Če_Da_Ne_prekliči ()Zatemni nResult Kot VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Če je nResult = vbDaMsgBox "Da"Če ni nResult = vbNo PotemMsgBox "Ne"V nasprotnem primeru če nResult = vbCancel PotemMsgBox "Prekliči"Konec ČeEnd Sub |
Sintaksa izjave o primeru
Sintaksa Izbira izjave o primeru je naslednja:
12345678910 | Izberite primer [Testni izraz]Primer [Pogoj 1][Dejanje, če je pogoj 1 res]Primer [Pogoj 2][Dejanje, če je pogoj 2 res]Primer [Pogoj n][Dejanje, če je pogoj n res]Primer drugače[Dejanje, če nobeno ni res]Konec Izberite |
Kje:
[Testni izraz] - Je vrednost za vrednotenje. Običajno je to spremenljivka.
[Dejanje, če je pogoj n res] - Ali je treba kodo zagnati, če je pogoj izpolnjen (tako kot pri izjavi If)
[Pogoj n] - Je pogoj za testiranje. Obstaja veliko različnih načinov preverjanja pogojev. O njih bomo razpravljali spodaj.
Izjava primera bo izvedla kodo za PRVI pogoj, za katerega je ugotovljeno, da je TRUE. Če noben pogoj ni izpolnjen, se ne izvede nobena koda, razen če je dodan člen Else.
Izberite Merila primera
Izberi primere lahko uporabite za ovrednotenje številčnih vrednosti in besedila. Najprej se bomo pogovorili o tem, kako uporabiti izbrane primere za ovrednotenje numeričnih izrazov.
Natančno ujemanje - številke
Natančno ujemanje lahko preprosto preizkusite z izjavo primera:
1 | Primer 10 |
ali dodajte vejice za preverjanje natančnih ujemanj z več številkami:
1 | Primer 20, 30, 40 |
1234567891011121314 | Sub ExactMatch_Numbers ()Dim n kot celo številon = CInt (InputBox ("…"))Izberite Primer nPrimer 10'Če je n 10, potemPrimer 20, 30, 40'Če je n 20/30/40, potemPrimer drugače'Če n ni 10/20/30/40 PotemKonec IzberiteEnd Sub |
Dometi
Lahko preskusite, ali je število v razponu, kot je ta:
1 | Primer 55 do 74 |
Ta postopek bo ustvaril črkovno oceno za študenta glede na njihovo številčno oceno:
12345678910111213141516171819202122 | Sub Calc_Grade ()Zatemni rezultat kot celo številoZatemni LetterGrade As StringScore = InputBox ("Vnesite oceno študenta")Izberite oceno primeraPrimer 90 do 100LetterGrade = "A"Primer 80 do 90LetterGrade = "B"Primer 70 do 80LetterGrade = "C"Primer 60 do 70LetterGrade = "D"Primer drugačeLetterGrade = "F"Konec IzberiteMsgBox "Ocena študenta je:" & LetterGradeEnd Sub |
Dosege lahko preizkusite tudi s Case Is
Izberite Primer je
1234 | Primer je <55'Delati ničPrimer <= 74MsgBox "V dosegu" |
Ne pozabite, da bo izjava o primeru izvedla kodo SAMO za prvo ujemanje.
Ta postopek bo ocenil oceno študenta z uporabo primera Is namesto primera To.
12345678910111213141516171819202122 | Sub Select_Case_Is_Grade ()Zatemni rezultat kot celo številoZatemni LetterGrade As StringScore = InputBox ("Vnesite oceno študenta")Izberite oceno primeraPrimer je> = 90LetterGrade = "A"Primer je> = 80LetterGrade = "B"Primer je> = 70LetterGrade = "C"Primer je> = 60LetterGrade = "D"Primer drugačeLetterGrade = "F"Konec IzberiteMsgBox "Ocena študenta je:" & LetterGradeEnd Sub |
Primer drugače
Na konec izjave o primeru lahko dodate »Primer drugega«, da naredite nekaj, če niso izpolnjeni nobeni pogoji:
1 | Primer drugače |
Na koncu prejšnjega primera kode si oglejte, kako lahko uporabite Case Else.
Izberite velika in velika črka operaterja
Doslej so naši primeri Select Case delovali samo s številkami. Izjave Select Case lahko uporabite tudi z besedilom.
Natančno ujemanje - Besedilo
Lahko preizkusite, ali se izraz ujema z natančno frazo, kot je ta:
1 | Etui "pesa" |
Ali pa z vejicami preizkusite, ali se izraz natančno ujema z več kot enim stavkom:
1 | Etui "Apple", "Banana", "Orange" |
Sestavljanje izgleda tako:
12345678910 | Sub ExactMatch_Food ()Izberite obseg velikih črk ("a1"). VrednostEtui "pesa"MsgBox "Zelenjava"Etui "Apple", "Banana", "Orange"MsgBox "Sadje"Konec IzberiteEnd Sub |
Velike in male črke
Privzeto VBA je občutljiv na velike in male črke. To pomeni, da VBA meni, da je besedilo drugačno od besedila. Če želite izklopiti velike in male črke, na vrh modula dodajte možnost Primerjaj besedilo:
1 | Možnost Primerjaj besedilo |
Ta primer bo pri izbiri velikih in malih črk pri delu z besedilom neobčutljiv na velike in male črke:
123456789101112 | Možnost Primerjaj besediloSub ExactMatch_Food ()Izberite obseg velikih črk ("a1"). VrednostEtui "pesa"MsgBox "Zelenjava"Etui "Apple", "Banana", "Orange"MsgBox "Sadje"Konec IzberiteEnd Sub |
Primer podoben
Operater Like vam omogoča, da naredite nenatančne primerjave. Če se besedilo ujema, Like vrne TRUE, če se ne ujema, pa vrne FALSE. Zaradi tega je operater Like enostaven za uporabo z izjavami If, vendar z izjavami primerov ne bo deloval tako enostavno.
Primer podoben - neuspešen test
Naslednja koda dokazuje, da operater Like ne deluje z Select Case:
1234567891011 | Sub Select_Case_Like_DoesnotWork ()Zatemnjena beseda kot nizword = "COCOA"Izberite Veliko besedoVelika beseda2 Kot "*C*C*"MsgBox "Dobro"Primer drugačeMsgBox "Ni dobro"Konec IzberiteEnd Sub |
Primer podoben - pravilna pot
V izraz TRUE pa lahko dodamo, da izjava Select deluje z operaterjem Like:
1234567891011 | Sub Select_Case_Like_CorrectWay ()Zatemnjena beseda kot nizword = "COCOA"Izberite Primer resničenVelika beseda Kot "*C*C*"MsgBox "Dobro"Primer drugačeMsgBox "Ni dobro"Konec IzberiteEnd Sub |
Etui - debelo črevo
Ko uporabljate stavek primera, lahko z vsakim pogojem dodate toliko vrstic kode, ki jih želite zagnati. Če pa morate zagnati samo eno vrstico kode. Z dvopičjem (:) lahko vse napišete v isto vrstico.
Tukaj je isti primer ocene študentov kot prej, razen uporabe dvopičja za skrajšanje kode:
1234567891011121314151617 | Sub Calc_Grade_colon ()Zatemni rezultat kot celo številoZatemni LetterGrade As StringScore = InputBox ("Vnesite oceno študenta")Izberite oceno primeraPrimer 90 do 100: LetterGrade = "A"Primer 80 do 90: LetterGrade = "B"Primer 70 do 80: LetterGrade = "C"Primer 60 do 70: LetterGrade = "D"Drugi primer: LetterGrade = "F"Konec IzberiteMsgBox "Ocena študenta je:" & LetterGradeEnd Sub |
Izbira primera - In / Ali - Več pogojev
Z operaterji And / Or lahko preizkusite dodatna merila skupaj z Select Case.
V tem primeru uporabljamo Select Case za spremenljivko "starost", želimo pa tudi preizkusiti spol. Zato uporabimo operater And za izvedbo bolj zapletenega testa:
123456789101112131415161718 | PodgnezdeniSelectCase ()Dim sex As StringZatemni starost kot celo številospol = "moški" ali ženskastarost = 15Izberite Starost primeraPrimer je <20 In spol = "moški"Sporočilo "Moški do 20 let"Primer je <20 In spol = "ženska"Sporočilo "Ženska do 20 let"Primer je> = 20 In sex = "moški"Sporočilo "Moški nad 20 let"Primer je> = 20 In sex = "ženska"Sporočilo "Ženske, starejše od 20 let"Konec IzberiteEnd Sub |
Izjave o ugnezdenih primerih
Tako kot If Statements lahko izjave primerov gnezdite drug v drugem:
123456789101112131415161718192021222324 | PodgnetniSelectCase ()Dim sex As StringZatemni starost kot celo številospol = "moški" ali ženskastarost = 15Izberite Starost primeraPrimer je <20Izberite Primer spolaEtui "moški"MsgBox "Moški do 20 let"Etui "ženski"MsgBox "Ženske do 20 let"Konec IzberitePrimer je> = 20 In spol = "ženska"Izberite Primer spolaEtui "moški"MsgBox "Moški nad 20 let"Etui "ženski"MsgBox "Ženske nad 20 let"Konec IzberiteKonec IzberiteEnd Sub |
Izjava primera proti izjavi If
Več pogojev za testiranje, bolj uporaben je primer izjave v primerjavi z izjavo If. Poglejmo primer.
Tu je koda, ki je potrebna za preverjanje, ali je ime delovnega lista enako nizu vrednosti z uporabo stavka If:
12345 | Če Name = "Proračun" Ali Name = "Napoved" Ali Name = "Slednji12" Ali _Name = "Flex" Ali Name = "OtherRatios" Ali Name = "Primerjava" Ali _Name = "BudReview" Ali Name = "P & L_Review" Ali Name = "Drugo" Potem'Naredi kajKonec Če |
Tu je ista koda, ki namesto tega uporablja izjavo Select:
12345 | Izberite Ime primeraPrimer "Proračun", "Napoved", "Slednji12", "Flex", "Druga razmerja", _"Primerjava", "BudReview", "P & L_Review", "Drugo"'Naredi kajKonec Izberite |
Vidite lahko, da je v tem scenariju veliko lažje uporabiti izjavo o izbiri. Bistveno manj tipka in je veliko lažje brati.
VBA Izberite primere primerov
Primer 1. Izjava primera Uporabniško določena funkcija (UDF)
Ponovimo zgornji primer izračuna ocen in ustvarimo UDF za izračun ocene študenta:
12345678910111213141516 | Funkcija GetGrade (Score As Integer) As StringIzberite oceno primeraPrimer 90 do 100GetGrade = "A"Primer 80 do 90GetGrade = "B"Primer 70 do 80GetGrade = "C"Primer 60 do 70GetGrade = "D"Primer drugačeGetGrade = "F"Konec IzberiteKončana funkcija |
Zdaj lahko uporabimo funkcijo GetGrade na našem delovnem listu Excel za hiter izračun ocen študentov:
Primer 2. Ime preskusnega lista / izjava o primeru zanke
Ta koda bo preklapljala po vseh delovnih listih v delovnem zvezku, listih za zaščito, ki izpolnjujejo določena merila:
123456789101112 | Sub Case_UnProtectSheet ()Zatemni kot delovni listZa vsak ws na delovnih listihIzberite Case ws.Name 'Seznam vseh listov z razmerjiPrimer "Proračun", "Napoved", "Slednji12", "Flex", "Druga razmerja", _"Primerjava", "BudReview", "P & L_Review", "Drugo"ws.UnprotectKonec IzberiteNaslednji wsEnd Sub |
Primer 3. Izberite Primer - vrednost celice
Ta primer bo preizkusil oceno učenca v celici in črkovno oceno prikazal neposredno v celici na desni.
12345678910111213141516 | Sub TestCellValue ()Zatemni celico kot obsegNastavi celico = obseg ("C1")Izberite Primer celice.VrednostPrimer 90 do 100cell.Offset (0, 1) = "A"Primer 80 do 90cell.Offset (0, 1) = "B"Primer 70 do 80cell.Offset (0, 1) = "C"Primer 60 do 80cell.Offset (0, 1) = "D"Konec IzberiteEnd Sub |
Primer 4. Izberite Primer - Datumi
Ta primer izbire primera je funkcija, ki preizkusi, v katero četrtletje datuma spada.
123456789101112131415161718 | Sub TestDate ()MsgBox GetQuarter (CDate ("20.7.2019"))End SubFunkcija GetQuarter (dt kot datum) kot celo številoZatemni kot delovni listIzberite Case dtZadeva CDate ("01/01/2019") Za CDate ("31/03/2019")GetQuarter = 1Zadeva CDate ("04/01/2019") Za CDate ("30/06/2019")GetQuarter = 2Zadeva CDate ("07/01/2019") Za CDate ("30/09/2019")GetQuarter = 3Zadeva CDate ("10/01/2019") Za CDate ("31/12/2019")GetQuarter = 4Konec IzberiteKončana funkcija |
Ker je funkcija, jo lahko uporabite kot funkcijo v Excelu:
Npr. 5 Preverite, ali je število liho ali sodo
Ta primer preverja, ali je število liho ali sodo.
123456789101112 | Sub CheckOddEven ()Dim n kot celo številon = InputBox ("Vnesite številko")Izberite Primer n Mod 2Primer 0MsgBox "Število je sodo."Primer 1MsgBox "Številka je liha."Konec IzberiteEnd Sub |
Npr. 6 Preverite, ali je datum na dan med tednom ali vikendom
Ti primeri bodo preverili, ali je datum na delavnik ali vikend.
123456789101112131415161718192021 | Sub CheckWeekDay ()Zatemni dt kot datumdt = CDate ("1/1/2020")Izbira primera med tednom (dt)Primer vb ponedeljekMsgBox "Ponedeljek je"Primer vbtorekMsgBox "Danes je torek"Primer vbSredaMsgBox "Danes je sreda"Primer vbČetrtekMsgBox "Četrtek je"Primer vbPetekMsgBox "Petek je"Primer vbSobotaMsgBox "Sobota je"Primer vb nedeljaMsgBox "Nedelja je"Konec IzberiteEnd Sub |
123456789101112 | Sub CheckWeekend ()Zatemni dt kot datumdt = CDate ("1/1/2020")Izbira primera med tednom (dt)Primer vbSobota, vbSedejaMsgBox "To je vikend"Primer drugačeMsgBox "Ni vikend"Konec IzberiteEnd Sub |
VBA Izberite primer v Accessu
Vsi zgornji primeri delujejo popolnoma enako v Access VBA kot v Excelu VBA.
123456789101112131415161718192021 | Sub TestCellValue ()Zatemni dbs kot bazo podatkovNajprej zatemni kot RecordSetNastavite dbs = CurrentDBNastavite rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)S prvim.Premakni se najprej.UrediIzberite zadevo rst.Fields ("City")Primer "Austin".rst.Fields ("TelCode") = "512"Zadeva "Chicago".rst.Fields ("TelCode") = "312"Primer "New YorK".rst.Fields ("TelCode") = "1212"Primer "San Fransisco".rst.Fields ("TelCode") = "415"Konec Izberite.NadgradnjaKončaj sKonec Sus |