VBA paziņojums par atsevišķu gadījumu

VBA, Atlasiet gadījuma pārskatu ir alternatīva Ja-tad paziņojums, ļaujot pārbaudīt, vai nosacījumi ir izpildīti, katram nosacījumam izpildot īpašu kodu. Atlases paziņojums ir labāks par paziņojumu Ja, ja ir jāapstrādā vairāki nosacījumi.

Izvēlieties gadījuma piemēru

Šajā piemērā lietotājs tiek aicināts ar YesNoCancel MessageBox un tiek pārbaudīta lietotāja atlasītā opcija.

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult Kā VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Atlasiet Case nResultLieta vbJāMsgBox "Jā"Lieta vbNēMsgBox "Nē"Lieta vbCancelMsgBox "Atcelt"Beigas AtlasītBeigu apakš

Zemāk mēs esam uzrakstījuši ekvivalentu, tā vietā izmantojot paziņojumu Ja. Jūs pamanīsit, ka gadījuma izvēles paziņojums ietver nedaudz mazāk rakstīšanas - šis ieguvums tiek pastiprināts, pārbaudot vairākus kritērijus.

12345678910111213 Ja If_Jā_Nē_Atcelt ()Dim nResult Kā VbMsgBoxResultnResult = MsgBox ("…", vbJāNoCancel)Ja nResult = vbJā TadMsgBox "Jā"CitādiJa nResult = vbNē TadMsgBox "Nē"CitādiJa nResult = vbAtcelt TadMsgBox "Atcelt"Beigas JaBeigu apakš

Gadījuma paziņojuma sintakse

Izvēles gadījuma paziņojuma sintakse ir šāda:

12345678910 Atlasīt lietu [Pārbaudīt izteiksmi]Lieta [1. nosacījums][Rīcība, ja 1. nosacījums ir patiess]Lieta [2. nosacījums][Rīcība, ja 2. nosacījums ir patiess]Lieta [nosacījums n][Rīcība, ja nosacījums n ir patiess]Cita lieta[Rīcība, ja neviena nav patiesa]Beigas Atlasīt

Kur:

[Pārbaudīt izteiksmi] - Vai vērtība ir jānovērtē. Parasti tas ir mainīgs lielums.

[Rīcība, ja nosacījums n ir patiess] - Vai kods ir jāizpilda, ja nosacījums ir izpildīts (tāpat kā ar paziņojumu Ja)

[Nosacījums] - Vai nosacījums ir pārbaudīt. Ir daudz dažādu veidu, kā pārbaudīt apstākļus. Mēs tos apspriedīsim tālāk.

Lietas paziņojums izpildīs PIRMĀ nosacījuma kodu, kas tiek atzīts par PATIESU. Ja neviens nosacījums nav izpildīts, kods netiks izpildīts, ja vien nav pievienots cits noteikums.

Atlasiet gadījuma kritērijus

Atlasīt gadījumus var izmantot, lai novērtētu gan skaitliskās vērtības, gan tekstu. Vispirms mēs apspriedīsim, kā izmantot atlasītos gadījumus, lai novērtētu skaitliskas izteiksmes.

Precīza atbilstība - skaitļi

Izmantojot lietas paziņojumu, varat viegli pārbaudīt precīzu atbilstību:

1 10. gadījums

vai pievienojiet komatus, lai pārbaudītu precīzas atbilstības ar vairākiem skaitļiem:

1 20., 30., 40. lieta
1234567891011121314 Sub ExactMatch_Numbers ()Dim n Kā vesels skaitlisn = CInt (ievades lodziņš ("…"))Atlasiet lietu n10. gadījums'Ja n ir 10, tad20., 30., 40. lieta"Ja n ir 20/30/40, tadCita lieta"Ja n nav 10/20/30/40, tadBeigas AtlasītBeigu apakš

Diapazoni

Varat pārbaudīt, vai skaitlis ietilpst šādā diapazonā:

1 Lieta no 55. līdz 74.

Šī procedūra studentam ģenerēs burtu punktu skaitu, pamatojoties uz viņa skaitlisko rezultātu:

12345678910111213141516171819202122 Sub Calc_Grade ()Dim Score kā vesels skaitlisDim LetterGrade kā virkneRezultāts = InputBox ("Ievadiet studenta rezultātu")Atlasiet lietu rādītājsLieta no 90 līdz 100LetterGrade = "A"Lieta no 80. līdz 90LetterGrade = "B"Lieta no 70. līdz 80LetterGrade = "C"Lieta no 60. līdz 70LetterGrade = "D"Cita lietaLetterGrade = "F"Beigas AtlasītMsgBox "Studenta pakāpe ir:" & LetterGradeBeigu apakš

Varat arī pārbaudīt diapazonus, izmantojot Case Is

Atlasiet lietu

1234 Gadījums ir <55'Neko nedarītLieta <= 74MsgBox "diapazonā"

Atcerieties, ka gadījuma paziņojums izpildīs kodu tikai TIKAI pirmajai atbilstībai.

Šī procedūra aprēķinās skolēna atzīmi, izmantojot Lieta, nevis Lieta.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Dim Score kā vesels skaitlisDim LetterGrade kā virkneRezultāts = InputBox ("Ievadiet studenta rezultātu")Atlasiet lietu rādītājsLieta ir> = 90LetterGrade = "A"Lieta ir> = 80LetterGrade = "B"Lieta ir> = 70LetterGrade = "C"Lieta ir> = 60LetterGrade = "D"Cita lietaLetterGrade = "F"Beigas AtlasītMsgBox "Studenta pakāpe ir:" & LetterGradeBeigu apakš

Cita lieta

Lietas paziņojuma beigās varat pievienot “Case Else”, lai kaut ko darītu, ja nav izpildīti nekādi nosacījumi.

1 Cita lieta

Skatiet iepriekšējā koda piemēra beigas, lai uzzinātu, kā var izmantot Case Else.

Atlasiet Lieta - teksts un līdzīgs operators

Līdz šim mūsu atlasītās lietas piemēri ir strādājuši tikai ar skaitļiem. Izlases gadījuma paziņojumus varat izmantot arī ar tekstu.

Precīza atbilstība - teksts

Varat pārbaudīt, vai izteiksme atbilst precīzai frāzei:

1 Lieta "Bietes"

Vai izmantojiet komatus, lai pārbaudītu, vai izteiksme precīzi atbilst vairākām frāzēm:

1 Lieta "Apple", "Banana", "Orange"

Tā salikšana izskatās šādi:

12345678910 Sub ExactMatch_Food ()Atlasiet lietu diapazons ("a1"). VērtībaLieta "Bietes"MsgBox "Dārzeņi"Lieta "Apple", "Banana", "Orange"MsgBox "Augļi"Beigas AtlasītBeigu apakš

Lielie un mazie burti

Pēc noklusējuma VBA ir reģistrjutīgs. Tas nozīmē, ka VBA uzskata, ka “teksts” atšķiras no “teksta”. Lai izslēgtu reģistrjutību, moduļa augšdaļā pievienojiet opciju Salīdzināt tekstu:

1 Opcija Salīdzināt tekstu

Šajā piemērā, strādājot ar tekstu, lielo un mazo burtu reģistru neievēros:

123456789101112 Opcija Salīdzināt tekstuSub ExactMatch_Food ()Atlasiet lietu diapazons ("a1"). VērtībaLieta "Bietes"MsgBox "Dārzeņi"Lieta "Apple", "Banana", "Orange"MsgBox "Augļi"Beigas AtlasītBeigu apakš

Lieta Patīk

Līdzīgais operators ļauj veikt neprecīzus salīdzinājumus. Ja teksts atbilst, Patīk atgriež Patiesu, ja neatbilst, atgriež FALSE. Tas atvieglo operatora Patīk lietošanu ar If paziņojumiem, taču ar lietu paziņojumiem tas nedarbosies tik vienkārši.

Lieta patīk - neizdevies tests

Šis kods parāda, ka līdzīgais operators nedarbojas ar atlasīto gadījumu:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Vājš vārds kā virknevārds = "KAKAO"Atlasiet Lietiņas vārdsLietiņas vārds2 Patīk "*C*C*"MsgBox "Labi"Cita lietaMsgBox "Nav labi"Beigas AtlasītBeigu apakš

Lieta patīk - pareizais ceļš

Tomēr mēs varam pievienot TRUE izteiksmi, lai atlases paziņojums darbotos ar līdzīgu operatoru:

1234567891011 Sub Select_Case_Like_CorrectWay ()Vājš vārds kā virknevārds = "KAKAO"Atlasiet “Patiess gadījums”Lietiņas vārds, piemēram, "*C*C*"MsgBox "Labi"Cita lietaMsgBox "Nav labi"Beigas AtlasītBeigu apakš

Lieta - Kolons

Izmantojot gadījuma paziņojumu, ar katru nosacījumu varat pievienot tik daudz koda rindu, cik vēlaties. Tomēr, ja jums ir jāpalaiž tikai viena koda rinda. Varat izmantot kolu (:), lai uzrakstītu visu vienā rindā.

Šeit ir tāds pats studentu atzīmju piemērs kā iepriekš, izņemot koda izmantošanu, lai saīsinātu kodu:

1234567891011121314151617 Sub Calc_Grade_colon ()Dim Score kā vesels skaitlisDim LetterGrade kā virkneRezultāts = InputBox ("Ievadiet studenta rezultātu")Atlasiet lietu rādītājsLieta no 90 līdz 100: LetterGrade = "A"Lieta no 80 līdz 90: LetterGrade = "B"70. līdz 80. gadījums: LetterGrade = "C"60. līdz 70. gadījums: LetterGrade = "D"Cita lieta: LetterGrade = "F"Beigas AtlasītMsgBox "Studenta pakāpe ir:" & LetterGradeBeigu apakš

Gadījuma izvēle - un / vai - vairāki nosacījumi

Varat izmantot opciju Un / vai Operatori, lai kopā ar atlasīto gadījumu pārbaudītu papildu kritērijus.

Šajā piemērā mēs izmantojam izvēles gadījumu mainīgajam “vecums”, taču vēlamies arī pārbaudīt seksu. Tāpēc mēs izmantojam And Operator, lai veiktu sarežģītāku testu:

123456789101112131415161718 Sub NestedSelectCase ()Dim sekss kā stīgaDim vecums Kā vesels skaitlisdzimums = "vīrietis" vai sievietevecums = 15Atlasiet lietas vecumsLieta ir <20 Un sekss = "vīrietis"Msgbox "Vīrietis līdz 20 gadiem"Lieta ir <20 Un sekss = "sieviete"Msgbox "Sieviete līdz 20 gadiem"Lieta ir> = 20 Un sekss = "vīrietis"Msgbox "Vīrietis virs 20"Lieta ir> = 20 Un sekss = "sieviete"Msgbox "Sieviete virs 20"Beigas AtlasītBeigu apakš

Ligzdoto lietu paziņojumi

Tāpat kā If paziņojumus, arī lietu paziņojumus varat ievietot viens otrā:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Dim sekss kā stīgaDim vecums Kā vesels skaitlisdzimums = "vīrietis" vai sievietevecums = 15Atlasiet lietas vecumsLieta ir <20Izvēlieties Seksa gadījumsLieta "vīrietis"MsgBox "Vīrietis līdz 20 gadiem"Lieta "sieviete"MsgBox "Sieviete līdz 20 gadiem"Beigas AtlasītLieta ir> = 20 Un sekss = "sieviete"Izvēlieties Seksa gadījumsLieta "vīrietis"MsgBox "Vīrietis virs 20"Lieta "sieviete"MsgBox "Sieviete virs 20"Beigas AtlasītBeigas AtlasītBeigu apakš

Paziņojums par gadījumu pret If paziņojumu

Jo vairāk nosacījumu jāpārbauda, ​​jo lietderīgāks ir salīdzinājums ar paziņojumu Ja. Apskatīsim piemēru.

Šeit ir kods, kas nepieciešams, lai pārbaudītu, vai darblapas nosaukums ir vienāds ar vērtību kopu, izmantojot paziņojumu Ja:

12345 Ja Name = "Budget" Vai Name = "Forecast" Or Name = "Trailing12" Vai _Name = "Flex" Vai Name = "OtherRatios" Vai Name = "Salīdzinājums" Vai _Name = "BudReview" Vai Name = "P & L_Review" Vai Name = "Other" Tad'Dari kaut koBeigas Ja

Šeit ir tas pats kods, izmantojot atlasīto paziņojumu:

12345 Izvēlieties lietas nosaukumuLieta "Budžets", "Prognoze", "Trailing12", "Flex", "OtherRatios", _"Salīdzinājums", "BudReview", "P & L_Review", "Other"'Dari kaut koBeigas Atlasīt

Var redzēt, ka šajā scenārijā ir daudz vieglāk izmantot atlasīto paziņojumu. Tas ievērojami samazina rakstīšanu, un to ir daudz vieglāk lasīt.

VBA atlasīto lietu piemēri

1. piemērs. Lietotāja definēta funkcija (UDF)

Atkārtosim mūsu iepriekšminēto aprēķinu piemēru un izveidosim UDF, lai aprēķinātu studenta rezultātu:

12345678910111213141516 Funkcija GetGrade (rezultāts kā vesels skaitlis) kā virkneAtlasiet lietu rādītājsLieta no 90. līdz 100GetGrade = "A"Lieta no 80. līdz 90GetGrade = "B"Lieta no 70. līdz 80GetGrade = "C"Lieta no 60. līdz 70GetGrade = "D"Cita lietaGetGrade = "F"Beigas AtlasītBeigu funkcija

Tagad mēs varam izmantot funkciju GetGrade savā Excel darblapā, lai ātri aprēķinātu studentu atzīmes:

Piemērs 2. Pārbaudes lapas nosaukums / cilpas gadījuma paziņojums

Šis kods izskatīs visas darbgrāmatas darblapas, lapas, kas neatbilst aizsardzībai, kas atbilst noteiktiem kritērijiem:

123456789101112 Sub Case_UnProtectSheet ()Dim ws kā darblapaPar katru ws darblapāsAtlasiet lietu ws.Name 'Visu lapu saraksts, kurās ir attiecībaLieta "Budžets", "Prognoze", "Trailing12", "Flex", "OtherRatios", _"Salīdzinājums", "BudReview", "P & L_Review", "Other"ws. AizsargātBeigas AtlasītNākamais wsBeigu apakš

Piem. 3. Atlasiet Lieta - šūnas vērtība

Šajā piemērā tiks pārbaudīts studenta rezultāts šūnā, burtu atzīme tiek parādīta tieši šūnā pa labi.

12345678910111213141516 Sub TestCellValue ()Dim šūna kā diapazonsIestatīt šūnu = diapazons ("C1")Atlasiet Lieta. VērtībaLieta no 90. līdz 100šūna. Nobīde (0, 1) = "A"Lieta no 80. līdz 90šūna. Nobīde (0, 1) = "B"Lieta no 70. līdz 80šūna. Nobīde (0, 1) = "C"Lieta no 60. līdz 80šūna. Nobīde (0, 1) = "D"Beigas AtlasītBeigu apakš

Piem. 4. Izvēlieties Lieta - datumi

Šis gadījuma izvēles piemērs ir funkcija, kas pārbauda, ​​kurā ceturksnī datums ietilpst.

123456789101112131415161718 Apakšdatuma datums ()MsgBox GetQuarter (CDate ("20.07.2019.))Beigu apakšFunkcija GetQuarter (dt kā datums) kā vesels skaitlisDim sht kā darblapaAtlasiet Lieta dtLieta CDate ("01/01/2019") līdz CDate ("03/31/2019")GetQuarter = 1Lieta CDate ("04/01/2019") līdz CDate ("06/30/2019")GetQuarter = 2Lieta CDate ("07/01/2019") līdz CDate ("09/30/2019")GetQuarter = 3Lieta CDate ("10/01/2019") līdz CDate ("12/31/2019")GetQuarter = 4Beigas AtlasītBeigu funkcija

Tā kā tā ir funkcija, varat to izmantot programmā Excel:

Piem. 5 Pārbaudiet, vai skaitlis ir nepāra vai pāra

Šajā piemērā tiek pārbaudīts, vai skaitlis ir nepāra vai pāra.

123456789101112 Sub CheckOddEven ()Dim n Kā vesels skaitlisn = InputBox ("Ievadiet numuru")Izvēlieties Case n Mod 20. gadījumsMsgBox "Skaitlis ir pāra."1. gadījumsMsgBox "Skaitlis ir nepāra."Beigas AtlasītBeigu apakš

Piem. 6 Pārbaudiet, vai datums ir nedēļas diena vai nedēļas nogale

Šie piemēri pārbaudīs, vai datums iekrīt darba dienā vai nedēļas nogalē.

123456789101112131415161718192021 Pārbaudes nedēļa ()Dim dt kā datumsdt = CDate ("1/1/2020")Atlasīt lietu nedēļas dienu (dt)Lieta vbPirmdienaMsgBox "Ir pirmdiena"Lieta vbOtrdienaMsgBox "Ir otrdiena"Lieta vbTrešdienaMsgBox "Ir trešdiena"Lieta vbCeturtdienaMsgBox "Ir ceturtdiena"Lieta vbPiektdienaMsgBox "Ir piektdiena"Lieta vbSestdienaMsgBox "Ir sestdiena"Lieta vbSvētdienaMsgBox "Ir svētdiena"Beigas AtlasītBeigu apakš
123456789101112 Sub CheckWeekend ()Dim dt kā datumsdt = CDate ("1/1/2020")Atlasīt lietu nedēļas dienu (dt)Lieta vbSestdiena, vbSvētdienaMsgBox "Ir nedēļas nogale"Cita lietaMsgBox "Tā nav nedēļas nogale"Beigas AtlasītBeigu apakš

VBA atlasiet lietu lietā Access

Visi iepriekš minētie piemēri Access VBA darbojas tieši tāpat kā programmā Excel VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs kā DatabaseIzmērs vispirms kā RecordSetIestatīt dbs = CurrentDBIestatiet rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Ar pirmo.MoveFirst.RediģētAtlasiet lietu Pirmie lauki ("Pilsēta")Lieta "Ostina".rst.Fields ("TelCode") = "512"Lieta "Čikāga".rst.Fields ("TelCode") = "312"Lieta "New YorK".rst.Fields ("TelCode") = "1212"Lieta "Sanfrancisko".rst.Fields ("TelCode") = "415"Beigas Atlasīt.AtjauninātBeigt arBeigt Sus
wave wave wave wave wave