“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 IosifovichAfsendelse 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 RichardEksempel: 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 HelenAfprø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 StanleyEksempel 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 RichardEksempel 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 bogEksempel 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 bogEksempel 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 bogUDVIDELSE 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 bog18.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 bogEt 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)