“VBA VBA kontrolstrukturer. Hvis

PROGRAMMERINGSSPROG VISUEL BASIC. PROGRAMMERING AF GRENE

Forgrening i Visual Basic er organiseret ved hjælp af:

  • betinget IF-erklæring;
  • indbygget IIF-funktion;
  • udvælgelsesoperatør CASE.

Brug betinget erklæring HVIS...SÅ. Denne operator kan bruges med forskellige syntakser: enkeltlinje (lineær) og multilinje (blok).

Den lineære operator har følgende syntaks:

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

Blokoperatoren har følgende syntaks:

Hvis<условие>Derefter
<блок операторов 1>
Afslut Hvis

Hvis den givne betingelse er True, udføres sætningsblokken, ellers udføres sætningsblok2. Hvis Else-klausulen ikke er specificeret, ifNår betingelsen er opfyldt, overføres kontrollen straks til næste operatør efter If.

If-sætningen kan indlejres, det vil sige placeret inde i sætningsblokke. For at teste mere end én betingelse og udføre en af ​​flere blokke af sætninger, skal du bruge en udvidet betinget sætning af formen:

Hvis<условие 1>Derefter
<блок операторов 1>
Andet<условие 2>Derefter
<блок операторов 2>
Andet<условие n>Derefter
<блок операторов n>
Afslut Hvis

For at vælge en af ​​værdierne afhængigt af tilfredsstillelsen eller fiaskoen af ​​en tilstand, skal du bruge IIF betinget funktion, som har følgende syntaks:

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

Denne funktion returnerer værdi1, hvis betingelsen er sand, og værdi2, hvis betingelsen er falsk.

Du kan bruge et boolesk udtryk som en betingelse, der returnerer Sand eller

Falsk eller et hvilket som helst aritmetisk udtryk (en nul-værdi svarer til False, og en ikke-nul-værdi svarer til Sand).

SELECT CASE-udsagn bruges til at teste en enkelt betingelse og udføre en af ​​flere blokke af sætninger.

Operatør rekordformat:

Vælg Sag<проверяемое выражение>
Sag<список выражений 1>
<операторы 1>Sag<список выражений 2>
<операторы 2>Sag<список выражений 3>
<операторы 3>
Tilfældet Andet
<операторы группы Else>
Afslut Vælg

Udtrykket, der testes, evalueres i begyndelsen af ​​Select Case-sætningen. Dette udtryk kan returnere en værdi af enhver type (boolesk, numerisk, streng).

En liste over udtryk er et eller flere udtryk adskilt af et standardtegn (semikolon).

Når operatoren udføres, kontrolleres det, om mindst et af elementerne på denne liste matcher det udtryk, der testes.

Disse udtrykslisteunderholdsbidrag kan have en af ​​følgende former:

  • <выражение>- kontrollerer sammenfaldet af et givet udtryk med et af udtrykkene - listeelementer;
  • <выражение 1>At<выражение 2>- kontrollerer om et givet udtryk falder inden for det specificerede område;
  • < Is <логический оператор> < выражение>- kontrollerer opfyldelsen af ​​den specificerede betingelse for et givet udtryk.

Select Case-operatoren for VBA-sproget er designet til at danne et udvalg af en operation afhængigt af værdien. Denne udvælgelsesoperator er en hybrid af den betingede operator vba. Alt er ret simpelt - i scriptet er der en variabel, hvis værdi vil ændre sig, og afhængigt af værdien skal du vælge hvilken kodeblok (udtryk) der skal udføres.

Ligesom i den betingede operator, afkrydses en værdi her, for eksempel: der er et tekstfelt, hvor du skal indtaste data, for eksempel alder. Dernæst skal du kontrollere den indtastede værdi, hvis værdien er mindre end 18, vis en tekst, hvis værdien er mellem 19 og 30, en anden tekst, ellers vis en tredje tekst. Som allerede nævnt kan en betinget operatør bruges til sådanne formål, dog er VBA Select Case-operatøren en mere kompakt mulighed.

VBA Select Case-sætningens syntaks er:

Vælg Sagsbetydning
Vælg betingelse 1
Operatør sæt

Vælg betingelse 2
Operatør sæt

Vælg betingelse 3
Operatør sæt

….

Vælg betingelse N
Betjeningssæt N

Tilfældet Andet
Andre operatører


Afslut Vælg

Først kontrolleres "værdi"-parameteren, som enten kan være en streng eller en numerisk type efter kontrol af parameteren, sker der en skiftende sammenligning (startende fra begyndelsen) med hver betingelse, der er angivet i operatorerne; Vælg Sag VBA. Hvis der opstår et match for "betingelse 1", så vil "sætningssæt 1" blive udført, hvorefter koden efter Afslut Vælg. Case Else-operatøren betyder formelt "Ellers", det vil sige, hvis ingen af ​​betingelserne er sande, vil det sæt af operatører, der er specificeret for Case Else, blive udført. Selve VBA-udtrykket er Tilfældet Andet er valgfri, ligesom "andre operatorer", om nødvendigt kan den udelades, den skrives altid til sidst.

Lad os se på denne eksempelkode:

Private Sub CommandButton1_Click() Dim a a = TextBox1.Text Select Case a Case Is< 100 Label1.Caption = "Den indtastede værdi er mindre end 100" Sag 101 til 150 Label1.Caption = "Den indtastede værdi er større end 100 og mindre end 151" Sag 151 til 200 Label1.Caption = "Den indtastede værdi er større end 151 og mindre end 201" Case Else Label1.Caption = "Anden værdi, vælg VBA-erklæring" End Select End Sub Private Sub UserForm_Activate() " indledende indstillinger "***************************** Label1.Caption = "" " tekststørrelse Label1.FontSize = 15 " tekstfarve Label1.ForeColor = &HFF0000 " midterjustering Label1.TextAlign = fmTextAlignCenter " aktiver linjeombrydning Label1.WordWrap = Sand " inskription på knappen CommandButton1.Caption = "Vis" "indledende indhold af tekstfeltet TextBox1.Text = "Indtast enhver værdi" Slut Sub

I dette eksempel har vi en procedure CommandButton1_Klik, som er ansvarlig for behandling af knapklik. Variablen a vil gemme værdien af ​​tekstfeltet TextBox1 (tekstegenskab). Dernæst kommer Select case VBA language selection statement, hvor værdien af ​​variabel a kontrolleres, hvorefter værdien sammenlignes med betingelserne:

  • Sagen er< 100 – hvis værdien af ​​variablen a er mindre end 100
  • Sag 101 til 150– hvis værdien er i området fra 101 til 150
  • Sag 151 til 200– testområde fra 151 til 200
  • Tilfældet Andet– faktisk alle andre betydninger.

Afhængigt af resultatet af kontrollen vil en informativ besked blive optaget i Caption-egenskaben for objektet.

Procedure UserForm_Activate indeholder kodelinjer til den indledende konfiguration af formularkomponenter - farve, størrelse, indledende tekst og så videre.

Du kan se resultatet af at køre makroen i figuren. For at skabe en forbindelse mellem en makro og en formular, skal du skrive i kodeblokken for modulet:

Sub OBModule() OBForm.Show End Sub

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

Det er værd at bemærke, at selvom betingelsen matcher, for eksempel: mindre end 100 og mere end 99, vil kun den første matchende betingelse i Select Case-sætningen blive udført, og alle andre vil blive ignoreret.

Betingelser er meget nyttige i programmering, fordi de giver os mulighed for at udføre handlinger afhængigt af fastsatte kriterier (det samme princip bruges som i HVIS Excel-funktioner).

Den vigtigste funktion, der sætter betingelsen, er HVIS og nu vil vi se hvordan det virker:

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

Lad os gøre det praktiske og gå tilbage til det eksempel, vi brugte i den variable lektion. Formålet med denne procedure var at åbne en dialogboks, der ville indeholde værdien fra strengen angivet i cellen F5:

Hvis du indtaster et bogstav i en celle F5, vil dette forårsage en fejl. Det vil vi gerne forhindre.

Undervariabler () "Erklærer variable Dim efternavn som streng, fornavn som streng, alder som heltal, rækketal som heltal "Tildeling af værdier til variable rækkenummer = Range("F5") + 1 efternavn = Celler(rækkenummer, 1) fornavn = Cells(row_number, 2) age = Cells(row_number, 3) "Dialog Box MsgBox last_name & " " & first_name & "," & age & " years" End Sub

Lad os tilføje en betingelse, der kontrollerer, om den indtastede værdi er i cellen F5 nummer, før koden udføres.

Vi vil bruge funktionen IsNumerisk for at kontrollere tilstanden:

Undervariabler () "Hvis værdien i parentes (celle F5) er numerisk (OG DERFOR HVIS BETINGELSEN ER SAND), så "udfør sætningerne, der følger THEN If IsNumeric (Range ("F5")) Så "Erklærer variabler Dim efternavn som String , first_name As String, age As Integer, row_number As Heltal "Tildeling af værdier til variabler row_number = Range ("F5") + 1 last_name = Celler (row_number, 1) first_name = Celler (row_number, 2) age = Cells ( række_nummer, 3) "Dialogboks MsgBox efternavn & " " & fornavn & "," & alder & " år" End If End Sub

Vi skal også nedskrive instruktioner, hvis betingelsen, vi sætter, ikke er opfyldt:

Undervariabler () If IsNumeric (Range ("F5")) Så "Hvis betingelsen er sand "Erklærer variable Dim efternavn Som streng, fornavn Som streng, alder Som heltal, rækketal som heltal "Tildeling af værdier til variabler rækkenummer = område ("F5") + 1 efternavn = Celler (rækkenummer, 1) fornavn = Celler (rækkenummer, 2) alder = Celler (rækkenummer, 3) "Dialogboks MsgBox efternavn & " " & fornavn & "," & alder & " år " Else "Hvis betingelsen ikke er udført "Dialogboks: MsgBox-advarsel "Den indtastede værdi " & Range ("F5") & " er ikke gyldig!" "Sletning af indholdet af celle F5-område ("F5"). Ryd indhold End If End Sub

Nu vil ikke-numeriske værdier ikke forårsage nogen problemer.

Når vi arbejder med vores array, som indeholder 16 rækker af data, vil vores næste trin være at kontrollere, om variablen row_number er "større end eller lig med 2" og "mindre end eller lig med 17".

Men lad os først tage et kig på sammenligningsoperatører:

og disse nyttige operatører:

Lad os nu tilføje en af ​​ovenstående betingelser OG mellem sammenligningsoperatører:

Undervariabler () If IsNumeric (Range ("F5")) derefter "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 række_nummer

Hvis vi vil gøre vores makro mere praktisk, kan vi erstatte 17 til en variabel, der ville indeholde antallet af linjer. Dette ville give os mulighed for at tilføje og fjerne rækker fra arrayet uden at skulle ændre denne grænse hver gang.

For at gøre dette skal vi oprette en variabel nb_rows og tilføje denne funktion.

I dette tilfælde bruger vi funktionen ArbejdsarkFunction.CountA, som er en analog af funktionen COUNTA i selve Excel.

Vi vil have denne funktion til at tælle antallet af ikke-tomme celler i den første kolonne og skrive den resulterende værdi til en variabel nb_rows:

Undervariabler () If IsNumeric (Range ("F5")) Derefter "IF NUMBER Dim last_name As 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")) "Rækketællingsfunktion Hvis rækkenummer > = 2 Og rækkenummer

ElseIf

ElseIf gør det muligt at tilføje yderligere betingelser efter IF-kommandoen:

If [CONDITION 1] Then ="=> HVIS betingelse 1 er sand, THEN "Instructions 1 ElseIf [CONDITION 2] Then ="=> HVIS betingelse 1 er falsk, men betingelse 2 er sand, THEN "Instructions 2 Else ="=> ELSE" Instruktioner 3 Afslut If

Hvis BETINGELSE 1 udført, Instruktion 1 vil blive udført og forlade erklæringen HVIS(som starter med HVIS og slutter med End If). Hvis BETINGELSE 2 tager værdien" ligge ", så vil det blive udført Instruktion 2, og hvis det til gengæld vender tilbage " ligge ", Derefter Instruktion 3(under Andet) vil blive udført.

Sub scores_comment () "Variables Svag note Som heltal, score_comment As String note = Range ("A1") "Kommentarer baseret på det modtagede partitur Hvis note = 6 Så score_comment = "Fantastisk bold!" ElseIf note = 5 Så score_comment = "God score" ElseIf note = 4 Så score_comment = "Tilfredsstillende score" ElseIf note = 3 Så score_comment = "Utilfredsstillende score" ElseIf note = 2 Så score_comment = "Dårlig score" ElseIf note = 1 Så score_comment = "Frygtelig score" Else score_comment = "Nul score" Slut Hvis "Kommentar i celle B1-område ("B1") = score_comment End Sub

Vælg

Der er et alternativ til at bruge Hvis med mange ElseIf instruktioner, nemlig kommandoen Vælg, som er mere velegnet til denne type situationer.

Lad os se på et eksempel på en makro med operatoren Vælg:

Subscores_comment () "Variables Dim note As Integer , score_comment As String note = Range ("A1") "Kommentarer baseret på det modtagne partitur Vælg Case note "

Det er værd at bemærke, at vi også kunne bruge andre sammenligningsoperatorer:

Sagen er >=6 "hvis værdien >=6

Eksempler med forskellige betydninger:

Tilfælde er = 6, 7 "hvis værdi = 6 eller 7 Tilfælde er 6, 7" hvis værdi ikke er 6 eller 7 Tilfælde 6 til 10 "hvis værdi = ethvert tal fra 6 til 10

Vælg Eksempel på sagserklæring

Det ville helt sikkert hjælpe at have et eksempel til at vise, hvordan en Select Case-struktur rent faktisk kan se ud.

Vælg Case objRol l OffFi l m.Type

Etui "Slide"

intSlide = intSlide + 1

Sag "farve negativ"

intColoredNegative = intColoredNegative + 1

Sag "BW negativ"

intBWnegative = intBWnegative + 1

MgaBox "Ukendt filmtype."

Dette kodestykke gør grundlæggende det samme som eksempelkoden ovenfor fra If-sætningssektionen. . .ElseIf (kun udløbskontrollen er udeladt). Siden da synes vores hypotetiske objekt, der repræsenterer en filmrulle, at være blevet en smule modificeret - information om filmens farve og farveløshed er nu også repræsenteret af Ture-egenskaben, og ikke en separat farveegenskab, som før.

Og hvis dette er tilfældet, så skal programmet kun arbejde med én værdi - værdien returneret af Type-egenskaben. - men denne værdi sammenlignes med flere af de gyldige. Så Select Case er lige hvad lægen bestilte til vores tilfælde.

Den første brug af Case-operatoren i dette eksempel svarer til at bruge If objRollOf Film.Type = "Slide" Så, dvs. hvis objektets Type-egenskab er "Slide", så udfører programmet den næste sætning, ellers går den videre til den anden Case-sætning.

Bemærk venligst, at operationstegnet, hvis tilstedeværelse virker logisk ved første øjekast, ikke er inkluderet i kriterierne. Årsagen er, at Select Case-udsagn blot antager lighed som en sammenligningsoperatør.

Fra bogen EMBEDDED SYSTEMS SOFTWARE. Generelle krav til udvikling og dokumentation forfatter Gosstandart af Rusland

Fra bogen Computer + Mobiltelefon: Effektiv interaktion forfatter Goltsmand Viktor Iosifovich

Afsendelse fra operatørens hjemmeside I dag understøtter sandsynligvis alle operatører allerede afsendelse af SMS fra deres hjemmeside. Beskeder kan dog kun sendes til abonnenter af en given operatør, men dette er som regel nok. Så videre til praksis. Nu vil vi se

Fra bogen UNIX: Proceskommunikation forfatter Stephens William Richard

Eksempel: Posix-meddelelseskøer og udvælgelsesfunktionen Meddelelseskøhåndtaget (en variabel af typen mqd_t) er ikke et "normalt" håndtag og kan ikke bruges med udvælgelses- og afstemningsfunktionerne (kapitel 6). De kan dog bruges sammen med kanalen og mq_notify-funktionen. (Lignende

Fra bogen VBA for Dummies af Steve Cummings

Fra bogen Firebird DATABASE UDVIKLERGUIDE af Borri Helen

Afprøvningsbetingelser i udsagn om udvalgte tilfælde. Strukturen for udvalgte tilfælde bruger ikke eksplicit fulde betingede udtryk som dem, der er diskuteret ovenfor (se afsnittet "Et kursus i brug af betingede udtryk"). Du bør opdele hver betingelse i to dele, repræsenteret som

Fra bogen The Art of Shell Scripting Language Programming af Cooper Mendel

Fra bogen The C Language - A Guide for Beginners af Prata Steven

Fra bogen Linux and UNIX: shell programmering. Udviklervejledning. af Tainsley David

Fra C++ bogen for begyndere af Lippman Stanley

Eksempel 10-24. Bruger case #!/bin/bashecho; echo "Tryk på en tast og derefter på Retur-tasten læs Tastetryk "$Keypress" i ) echo "små bogstaver";; ) echo "Store bogstaver";; ) ekko "Nummer";; *) echo "Punctuation tegn, mellemrum eller noget andet";;esac # Pointer er tilladt

Fra bogen UNIX: Network Application Development forfatter Stephens William Richard

Eksempel 10-25. Oprettelse af en menu ved hjælp af case #!/bin/bash# Groft databaseeksempel clear # Rydning af skærmekkoet " List" echo " ------"echo "Vælg den person, du er interesseret i:"echoecho "[E]vans, Roland"echo " [J]ones, Mildred"echo "[S]mith, Julie"echo "[Z]ane, Morris"ekkolæst personcase "$person" in# Bemærk venligst: variablen er i anførselstegn.

Fra forfatterens bog

Eksempel 10-26. Kasussætningen tillader, at kommandosubstitution bruges i stedet for den parsede variabel #!/bin/bash# Kommandosubstitution i "case".case $(arch) in # "arch"-kommandoen returnerer en streng, der beskriver hardware-arkitekturen.i386) echo "80386 baseret maskine ";;i486) echo "Maskin baseret på

Fra forfatterens bog

Eksempel A-18. Generering af primtal ved hjælp af modulo-operatoren (modulo) #!/bin/bash# primes.sh: Generering af primtal uden brug af arrays.# Forfatter: Stephane Chazelas.# Dette script bruger ikke den klassiske "Sieve of Eratosthenes"-algoritme ", #+ i stedet for

Fra forfatterens bog

UDVIDELSE AF IF-OPERATOREN VED BRUG AF else Den enkleste form af if-operatoren er den, vi lige har brugt: if(expression)-sætning Typisk forstås et udtryk her som et betinget udtryk, der sammenligner værdierne af to størrelser (f.eks. x > y

Fra forfatterens bog

18.8.2. Afslutning af udførelse af en sagserklæring Overvej følgende eksempel. Scriptet kører en uendelig løkke, indtil brugeren indtaster et tal større end 5. Brug kommandoen break.$ pg for at bryde løkken og vende tilbage til fortolkerens kommandolinje

Fra forfatterens bog

Fra forfatterens bog

Et simpelt eksempel på brug af valgfunktionen Nu vil vi omarbejde vores out-of-band modtagerkode og bruge valgfunktionen i stedet for SIGURG-signalet. Liste 24.3 viser det modtagende program. Liste 24.3. Det modtagende program, hvori (fejlagtigt)