För nästa vba excel gå till nästa. Loop uttalanden i VBA. Projekt "Inkomst på insättning"
Det finns situationer när ett VBA-program krävs för att utföra samma uppsättning åtgärder flera gånger i rad (det vill säga upprepa samma kodblock flera gånger). Detta kan göras med VBA-loopar.
För Loop Statement i Visual Basic
Loop statement struktur För i Visual Basic kan organiseras i en av två former: som en loop För nästa eller som en cykel För varje.
Cykla "För...Nästa"
Cykel För nästa använder en variabel som sekventiellt tar värden från ett givet intervall. Med varje förändring av variabelns värde utförs de åtgärder som finns i slingans kropp. Detta är lätt att förstå från ett enkelt exempel:
För i = 1 Till 10 Totalt = Totalt + iArray(i) Nästa i
I denna enkla slinga För nästa variabel används i, som sekventiellt tar värdena 1, 2, 3, ... 10, och för vart och ett av dessa värden exekveras VBA-koden inuti slingan. Således summerar denna loop elementen i arrayen iArray i en variabel Total.
I exemplet ovan specificeras inte loopinkrementsteget, så att inkrementera variabeln i Från 1 till 10 är standardinställningen inkrement 1 . Men i vissa fall är det nödvändigt att använda olika inkrementvärden för slingan. Detta kan göras med hjälp av nyckelordet Steg, som visas i följande enkla exempel.
För d = 0 Till 10 Steg 0.1 dTotal = dTotal + d Nästa d
Eftersom inkrementsteget i exemplet ovan är satt till 0.1 , sedan variabeln dTotalt för varje upprepning av cykeln tar värdena 0,0, 0,1, 0,2, 0,3, ... 9,9, 10,0.
För att bestämma loopsteget i VBA kan du använda ett negativt värde, till exempel så här:
För i = 10 Till 1 Steg -1 iArray(i) = i Nästa i
Här är steget steg -1 , alltså variabeln i med varje upprepning av cykeln antar den värdena 10, 9, 8, ... 1.
För varje slinga
Cykel För varje ser ut som en cykel För nästa, men istället för att gå igenom sekvensen av värden för räknarvariabeln För varje utför en uppsättning åtgärder för varje objekt i en specificerad grupp av objekt. I följande exempel använder du en loop För varje Listar alla ark i den aktuella Excel-arbetsboken:
Dim wSheet Som kalkylblad för varje wSheet i kalkylblad MsgBox "Sheet Found: " & wSheet.Name Nästa wSheet
Avsluta för slingavbrottsoperatör
Operatör Avsluta för används för att avbryta cykeln. Så snart denna sats påträffas i koden, avslutar programmet exekveringen av slingan och fortsätter att exekvera satserna som finns i koden omedelbart efter denna slinga. Detta kan till exempel användas för att söka efter ett specifikt värde i en array. För att göra detta, använd en slinga för att titta igenom varje element i arrayen. När det nödvändiga elementet har hittats finns det ingen anledning att titta igenom resten - cykeln avbryts.
Operatörsapplikation Avsluta för visas i följande exempel. Här går slingan genom 100 arrayposter och jämför var och en med värdet på variabeln dVal. Om en matchning hittas avbryts slingan:
För i = 1 Till 100 Om dValues(i) = dVal Then IndexVal = i Exit For End If Next i
Gör medan loop i Visual Basic
Cykel Göra medan exekverar ett kodblock så länge som ett givet villkor är uppfyllt. Följande är ett exempel på proceduren Sub, i vilken, med hjälp av en slinga Göra medan Fibonacci-tal som inte överstiger 1000 visas sekventiellt:
"Subproceduren skriver ut Fibonacci-tal som inte överstiger 1000 Sub Fibonacci() Dim i As Integer "en räknare för att indikera positionen för ett element i sekvensen Dim iFib As Integer "lagrar det aktuella värdet för sekvensen Dim iFib_Next As Integer "lagrar nästa värde i sekvensen Dim iStep As Integer "lagrar storleken på nästa inkrement "initiera variablerna i och iFib_Next i = 1 iFib_Next = 0 "Do While-slingan kommer att exekveras tills värdet på det "aktuella Fibonacci-talet överstiger 1000 Do Medan iFib_Next< 1000 If i = 1 Then "особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub
I det angivna exemplet är villkoret iFib_Nästa< 1000 kontrolleras i början av cykeln. Därför, om det första värdet iFib_Nästa Om det var fler än 1000, skulle loopen inte exekveras ens en gång.
Ett annat sätt att implementera en loop Göra medan– placera villkoret inte i början, utan i slutet av slingan. I det här fallet kommer loopen att exekveras minst en gång, oavsett om villkoret är sant.
Schematiskt en sådan cykel Göra medan med tillståndet som kontrolleras i slutet kommer det att se ut så här:
Gör... Loop medan iFib_Next< 1000
Gör tills loop i Visual Basic
Cykel Gör tills mycket lik en cykel Göra medan: Kodblocket i slingans kropp exekveras om och om igen tills det angivna villkoret är uppfyllt (resultatet av det villkorliga uttrycket är Sann). I följande procedur Sub med hjälp av en slinga Gör tills extraherar värden från alla celler i en kolumn A kalkylblad tills en tom cell påträffas i kolumnen:
IRow = 1 Do Until IsEmpty(Cells(iRow, 1)) "Värdet för den aktuella cellen lagras i dCellValues-arrayen dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop
I exemplet ovan är villkoret IsEmpty(Cells(iRow, 1)) ligger i början av strukturen Gör tills, därför kommer slingan att exekveras minst en gång om den första cellen som tas inte är tom.
Men som visades i loop-exemplen Göra medan, i vissa situationer vill du att loopen ska köras minst en gång, oavsett det initiala resultatet av det villkorliga uttrycket. I det här fallet bör det villkorliga uttrycket placeras i slutet av slingan, så här:
Gör ... Loop Till IsEmpty(Cells(iRow, 1))
Loop uttalanden
I VBA Det finns två huvudtyper av loopar: loopar med en räknare (parametrisk) och loopar med ett villkor (iterativ).
Räknarslingor används i de fall det är nödvändigt att utföra vissa åtgärder ett visst antal gånger.
Villkorsslingor används när vissa åtgärder i ett program måste upprepas tills ett visst villkor är uppfyllt.
Slingor med parameter För nästa
Cykelstruktur:
För Cycle_parameter = Initial_Value Till Final_Value
[Steg Steg]
Operatörer
[Avsluta för]
Nästa [Cycle_parameter]
var för nyckelord VBA (från), som indikerar början av cykeln;
loop_parameter variabel definierad som en loopräknare;
Initial_Value ett tal som anger startvärdet för loopparametern;
Till nyckelord VBA (före), delning
Initial_Value och Final_Knowledge;
Final_Value ett tal som anger värdet på loopparametern,
Vid vilken cykeln slutar;
Steg nyckelord VBA (steg) används för
Slingstegsspecifikationer, valfritt argument;
Steg ett nummer som anger cykelsteget, dvs. värdet med vilket
Ökar (eller minskar) parametervärdet
Cykla vid varje steg. Detta nummer kan vara
Negativ;
Avsluta för operatör av tidigt utträde från slingan (valfritt);
Nästa nyckelord VBA (nästa) betecknar
Slutet på cykeln.
Cykelarbete:
Steg 1 Först bestäms loopparametern och de initiala och slutliga värdena för denna variabel beräknas och lagras.
Steg 2 Slingparametern tilldelas ett initialt värde.
Steg 3 Startvärdet för loopparametern jämförs med slutvärdet.
Om loop-parametern är större än det slutliga värdet, lämnar programmet omedelbart loopen och hoppar till kodraden som följer loopen.
Steg 4 Slingans kropp exekveras.
Steg 5 Efter exekvering av slingans kropp tilldelas nästa värde till loopparametern. Gå till steg 3.
Notera.
1. Om ett nyckelord används Steg , då ändras loopparametern enligt numret som anges efter detta ord. Om ordet Steg är frånvarande, är stegvärdet lika med ett.
Exempel 1.
För I = 0 Till 10 Steg 2 (Värde I kommer att öka med 2)
2. För...Nästa slinga kan avslutas i förtid när något tillstånd uppnås. För att göra detta, på rätt plats i slingan måste du placera operatören Avsluta för.
Exempel 2.
Dim S Som heltal
Dim j Som heltal
S=2
För j = 1 till 10
S = S + j
Om S > 6 Då
Avsluta för (Avsluta slingan om värdet S > 6)
Avsluta om
Nästa j
MsgBox(S)
Villkorliga loopar (Iterativ)
Om någon åtgärd (flera handlingar) behöver utföras många gånger, men det inte är känt i förväg hur många gånger och detta beror på något tillstånd, så ska du använda en loop med en precondition eller en postcondition.
I VBA det finns två huvudslingor GÖR...LOOP med ett villkor som anges av ett nyckelord Medan , och med villkoret som anges av nyckelordet Fram tills . Båda kan vara med precondition eller postcondition.
Syntax:
var gör nyckelord (göra);
Medan nyckelord (ännu);
Fram tills nyckelord (tills);
Slinga ett nyckelord som indikerar slutet av cykeln;
<условие>ett logiskt uttryck vars sanning kontrolleras
I början av varje utförande av slingkroppen;
<тело_цикла>godtycklig sekvens av operatörer;
Gör...Medan byggandet lyder: gör medan villkoret är uppfyllt. I design Gör...Medan För
The Do...Tills konstruktion lyder: gör tills villkoret är uppfyllt. I design Gör...Tills För att öka steget bör du skriva en speciell operatör, eftersom i den, till skillnad från designen För , detta görs inte automatiskt.
Skick skrivet efter nyckelordet Fram tills , kontrolleras i slutet av varje iteration (efter att loopkroppen exekveras). Observera att det inte fungerar exakt på samma sätt som i slingan Medan . Om villkoret är sant ( Sann ), sedan slutar slingan. Om villkoret inte är uppfyllt (är falskt Falsk ), sedan exekveras slingans kropp igen.
Exempel 1.
Formulering av problemet. Beräkna summan av en ändlig serie med hjälp av en subrutinprocedur.
Uppgiftsexekveringsteknik:
1. Inledande data: i Z
Resultat: S R .
2.Skriv in följande anpassade procedur i standardprojektmodulen med en loop med en förutsättning Medan:
Sub summa()
Dim S Som heltal
Dim i As Integer
S = 0
i = 1
Gör medan jag<= 10
S = S + i^2
i = i + 1
Slinga
MsgBox(S)
Avsluta Sub
3. Skriv in följande anpassade procedur i standardprojektmodulen med en loop med en förutsättning Fram tills:
Sub summa()
Dim S Som heltal
Dim i As Integer
S = 0
i = 1
Gör tills i > 10
S = S + i^2
i = i + 1
Slinga
MsgBox(S)
Avsluta Sub
4 Skriv in följande anpassade procedur i standardprojektmodulen med en loop med ett postcondition Medan:
Sub summa()
Dim S Som heltal
Dim i As Integer
S = 0
i = 1
S = S + i^2
i = i + 1
Slinga medan jag<= 10
MsgBox(S)
Avsluta Sub
5 Skriv in följande anpassade procedur i standardprojektmodulen med en loop med ett postcondition Fram tills:
Sub summa()
Dim S Som heltal
Dim i As Integer
S = 0
i = 1
S = S + i^2
i = i + 1
Slinga tills i > 10
MsgBox(S)
Avsluta Sub
Det kan finnas en situation där du behöver köra ett kodblock flera gånger. I allmänhet exekveras satser sekventiellt: den första satsen i en funktion exekveras först, sedan den andra osv.
Programmeringsspråk tillhandahåller olika kontrollstrukturer som möjliggör mer komplexa exekveringsvägar.
Loopsatsen låter oss köra en sats eller grupp av satser flera gånger. Nedan är en allmän bild av en loop-sats i VBA.
VBA tillhandahåller följande looptyper för att hantera loopingkrav. Klicka på följande länkar för att kontrollera deras detaljer.
för slinga
En for loop är en upprepningskontrollstruktur som tillåter en utvecklare att effektivt skriva en loop som behöver exekveras ett visst antal gånger.
Syntax
Nedan är syntaxen för för loop i VBA.
För räknare = start Till slut .... .... Nästa
Flödesdiagram
Nedan är kontrollflödet i loop-läge -
- Det första steget är genomfört. Detta steg låter dig initiera valfri loopkontrollvariabler och öka stegräknarens variabel.
- För det andra utvärderas tillståndet. Om det är sant, exekveras slingans kropp. Om det är falskt exekveras inte loopens brödtext och kontrollflödet flyttas till nästa programsats omedelbart efter For-loopen.
- Efter att For-loopen har körts går kontrollflödet vidare till nästa programsats. Denna sats låter dig uppdatera alla loopkontrollvariabler. Den uppdateras baserat på stegräknarens värde.
- Tillståndet utvärderas nu igen. Om sant, exekveras loopen och processen upprepas (loopkropp, sedan steg inkrement, sedan villkor igen). När villkoret blir falskt avslutas For-loopen.
exempel
Lägg till en knapp och lägg till följande funktion.
Privat Sub Constant_demo_Click() Dim a Som heltal a = 10 För i = 0 Till ett steg 2 MsgBox "Värdet är i är: " & i Next End Sub
När ovanstående kod kompileras och exekveras, producerar den följande utdata.
Värdet är i är: 0
Värdet är i är: 2
Värdet är i är: 4
Värdet är i är: 6
Värdet är i är: 8
Värdet är i är: 10
Kör en sekvens av satser flera gånger och förkortar koden som styr loopvariabeln.
för ... slinga
Varje loop används för att exekvera en sats eller grupp av satser på varje element i en array eller samling.
För varje slinga liknar For Loop; loopen exekveras dock för varje element i arrayen eller gruppen. Därför kommer stegräknaren inte att existera i denna typ av loop. Det används huvudsakligen med arrayer eller används i objektsammanhang filsystem att arbeta rekursivt.
Syntax
Nedan är syntaxen för For Every loop i VBA.
För varje element i grupp....Nästa
exempel
Private Sub Constant_demo_Click() "frukter är en array frukter = Array("äpple", "orange", "körsbär") Dim fruktnamn Som Variant "itererar med För varje slinga. För varje objekt i frukter fruktnamn = fruktnamn & föremål & Chr(10) Nästa MsgBox fruktnamn End Sub
När ovanstående kod exekveras, skriver den ut alla namn på frukterna med ett element på varje rad.
äpple
orange
körsbär
Detta utförs om det finns minst ett element i gruppen och upprepas för varje element i gruppen.
medan..wend loop
In a While While ... Wend loop, om villkoret är True, exekveras alla satser tills nyckelordet Wend påträffas.
Om villkoret är falskt slutar loopen och kontrollen flyttas till nästa sats efter nyckelordet Wend.
Syntax
Nedan är syntaxen för While..Wend loop i VBA.
Medan tillstånd (er) ... Wend
Flödesdiagram
exempel
Privat Sub Constant_demo_Click() Dim räknare: Räknare = 10 medan räknare< 15 " Test value of Counter. Counter = Counter + 1 " Increment Counter. msgbox "The Current Value of the Counter is: " & Counter Wend " While loop exits if Counter Value becomes 15. End Sub
När ovanstående kod exekveras kommer den att mata ut följande i meddelandefältet.
Räknarens nuvarande värde är: 11
Räknarens nuvarande värde är: 12
Räknarens nuvarande värde är: 13
Räknarens nuvarande värde är: 14
Räknarens nuvarande värde är: 15
Detta kontrollerar tillståndet innan loopkroppen exekveras.
gör.. medan loop
En Do ... while loop används när vi vill upprepa en uppsättning påståenden medan ett villkor är sant. Tillståndet kan kontrolleras i början av slingan eller i slutet av slingan.
Syntax
Nedan är syntaxen för Do...While loop i VBA.
Gör medan skick......Loop
Flödesdiagram
exempel
Följande exempel använder en Do ... while-loop för att kontrollera tillståndet i början av loopen. Satserna inuti loopen exekveras endast om villkoret blir True.
Privat Sub Constant_demo_Click() Gör medan i< 5 i = i + 1 msgbox "The value of i is: " & i Loop End Sub
Värdet på i är: 1
Värdet på i är: 2
Värdet på i är: 3
Värdet på i är: 4
Värdet på i är: 5
Alternativ syntax
Det finns också en alternativ syntax för Do ... while loop som kontrollerar tillståndet i slutet av loopen. Huvudskillnaden mellan dessa två syntaxer förklaras i följande exempel.
Gör ... ... Loop While-tillstånd
exempel
Följande exempel använder en Do ... while-loop för att kontrollera status i slutet av loopen. Påståenden inom en loop exekveras minst en gång, även om villkoret är falskt.
Private Sub Constant_demo_Click() i = 10 Gör i = i + 1 MsgBox "Värdet på i är: " & i Loop While i< 3 "Condition is false.Hence loop is executed once. End Sub
När ovanstående kod exekveras, skriver den ut följande utdata i en meddelanderuta.
Värdet på i är: 11
Do..While-satserna kommer att köras så länge villkoret är sant. (dvs.) Slingan måste upprepas tills villkoret är falskt.
gör..intil loop
En do ... intil loop kommer inte att användas när vi vill upprepa en uppsättning satser medan villkoret är falskt. Tillståndet kan kontrolleras i början av slingan eller i slutet av slingan.
Syntax
Nedan är syntaxen för Do..Until loop i VBA.
Gör tills skick ... ... Slinga
Flödesdiagram
exempel
Följande exempel använder Do... Before Loop för att testa ett villkor i början av loopen. Satserna inuti loopen exekveras endast om villkoret är falskt. Den lämnar slingan när villkoret blir sant.
Private Sub Constant_demo_Click() i = 10 Gör tills i>15 "Villståndet är falskt. Därför kommer loopen att exekveras i = i + 1 msgbox ("Värdet på i är: " & i) Loop End Sub
När ovanstående kod exekveras, skriver den ut följande utdata i en meddelanderuta.
Värdet på i är: 11
Värdet på i är: 12
Värdet på i är: 13
Värdet på i är: 14
Värdet på i är: 15
Värdet på i är: 16
Alternativ syntax
Det finns också en alternativ syntax, Do... Before Loop, som testar villkoret i slutet av loopen. Huvudskillnaden mellan dessa två syntaxer förklaras av följande exempel.
Gör ... ... Loop Tills skick
Flödesdiagram
exempel
Följande exempel använder Do...Before a loop för att testa ett villkor i slutet av loopen. Påståenden inom en loop exekveras minst en gång, även om villkoret är True.
Private Sub Constant_demo_Click() i = 10 Do i = i + 1 msgbox "Värdet på i är: " & i Loop Till i more15 "Villkor är sant. Därför körs loopen en gång. End Sub
När ovanstående kod exekveras, skriver den ut följande utdata i en meddelanderuta.
Värdet på i är: 11
Do..Until-satserna kommer att köras så länge villkoret är falskt. (dvs.) Slingan måste upprepas tills villkoret är sant.
Cycle Control Records
Slingkontrollsatser ändrar exekveringen från sin normala sekvens. När exekveringen lämnar räckvidden exekveras inte alla andra loop-satser.
Kontrollutlåtande och beskrivning
Operatörens utgång
Exit for används när vi vill avsluta For Loop baserat på vissa kriterier. När Exit For exekveras flyttas kontrollen till nästa programsats omedelbart efter For Loop.
Syntax
Nedan är syntaxen Exit For Statement i VBA.
Flödesdiagram
exempel
Följande exempel använder Exit For. Om räknaren når 4, slutar For Loop och kontrollen flyttas till nästa programsats omedelbart efter For Loop.
Privat Sub Constant_demo_Click() Dim a Som heltal a = 10 För i = 0 Till ett steg 2 "i är räknarvariabeln och den ökas med 2 MsgBox ("Värdet är i är: " & i) Om i = 4 Då i = i * 10 "Detta exekveras endast om i=4 MsgBox ("Värdet är i är: " & i) Exit For "Exited when i=4 End If Next End Sub
När ovanstående kod körs skrivs följande ut i meddelanderutan.
Värdet är i är: 0
Värdet är i är: 2
Värdet är i är: 4
Värdet är i är: 40
Avslutar en For loop-sats och överför exekvering till satsen omedelbart efter loopen
Avsluta Do
Exit Do Statement används när vi vill avsluta Do Loops baserat på vissa kriterier. Den kan användas i både Do Do...While och Do...Before loopar.
När Exit Do exekveras, övergår kontrollen till nästa programsats omedelbart efter Do-loopen.
Syntax
Nedan är syntaxen för Exit Do-satsen i VBA.
exempel
Följande exempel använder Exit Do. Om räknaren når 10, avslutas Do-utgångsraden och kontrollen övergår till nästa programsats omedelbart efter For Loop.
Privat Sub Constant_demo_Click() i = 0 Gör medan i<= 100 If i >10 Avsluta sedan Gör " Loop Exits if i>10 End If MsgBox ("Värdet på i är: " & i) i = i + 2 Loop End Sub
När ovanstående kod exekveras, skriver den ut följande utdata i en meddelanderuta.
Värdet på i är: 0
Värdet på i är: 2
Värdet på i är: 4
Värdet på i är: 6
Värdet på i är: 8
Värdet på i är: 10
Slutför en Do While-sats och överför exekvering till satsen omedelbart efter loopen
Laborationer på grunderna i programmering
2.1. Tabellering av funktioner representerade analytiskt
och konvergerar i närheten
Målet med arbetet
· Konsolidering av teoretiska kunskaper om grunderna för att organisera förgrenings- och cykliska strukturer.
· Förvärv av praktiska programmeringsfärdigheter med hjälp av förgrenings- och cykliska strukturer i Visual Basic-systemet.
Det finns tre typer av loop-satser i VB:
räknecykel: För...Till...Nästa
loopar med förutsättningar: Do While...Loop, Do Until...Loop, While...WEnd
· slingor med eftervillkor: Do...Loop While, Do...Loop Tills.
Räkneslinga – låter dig gå igenom en uppsättning satser ett visst antal gånger. Dess syntax är följande:
För disken = Start Till slutet
[operatörer]
[operatörer]
Nästa [ disken]
Parameter diskenär en numerisk variabel (heltal, reell typ eller Datum, Variant, Valutatyp) som automatiskt inkrementeras efter varje upprepning. Ursprungligt värde disken lika med parameter Start, och den sista parametern - slutet. Om det inte anges anses steget vara lika med 1; stegvärdet kan ändras. Det kan vara ett positivt eller negativt tal.
Det finns fyra syntaktiska konstruktioner av Do....loopen:
Satserna mellan nyckelorden Do... Loop exekveras ett specificerat antal gånger beroende på villkoret. Till exempel, i följande programfragment, när C = 100, kommer villkoret att vara uppfyllt och slingan kommer att gå in. Inuti slingan anropas proceduren och värdet på C minskas med 1. Därefter kontrolleras villkoret (C > 0) igen och slingoperatorerna exekveras igen (de kommer att exekveras 100 gånger totalt), tills C = 0. När villkoret C > 0 blir falskt och slingan stannar.
Gör medan C > 0
Samma programfragment exekveras med en loop med en förutsättning i syntax 2:
I det här fallet löper slingan så länge villkoret är falskt, till skillnad från det tidigare fallet, det vill säga den fortsätter innan uppfyllelse av villkor C = 0.
Loop-satserna 3 och 4 är mycket lika i syntax som de två första förutom att villkoret Inte beräknas tills loopen exekveras minst en gång.
Dessa loopsyntaxer kan använda Exit For och Exit Do ovillkorliga loop exit-satser för att överföra kontrollen till operatören bakom loopen. Till exempel, i följande programfragment, om det initiala värdet för C är >50, kommer slingan omedelbart att stoppa.
Gör tills C<= 0
MsgBox "Start" värdet är större än acceptabelt", "Inmatningsfel"
While...Wend-loopen användes i tidiga versioner av Visual Basic. Dess syntax är följande:
Medan<условие>
<Операторы>
Till skillnad från Do..Loop-loopen har While ..Wend-loopen inte ett andra alternativ där villkoret kontrolleras i slutet av loopen. Dessutom finns det ingen loop exit-sats för det, som Exit Do.
VBA. Organisering av cykler.
Loop-satser används för att upprepa en åtgärd eller grupp av åtgärder ett visst antal gånger. Antalet repetitioner (loopiterationer) kan förutbestäms eller beräknas.
VBA stöder två typer av looping-konstruktioner:
- Slingor med ett fast antal repetitioner ( motverkade slingor).
- Slingor med ett obegränsat antal repetitioner ( villkorliga loopar).
För alla typer av cykler används konceptetöglekropp , som definierar ett block av satser inneslutna mellan start- och slutsatserna för loopen. Varje upprepning av utförandet av uttalandena i slingans kropp anropas iteration
Fasta cykler
VBA tillhandahåller två kontrollstrukturer för att organisera en fast loop: For ... Next (loop med en räknare) och For Every ... Next (loop med en uppräkning).
Operatör för...Nästa Detta är en typisk räknarslinga som exekverar ett specificerat antal iterationer. Syntaxen för For...Next-satsen är:
För<счетчик> = <начЗначение>Den där<конЗначение>
<блок операторов>
Nästa [<счетчик>]
Ett exempel på att använda operatorn For...Next.
Lista 1. För … Nästa operatör
' UPPGIFT: Skapa ett program som tar emot två nummer från användaren.
‘ Lägger till alla siffror i intervallet som anges av dessa två siffror, och sedan
' visar den resulterande mängden.
Sub sample7()
Dim i As Integer 'cykelräknare
Dim sStart 'initialt räknarvärde
Dim sEnd 'sluträknarevärde
Dim sSum As Long ’resulterande summa
sStart = InputBox(“Ange den första siffran:”)
sEnd = InputBox(”Ange det andra numret:”)
sSum = 0
För i = CInt(sStart) Till CInt(sEnd)
sSum = sSum + i
Nästa i
MsgBox "Summan av siffrorna från " & sStart & " till " & sEnd & " är: " & sSum
Avsluta Sub
Loop statement för varje...Nästatillhör kategorin objekttypsoperatorer, dvs. gäller i första hand samlingar objekt, såväl som arrayer . Slingans kropp exekveras ett fast antal gånger, motsvarande antalet element i arrayen eller samlingen. För varje...Nästa uttalandeformat:
För varje<элемент>I<группа> <блок операторов>Nästa [<элемент>]
Villkorsslingor (odefinierade loopar)
Villkorsslingor används när upprepade åtgärder endast behöver utföras under vissa förhållanden. Antalet iterationer är inte definierat och kan i allmänhet vara lika med noll (i synnerhet för loopar med en förutsättning). VBA erbjuder utvecklare flera kontrollstrukturer för att organisera villkorliga loopar:
- Fyra typer av Do..Loops, som skiljer sig i vilken typ av tillstånd som kontrolleras och den tid det tar att slutföra denna kontroll.
- Kontinuerlig slinga Medan... Vänd.
Do While...-slingan är typisk slinga med förutsättning. Villkoret kontrolleras innan loopens kropp exekveras. Cykeln fortsätter sitt arbete tills den<условие>exekveras (dvs. har värdet True). Eftersom kontrollen utförs i början kan slingans body aldrig utföras. Gör medan... Slingformat:
Göra medan<условие>
<блок операторов>
Slinga
Lista 2. Gör medan... Loop
' UPPGIFT: Skapa ett program som kräver användarinmatning
"en godtycklig talföljd. Ingången måste avslutas
’ först efter att summan av de angivna udda talen överstiger 100.
Sub sample8()
Dim OddSum Som heltal ’summan av udda tal
Dim OddStr As String 'en sträng med udda nummer
Dim Num 'för att acceptera inmatade nummer
OddStr = "" 'utgångsstränginitiering
OddSum = 0 ‘initiera OddSum
Gör medan OddSum< 100 ‘начало цикла
Num = InputBox("Ange ett nummer: ")
If (Num Mod 2)<>0 Sedan 'paritetskontroll
OddSum = OddSum + Num ’ackumulering av summan av udda tal
OddStr = OddStr & Num & ” ”
Avsluta om
Slinga
"skriv ut en sträng med udda nummer
MsgBox prompt:=”Uda nummer: ” & OddStr
Avsluta Sub
Gör ... Loop While Statementdesignad för organisationslinga med postcondition. Villkoret kontrolleras efter att slingans kropp har exekverats minst en gång. Cykeln fortsätter sitt arbete fram till<условие>förblir sant. Gör... Slinga medan Format:
Do<блок операторов>Loop While<условие>
Notering 3. Slinga med postcondition
' UPPGIFT: Skapa ett program för spelet "Gissa numret." Programmet måste vara slumpmässigt
' sätt att generera ett tal i intervallet från 1 till 1000, måste användaren
’ gissa detta nummer. Programmet visar ett tips för varje inmatat nummer
' "mer eller mindre".
Sub sample8()
Randomize Timer 'initiera slumptalsgeneratorn
Dim msg As String ' meddelandesträng
Dim SecretNumber As Long, User Number Som Variant
Börja: SecretNumber = Round(Rnd * 1000) ' datorgenererat nummer
UserNumber = Tomt nummer angett av användaren
Spela
Välj Case True
Case IsEmpty(UserNumber): msg = "Ange ett nummer"
Case UserNumber > SecretNumber: msg = "För många!"
Case User Number< SecretNumber: msg = “Слишком мало!”
Avsluta Välj
UserNumber = InputBox(prompt:=msg, Titel:=”Gissa numret”)
Slinga medan användarnummer<>Hemligt nummer
' undersökning
If MsgBox(“Spela igen?”, vbYesNo + vbQuestion, “Du gissade rätt!”) = vbYes Then
Gå Till Börja
Avsluta om
Avsluta Sub
Slingor Gör tills... Slingor och gör... Slingor tills är inversioner av de tidigare diskuterade villkorsslingorna. I allmänhet fungerar de på liknande sätt, förutom att slingans kropp exekveras om villkoret är falskt (dvs.<условие>=Falskt). Gör tills... Slingformat:
Gör tills<условие> <блок операторов>Slinga
Gör... Loop Till loop format:
<блок операторов>
Slinga tills<условие>
Praktisk uppgift:Skriv om programmen i listorna 10 och 11 med inverterade loop-satser.
Loop While...Wend gäller även villkorsslingor. Denna operatöröverensstämmer helt med Do While... Loop-strukturen. While...Wend loop format:
Medan<условие>
<блок операторов>
Wend
En utmärkande egenskap hos denna operatör är omöjligheten påtvingad uppsägning(avbryter) loopens kropp (Exit Do-operatorn fungerar inte i While ... Wend-loopen).
Att avbryta en cykel
För att avsluta en iteration tidigt och lämna loopen används Exit-satsen. Denna operatör är tillämplig i alla cykliska strukturer utom While... Wend. Den allmänna syntaxen för att använda Exit för att bryta en loop är:
<начало_цикла>
[<блок операторов1>]
Avsluta (för | Gör)
[<блок операторов2>]
<конец_цикла>
När Exit-satsen exekveras avbryts loopen och kontrollen överförs till satsen efter satsen<конец_цикла>. Det kan finnas flera Exit-satser i brödtexten i en loop.
Lista 4. Tvinga utgång från slingan
Sub sample9()
För i = 1 Till 10000000
Om i = 10, avsluta för ' lämna slingan när räknaren når 10
Nästa