- Izvēlieties gadījuma piemēru
- Gadījuma paziņojuma sintakse
- Atlasiet gadījuma kritērijus
- Atlasiet Lieta - teksts un līdzīgs operators
- Lieta - Kolons
- Gadījuma izvēle - un / vai - vairāki nosacījumi
- Ligzdoto lietu paziņojumi
- Paziņojums par gadījumu pret If paziņojumu
- VBA atlasīto lietu piemēri
- VBA atlasiet lietu lietā Access
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 |