"VBA VBA-kontrollstrukturer. Hvis

PROGRAMMERINGSSPRÅK VISUELL BASIC. PROGRAMMERING AVGRENE

Forgrening i Visual Basic er organisert ved å bruke:

  • betinget IF-erklæring;
  • innebygd IIF-funksjon;
  • CASE-valgoperatør.

For å teste en betingelse og utføre en setning eller blokk med setninger, bruk betinget erklæring HVIS...SÅ. Denne operatoren kan brukes med forskjellige syntakser: enkeltlinje (lineær) og flerlinjet (blokk).

Den lineære operatoren har følgende syntaks:

Hvis<условие>Deretter<операторы!>

Blokkoperatoren har følgende syntaks:

Hvis<условие>Deretter
<блок операторов 1>
Slutt om

Hvis den gitte betingelsen er True, utføres setningsblokken, ellers utføres setningsblokk2. Hvis Else-klausulen ikke er spesifisert, ifNår vilkåret er oppfylt, overføres kontrollen umiddelbart til neste operatør etter If.

If-setningen kan nestes, det vil si plassert inne i setningsblokker. For å teste mer enn én betingelse og utføre en av flere blokker med setninger, bruk en utvidet betinget setning av skjemaet:

Hvis<условие 1>Deretter
<блок операторов 1>
Ellers<условие 2>Deretter
<блок операторов 2>
Ellers<условие n>Deretter
<блок операторов n>
Slutt om

For å velge en av verdiene avhengig av tilfredsstillelse eller svikt i en tilstand, bruk IIF betinget funksjon, som har følgende syntaks:

IIF (<условие>, <значение1>, <значение2>)

Denne funksjonen returnerer verdi1 hvis betingelsen er sann og verdi2 hvis betingelsen er usann.

Du kan bruke et boolsk uttrykk som en betingelse som returnerer True eller

False, eller et hvilket som helst aritmetisk uttrykk (en nullverdi tilsvarer Usann, og en verdi som ikke er null er ekvivalent med True).

SELECT CASE-setning brukes til å teste en enkelt tilstand og utføre en av flere blokker med setninger.

Operatørregistreringsformat:

Velg Sak<проверяемое выражение>
Sak<список выражений 1>
<операторы 1>Sak<список выражений 2>
<операторы 2>Sak<список выражений 3>
<операторы 3>
Case Else
<операторы группы Else>
Avslutt Velg

Uttrykket som testes blir evaluert i begynnelsen av Select Case-setningen. Dette uttrykket kan returnere en verdi av hvilken som helst type (boolsk, numerisk, streng).

En liste over uttrykk er ett eller flere uttrykk atskilt med et standard skilletegn (semikolon).

Når operatøren kjøres, kontrolleres det om minst ett av elementene i denne listen samsvarer med uttrykket som testes.

Disse uttrykkslistene underholdsbidrag kan ha en av følgende former:

  • <выражение>- kontrollerer sammenfallet av et gitt uttrykk med et av uttrykkene - listeelementer;
  • <выражение 1>At<выражение 2>- sjekker om et gitt uttrykk faller innenfor det spesifiserte området;
  • < Is <логический оператор> < выражение>- kontrollerer oppfyllelsen av den angitte betingelsen for et gitt uttrykk.

Select Case-operatoren for VBA-språket er designet for å danne et utvalg av en operasjon avhengig av verdien; faktisk er denne valgoperatoren en hybrid av den betingede operatoren vba i så fall. Alt er ganske enkelt - i skriptet er det en variabel hvis verdi vil endres, og avhengig av verdien må du velge hvilken kodeblokk (uttrykk) som skal utføres.

Som i den betingede operatoren, sjekkes en verdi her, for eksempel: det er et tekstfelt der du må legge inn data, for eksempel alder. Deretter bør du sjekke den angitte verdien, hvis verdien er mindre enn 18, vis en tekst, hvis verdien er mellom 19 og 30, en annen tekst, ellers viser en tredje tekst. Som allerede nevnt kan en betinget operatør brukes til slike formål, men VBA Select Case-operatøren er et mer kompakt alternativ.

Syntaksen for VBA Select Case-setningen er:

Velg Saksbetydning
Velg betingelse 1
Operatørsett

Velg betingelse 2
Operatørsett

Velg betingelse 3
Operatørsett

….

Velg betingelse N
Operatørsett N

Case Else
Andre operatører


Avslutt Velg

Først sjekkes "verdi"-parameteren, som kan være enten en streng eller en numerisk type; etter å ha kontrollert parameteren, skjer en vekslende sammenligning (startende fra begynnelsen) med hver betingelse som er spesifisert i operatørene Velg Sak VBA. Hvis det oppstår en match for "betingelse 1", vil "setningssett 1" bli utført, hvoretter koden etter Avslutt Velg. Case Else-operatøren betyr formelt "Ellers", det vil si at hvis ingen av betingelsene er sanne, vil settet med operatører spesifisert for Case Else bli utført. Selve VBA-uttrykket er Case Else er valgfritt, som "andre operatorer", kan det utelates om nødvendig, det skrives alltid på slutten.

La oss se på denne eksempelkoden:

Private Sub CommandButton1_Click() Dim a a = TextBox1.Text Select Case a Case Is< 100 Label1.Caption = "Den angitte verdien er mindre enn 100" Sak 101 til 150 Label1.Caption = "Den angitte verdien er større enn 100 og mindre enn 151" Sak 151 til 200 Label1.Caption = "Den angitte verdien er større enn 151 og mindre enn 201" Case Else Label1.Caption = "Annen verdi, velg sak VBA-erklæring" End Select End Sub Private Sub UserForm_Activate() " innledende innstillinger "***************************** Label1.Caption = "" " tekststørrelse Label1.FontSize = 15 " tekstfarge Label1.ForeColor = &HFF0000 " senterjustering Label1.TextAlign = fmTextAlignCenter " aktiver linjebryting Label1.WordWrap = True " inskripsjon på knappen CommandButton1.Caption = "Vis" "opprinnelig innhold i tekstfeltet Tekstboks1.Tekst = "Skriv inn en hvilken som helst verdi" End Sub

I dette eksemplet har vi en prosedyre CommandButton1_Click, som er ansvarlig for å behandle knappeklikk. Variabelen a vil lagre verdien av tekstfeltet TextBox1 (Tekst-egenskap). Deretter kommer Select case VBA language selection statement, der verdien av variabel a kontrolleres, hvoretter verdien sammenlignes med betingelsene:

  • Saken er< 100 – hvis verdien av variabelen a er mindre enn 100
  • Sak 101 til 150– hvis verdien er i området fra 101 til 150
  • Sak 151 til 200– testområde fra 151 til 200
  • Case Else– faktisk alle andre betydninger.

Avhengig av resultatet av kontrollen, vil en informativ melding bli registrert i Caption-egenskapen til objektet.

Fremgangsmåte UserForm_Activate inneholder kodelinjer for den første konfigurasjonen av skjemakomponenter - farge, størrelse, innledende tekst og så videre.

Du kan se resultatet av å kjøre makroen i figuren. For å opprette en forbindelse mellom en makro og et skjema, må du skrive i kodeblokken for modulen:

Sub OBModule() OBForm.Show End Sub

Her OB-modul– navnet på modulen (makro), og OBForm– navn på skjemaet.

Det er verdt å merke seg at selv om betingelsen samsvarer, for eksempel: mindre enn 100 og mer enn 99, i Select Case-setningen vil bare den første samsvarende betingelsen bli utført, og alle andre vil bli ignorert.

Betingelser er svært nyttige i programmering fordi de lar oss utføre handlinger avhengig av angitte kriterier (samme prinsipp brukes som i HVIS Excel-funksjoner).

Den viktigste funksjonen som setter betingelsen er HVIS og nå skal vi se hvordan det fungerer:

If [CONDITION HERE] Then ="=> HVIS betingelsen er sann, SÅ "Instructions if true Else "=> ELSE "Instructions if false End If

La oss bli praktiske og gå tilbake til eksemplet vi brukte i variabelleksjonen. Hensikten med denne prosedyren var å åpne en dialogboks som ville inneholde verdien fra strengen spesifisert i cellen F5:

Hvis du skriver inn en bokstav i en celle F5, vil dette føre til en feil. Dette ønsker vi å forhindre.

Undervariabler () "Erklærer variabler Dim etternavn som streng, fornavn som streng, alder som heltall, radnummer som heltall "Tilordner verdier til variablene radnummer = Range("F5") + 1 etternavn = Celler(radnummer, 1) fornavn = Cells(row_number, 2) age = Cells(row_number, 3) "Dialog Box MsgBox last_name & " " & first_name & "," & age & " years" End Sub

La oss legge til en betingelse som vil sjekke om den angitte verdien er i cellen F5 nummer før koden utføres.

Vi vil bruke funksjonen IsNumeric for å sjekke tilstanden:

Undervariabler () "Hvis verdien i parentes (celle F5) er numerisk (OG DERFOR HVIS BETINGELSEN ER TRUE), så "utfør setningene som følger THEN If IsNumeric (Range ("F5")) Deretter "Declaring Variables Dim last_name As String , first_name As String, age As Integer, row_number As Integer "Tilordne verdier til variabler row_number = Range ("F5") + 1 last_name = Cells (row_number, 1) first_name = Cells (row_number, 2) age = Cells ( rad_nummer, 3) "Dialogboks MsgBox etternavn & " " & fornavn & "," & alder & " år" End If End Sub

Vi må også skrive ned instruksjoner hvis betingelsen vi setter ikke er oppfylt:

Undervariabler () If IsNumeric (Range ("F5")) Så "Hvis betingelsen er sann "Deklarerer variabler Dim etternavn som streng, fornavn som streng, alder som heltall, radnummer som heltall "Tilordner verdier til variablene radnummer = område ("F5") + 1 etternavn = Celler (radnummer, 1) fornavn = Celler (radnummer, 2) alder = Celler (radnummer, 3) "Dialogboks MsgBox etternavn & " " & fornavn & "," & alder & " år " Else "Hvis betingelsen ikke er utført "Dialogboks: MsgBox-advarsel "Den angitte verdien " & Range ("F5") & " er ikke gyldig!" "Sletter innholdet i celle F5-område ("F5"). ClearContents End If End Sub

Nå vil ikke-numeriske verdier forårsake noen problemer.

Når vi jobber med matrisen vår, som inneholder 16 rader med data, vil neste trinn være å sjekke om row_number-variabelen er "større enn eller lik 2" og "mindre enn eller lik 17".

Men først, la oss ta en titt på sammenligningsoperatører:

og disse nyttige operatørene:

La oss nå legge til en av betingelsene ovenfor OG mellom sammenligningsoperatører:

Undervariabler () If IsNumeric (Range ("F5")) Deretter "If numeric value Dim last_name As String, first_name As String, age As Integer, row_number As Integer row_number = Range ("F5") + 1 If row_number > = 2 Og rad_nummer

Hvis vi ønsker å gjøre makroen vår mer praktisk, kan vi erstatte 17 til en variabel som vil inneholde antall linjer. Dette vil tillate oss å legge til og fjerne rader fra arrayet uten å måtte endre denne grensen hver gang.

For å gjøre dette må vi lage en variabel nb_rows og legg til denne funksjonen.

I dette tilfellet bruker vi funksjonen ArbeidsarkFunction.CountA, som er en analog av funksjonen COUNTA i selve Excel.

Vi vil at denne funksjonen skal telle antall ikke-tomme celler i den første kolonnen og skrive den resulterende verdien til en variabel nb_rows:

Undervariabler () If IsNumeric (Range ("F5")) Deretter "IF NUMBER Dim etternavn Som String, first_name As String, age As Integer, row_number As Integer Dim nb_rows As Integer row_number = Range ("F5") + 1 nb_rows = WorksheetFunction.CountA (Range ("A:A")) "Radtellingsfunksjon Hvis radnummer > = 2 Og radnummer

Eller hvis

Eller hvis gjør det mulig å legge til ytterligere betingelser etter IF-kommandoen:

If [CONDITION 1] Then ="=> IF condition 1 is true, THEN "Instructions 1 ElseIf [CONDITION 2] Then ="=> IF condition 1 is usant, men betingelse 2 er sann, THEN "Instructions 2 Else "=> ELSE " Instruksjoner 3 Avslutt If

Hvis FORHOLD 1 utført, Instruksjon 1 vil bli utført og forlate erklæringen HVIS(som begynner med HVIS og slutter med End If). Hvis TILSTAND 2 tar verdien" å ligge ", så vil den bli utført Instruksjon 2, og hvis det i sin tur returnerer " å ligge ", Deretter Instruksjon 3(under Ellers) vil bli utført.

Sub scores_comment () "Variabler Dim note Som heltall, score_comment As String note = Range ("A1") "Kommentarer basert på poengsummen Hvis note = 6 Da score_comment = "Flott ball!" ElseIf note = 5 Da score_comment = "God poengsum" ElseIf note = 4 Da score_comment = "Tilfredsstillende poengsum" ElseIf note = 3 Da score_comment = "Utilfredsstillende poengsum" ElseIf note = 2 Da score_comment = "Dårlig poengsum" ElseIf note = 1 Da score_comment = "Forferdelig poengsum" Else score_comment = "Null poengsum" Slutt Hvis "Kommentar i celle B1-område ("B1") = score_comment Slutt-sub

Plukke ut

Det er et alternativ til å bruke Hvis med mange Eller hvis instruksjoner, nemlig kommandoen Plukke ut, som er mer egnet for denne typen situasjoner.

La oss se på et eksempel på en makro med operatøren Plukke ut:

Sub scores_comment () "Variables Dim note As Integer , score_comment As String note = Range ("A1") "Kommentarer basert på den mottatte poengsummen Velg Case note "

Det er verdt å merke seg at vi også kan bruke andre sammenligningsoperatorer:

Saken er >=6 "hvis verdien >=6

Eksempler med ulik betydning:

Tilfelle er = 6, 7 "hvis verdi = 6 eller 7 Case er 6, 7" hvis verdien ikke er 6 eller 7 Tilfelle 6 til 10 "hvis verdi = et hvilket som helst tall fra 6 til 10

Velg Eksempel på saksuttalelse

Det ville absolutt hjelpe å ha et eksempel for å vise hvordan en Select Case-struktur faktisk kan se ut.

Velg Case objRol l OffFi l m.Type

Etui "Slide"

intSlide = intSlide + 1

Sak "Farge negativ"

intColoredNegative = intColoredNegative + 1

Sak "BW negativ"

intBWnegative = intBWnegative + 1

MgaBox "Ukjent filmtype."

Denne kodebiten gjør i utgangspunktet det samme som eksempelkoden ovenfor fra If-setningsdelen. . .ElseIf (bare utløpskontrollen er utelatt). Siden da ser det imidlertid ut til at vårt hypotetiske objekt som representerer en filmrull har blitt litt modifisert - informasjon om fargen og fargeløsheten til filmen er nå også representert av Ture-egenskapen, og ikke en separat Fargeegenskap, som før.

Og hvis dette er tilfelle, trenger programmet bare å jobbe med én verdi - verdien som returneres av Type-egenskapen. - men denne verdien sammenlignes med flere av de gyldige. Så Select Case er akkurat det legen bestilte for vårt tilfelle.

Den første bruken av Case-operatoren i dette eksemplet tilsvarer å bruke If objRollOf Film.Type = "Slide" Deretter, dvs. hvis objektets Type-egenskap er "Slide", kjører programmet neste setning, ellers går det videre til den andre Case-setningen.

Vær oppmerksom på at operasjonstegnet, hvis tilstedeværelse virker logisk ved første øyekast, ikke er inkludert i kriteriene. Årsaken er at Select Case-utsagn ganske enkelt antar likhet som en sammenligningsoperatør.

Fra boken EMBEDDED SYSTEMS SOFTWARE. Generelle krav til utvikling og dokumentasjon forfatter Gosstandart av Russland

Fra boken Computer + Mobile Phone: Effective Interaction forfatter Goltsmann Viktor Iosifovich

Sending fra operatørens nettside I dag støtter sannsynligvis alle operatører sending av SMS fra nettsiden deres. Meldinger kan imidlertid bare sendes til abonnenter hos en gitt operatør, men dette er som regel nok. Så, for å øve. Nå skal vi se

Fra boken UNIX: Prosesskommunikasjon forfatter Stephens William Richard

Eksempel: Posix meldingskøer og valgfunksjonen Meldingskøhåndtaket (en variabel av typen mqd_t) er ikke et "normalt" håndtak og kan ikke brukes med valg- og pollingsfunksjonene (kapittel 6). Imidlertid kan de brukes sammen med kanalen og mq_notify-funksjonen. (Lignende

Fra boken VBA for Dummies av Steve Cummings

Fra boken Firebird DATABASE UTVIKLERGUIDE av Borri Helen

Testing av betingelser i utvalgte case-utsagn. Select Case-strukturen bruker ikke eksplisitt fullstendige betingede uttrykk som de som er diskutert ovenfor (se avsnittet "Et kurs i bruk av betingede uttrykk"). Du bør dele hver betingelse i to deler, representert som

Fra boken The Art of Shell Scripting Language Programming av Cooper Mendel

Fra boken The C Language - A Guide for Beginners av Prata Steven

Fra boken Linux and UNIX: shell programmering. Utviklerveiledning. av Tainsley David

Fra C++-boken for nybegynnere av Lippman Stanley

Eksempel 10-24. Bruke case #!/bin/bashecho; echo "Trykk en tast og deretter Retur-tasten." les Tastetrykk "$Keypress" i ) echo "små bokstaver";; ) echo "Store bokstaver";; ) ekko "Nummer";; *) echo "Punctuation tegn, mellomrom eller noe annet";;esac # Peker er tillatt

Fra boken UNIX: Network Application Development forfatter Stephens William Richard

Eksempel 10-25. Opprette en meny ved å bruke case #!/bin/bash# Grovt eksempel på en database clear # Clearing the screenecho " List" echo " ------"echo "Velg personen du er interessert i:"echoecho "[E] vans, Roland"echo " [J]ones, Mildred"echo "[S]mith, Julie"echo "[Z]ane, Morris"echoread personcase "$person" in# Vennligst merk: variabelen er i anførselstegn.

Fra forfatterens bok

Eksempel 10-26. Kasussetningen lar kommandosubstitusjon brukes i stedet for den analyserte variabelen #!/bin/bash# Kommandoerstatning i "case".case $(arch) in # "arch"-kommandoen returnerer en streng som beskriver maskinvarearkitekturen.i386) echo "80386 basert maskin ";;i486) echo "Maskin basert på

Fra forfatterens bok

Eksempel A-18. Genererer primtall ved hjelp av modulo-operatoren (modulo) #!/bin/bash# primes.sh: Genererer primtall uten å bruke arrays.# Forfatter: Stephane Chazelas.# Dette skriptet bruker ikke den klassiske "Sieve of Eratosthenes"-algoritmen ", #+ i stedet

Fra forfatterens bok

UTVIDE IF-OPERATOREN VED Å BRUKE else Den enkleste formen for if-operatoren er den vi nettopp brukte: if(expression)-setning Vanligvis forstås et uttrykk her som et betinget uttrykk som sammenligner verdiene til to størrelser (for eksempel x > y

Fra forfatterens bok

18.8.2. Avslutte utførelse av en sakserklæring Tenk på følgende eksempel. Skriptet kjører en uendelig sløyfe til brukeren skriver inn et tall større enn 5. For å bryte løkken og gå tilbake til tolkens kommandolinje, bruk break.$ pg-kommandoen

Fra forfatterens bok

Fra forfatterens bok

Et enkelt eksempel på bruk av valgfunksjonen Nå skal vi omarbeide mottakerkoden utenfor båndet og bruke valgfunksjonen i stedet for SIGURG-signalet. Oppføring 24.3 viser mottakerprogrammet. Oppføring 24.3. Mottaksprogrammet, der (feilaktig)