Sløjfer i VBA

Der er situationer, hvor et VBA-program skal udføre det samme sæt handlinger flere gange i træk (det vil sige gentage den samme kodeblok flere gange). Dette kan gøres ved hjælp af VBA-løkker.

VBA-løkker inkluderer:

Dernæst vil vi se nærmere på hver af disse cyklusser.

Til Loop Operator i Visual Basic

Strukturen af ​​sløjfeoperatøren i Visual Basic kan organiseres i en af ​​to former: som en loop For... Næste eller som en sløjfe For hver.

Cyklus "For ... Næste"

Cyklus For... Næste bruger en variabel, der sekventielt tager værdier fra et givet område. Med hver ændring af værdien af ​​variablen udføres de handlinger, der er indesluttet i cyklussens krop. Dette er let at forstå ud fra et simpelt eksempel:

For i = 1 til 10 Total = Total + iArray(i) Næste i

I denne enkle løkke For... Næste variabel bruges i, som sekventielt tager værdierne 1, 2, 3, … 10, og for hver af disse værdier udføres VBA-koden inde i løkken. Denne sløjfe summerer således elementerne i arrayet. iArray i variabel I alt.

I ovenstående eksempel er sløjfetilvæksten ikke specificeret, så for at øge variablen i fra 1 til 10, er standarden et trin 1… Men i nogle tilfælde er det nødvendigt at bruge forskellige stigningsværdier for løkken. Dette kan gøres ved hjælp af søgeordet Trinsom vist i følgende enkle eksempel.

For d = 0 Til 10 Trin 0.1 dTotal = dTotal + d Næste d

Da stigningstrinnet i ovenstående eksempel er sat lig med 0.1, derefter variablen dTotal for hver gentagelse af cyklussen antager værdierne 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

For at bestemme loop-trinnet i VBA kan du bruge en negativ værdi, for eksempel som denne:

For i = 10 til 1 trin -1 iArray(i) = i Næste i

Her er stigningen -1, så variablen i med hver gentagelse af cyklussen antager værdierne 10, 9, 8, … 1.

Loop "for hver"

Cyklus For hver ligner en cyklus For... Næste, men i stedet for at iterere over rækkefølgen af ​​værdier for tællervariablen, løkken For hver udfører et sæt handlinger for hvert objekt i den angivne gruppe af objekter. I det følgende eksempel, ved hjælp af en løkke For hver opregner alle ark i den aktuelle Excel-projektmappe:

Dim wSheet som regneark for hvert wSheet i regneark MsgBox "Найден лист: " & wSheet.Name Næste wSheet

Sløjfeafbrydelseserklæring "Afslut for"

Operatør Afslut til bruges til at afbryde cyklussen. Så snart denne sætning stødes på i koden, afslutter programmet udførelsen af ​​løkken og fortsætter til udførelsen af ​​sætningerne, der er i koden umiddelbart efter denne løkke. Dette kan f.eks. bruges til at søge efter en bestemt værdi i et array. For at gøre dette, ved hjælp af en loop, scannes hvert element i arrayet. Så snart det nødvendige element er fundet, er der ingen grund til at se resten igennem - cyklussen afbrydes.

Operatør applikation Afslut til vist i følgende eksempel. Her gentager løkken over 100 array-indgange og sammenligner hver med værdien af ​​variablen dVal… Hvis der findes et match, afsluttes løkken:

For i = 1 Til 100 Hvis dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Do While-løkken i Visual Basic

Cyklus Gøre imens udfører en kodeblok, så længe den angivne betingelse er opfyldt. Det følgende er et eksempel på en procedure Under, hvori ved hjælp af løkken Gøre imens Fibonacci-tal, der ikke overstiger 1000, vises sekventielt:

'Underproceduren udsender Fibonacci-tal, der ikke overstiger 1000 Sub Fibonacci() Dim i As Integer 'tæller for at angive positionen af ​​elementet i sekvensen Dim iFib As Integer 'gemmer den aktuelle værdi af sekvensen Dim iFib_Next As Integer 'gemmer den næste værdi af sekvensen Dim iStep As Integer 'gemmer størrelsen af ​​næste trin 'initialisere variable i og iFib_Next i = 1 iFib_Next = 0 'Do While-løkke vil udføres indtil værdien af ​​'aktuelt Fibonacci-tal er større end 1000 Gør mens iFib_Next < 1000 Hvis i = 1 Derefter 'specielt tilfælde for første element iStep = 1 iFib = 0 Ellers 'gem størrelsen af ​​det næste trin, før du overskriver' den aktuelle værdi af sekvensen iStep = iFib iFib = iFib_Next End If 'udskriv det aktuelle Fibonacci-nummer i kolonne A af det aktive regneark 'i rækken med indeks i Cells(i , 1).Værdi = iFib 'beregn det næste Fibonacci-tal og forøg elementets positionsindeks med 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

I det givne eksempel er betingelsen iFib_Next < 1000 kontrolleret i begyndelsen af ​​løkken. Derfor, hvis den første værdi iFib_Næste Hvis der var mere end 1000, ville løkken aldrig blive udført.

En anden måde at implementere en loop på Gøre imens - placer betingelsen ikke i begyndelsen, men i slutningen af ​​løkken. I dette tilfælde vil løkken blive udført mindst én gang, uanset om betingelsen er opfyldt.

Skematisk sådan en cyklus Gøre imens med tilstanden, der skal kontrolleres til sidst, vil se sådan ud:

Gør ... Loop mens iFib_Next < 1000

Цикл «Do Until» i Visual Basic

Cyklus Gør indtil meget lig cyklus Gøre imens: kodeblokken i løkkens krop udføres igen og igen, indtil den angivne betingelse er opfyldt (resultatet af det betingede udtryk er Sand). I den næste procedure Under ved hjælp af en cyklus Gør indtil hente værdier fra alle celler i en kolonne A regneark indtil kolonnen støder på en tom celle:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Værdien af ​​den aktuelle celle er gemt i arrayet dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

I eksemplet ovenfor er betingelsen IsEmpty(Cells(iRow, 1)) placeret i begyndelsen af ​​strukturen Gør indtil, så løkken vil blive udført mindst én gang, hvis den første celle, der tages, ikke er tom.

Men som vist i loop-eksemplerne Gøre imens, er det i nogle situationer nødvendigt, at løkken udføres mindst én gang, uanset det oprindelige resultat af det betingede udtryk. I dette tilfælde skal det betingede udtryk placeres i slutningen af ​​løkken, sådan her:

Gør ... Loop indtil er tomme(Cells(iRow, 1))

Giv en kommentar