VBA Izjava o primeru

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