Lykkjur í VBA

Það eru aðstæður þar sem VBA forrit er nauðsynlegt til að framkvæma sama sett af aðgerðum nokkrum sinnum í röð (það er að endurtaka sama kóðann nokkrum sinnum). Þetta er hægt að gera með því að nota VBA lykkjur.

VBA lykkjur innihalda:

Næst munum við skoða hverja þessara lotu nánar.

Fyrir Loop Operator í Visual Basic

Uppbygging lykkja rekstraraðila The í Visual Basic er hægt að skipuleggja í einu af tveimur formum: sem lykkju Fyrir… Næst eða sem lykkja Fyrir hvert.

Hringdu „Fyrir … Næst“

Cycle Fyrir… Næst notar breytu sem tekur gildi í röð frá ákveðnu bili. Með hverri breytingu á gildi breytunnar eru aðgerðirnar sem eru lokaðar í meginhluta hringrásarinnar framkvæmdar. Þetta er auðvelt að skilja út frá einföldu dæmi:

Fyrir i = 1 Til 10 Samtals = Samtals + iArray(i) Næsta i

Í þessari einföldu lykkju Fyrir… Næst breyta er notuð i, sem tekur gildin 1, 2, 3, … 10 í röð, og fyrir hvert þessara gilda er VBA kóðinn inni í lykkjunni keyrður. Þannig leggur þessi lykkja saman þætti fylkisins. iArray í breytilegu Samtals.

Í dæminu hér að ofan er lykkjuaukningin ekki tilgreind, svo til að hækka breytuna i frá 1 til 10, sjálfgefið er aukning 1… Hins vegar, í sumum tilfellum, er nauðsynlegt að nota mismunandi aukagildi fyrir lykkjuna. Þetta er hægt að gera með því að nota lykilorðið Skrefeins og sýnt er í eftirfarandi einföldu dæmi.

Fyrir d = 0 Til 10 Skref 0.1 dTotal = dTotal + d Næsta d

Þar sem í ofangreindu dæmi er aukningarskrefið stillt jafnt og 0.1, þá breytan d Samtals fyrir hverja endurtekningu á lotunni tekur á sig gildin 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Til að ákvarða lykkjuþrepið í VBA geturðu notað neikvætt gildi, til dæmis, svona:

Fyrir i = 10 Til 1 Skref -1 iArray(i) = i Næsta i

Hér er hækkunin -1, svo breytan i með hverri endurtekningu á lotunni tekur á sig gildin 10, 9, 8, … 1.

Lykkja „Fyrir hvern“

Cycle Fyrir hvert svipað og hringrás Fyrir… Næst, en í stað þess að endurtaka gildisröðina fyrir teljarabreytuna, lykkjuna Fyrir hvert framkvæmir mengi aðgerða fyrir hvern hlut í tilgreindum hópi hluta. Í eftirfarandi dæmi, með því að nota lykkju Fyrir hvert telur upp öll blöð í núverandi Excel vinnubók:

Dimma wSheet Sem vinnublað fyrir hvert wSheet í vinnublöðum MsgBox "Найден лист: " & wSheet.Name Næsta wSheet

Yfirlýsing um truflun á lykkju „Hætta fyrir“

Flugrekandi Hætta fyrir notað til að rjúfa hringrásina. Um leið og þessi setning kemur fyrir í kóðanum lýkur forritið keyrslu lykkjunnar og heldur áfram að keyra setningarnar sem eru í kóðanum strax á eftir þessari lykkju. Þetta er til dæmis hægt að nota til að leita að ákveðnu gildi í fylki. Til að gera þetta, með því að nota lykkju, er hver þáttur fylkisins skannaður. Um leið og nauðsynlegur þáttur er fundinn er engin þörf á að fletta í gegnum restina - hringrásin er rofin.

Umsókn rekstraraðila Hætta fyrir sýnt í eftirfarandi dæmi. Hér endurtekur lykkjan yfir 100 fylkisfærslur og ber þær saman við gildi breytunnar dVal… Ef samsvörun finnst, þá er lykkjan slitin:

Fyrir i = 1 Til 100 Ef dValues(i) = dVal Þá IndexVal = i Hætta fyrir End If Next i

The Do While Loop í Visual Basic

Cycle Gerðu á meðan keyrir kóðablokk svo lengi sem tilgreint skilyrði er uppfyllt. Eftirfarandi er dæmi um málsmeðferð Sub, þar sem nota lykkjuna Gerðu á meðan Fibonacci tölur sem eru ekki yfir 1000 eru birtar í röð:

'Sub aðferð gefur út Fibonacci tölur sem fara ekki yfir 1000 Sub Fibonacci() Dim i As Integer 'teljari til að gefa til kynna staðsetningu frumefnisins í röðinni Dim iFib As Integer 'geymir núverandi gildi röðarinnar Dim iFib_Next As Integer 'geymir næsta gildi af röðinni Dim iStep As Integer 'geymir stærð næsta stigs' frumstilla breytur i og iFib_Next i = 1 iFib_Next = 0 'Do While lykkja mun keyra þar til gildi 'núverandi Fibonacci tölu er meira en 1000 Gerðu á meðan iFib_Next < 1000 Ef i = 1 Síðan 'sérstakt tilvik fyrir fyrsta þáttinn iStep = 1 iFib = 0 Annars 'vistaðu stærð næsta stigs áður en þú skrifar yfir 'núverandi gildi röðarinnar iStep = iFib iFib = iFib_Next End Ef 'prentaðu núverandi Fibonacci númer í dálki A á virka vinnublaðið 'í röðinni með vísitölunni i Cells(i , 1).Value = iFib 'reiknaðu næstu Fibonacci tölu og hækkuðu stakastöðuvísitöluna um 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Í uppgefnu dæmi, ástandið iFib_Next < 1000 athugað í upphafi lykkju. Því ef fyrsta gildi iFib_Næsta Ef það væru fleiri en 1000, þá yrði lykkjan aldrei framkvæmd.

Önnur leið til að útfæra lykkju Gerðu á meðan - settu skilyrðið ekki í upphafi, heldur í lok lykkjunnar. Í þessu tilviki verður lykkjan keyrð að minnsta kosti einu sinni, óháð því hvort skilyrðið er uppfyllt.

Skematískt, svona hringrás Gerðu á meðan með ástandið sem á að athuga í lokin mun líta svona út:

Gerðu ... Lykkju meðan iFib_Next < 1000

Myndin «Do Until» í Visual Basic

Cycle Gera þar til mjög svipað og hjólreiðar Gerðu á meðan: kóðablokkinn í meginmáli lykkjunnar er keyrður aftur og aftur þar til tilgreint skilyrði er uppfyllt (niðurstaða skilyrtu tjáningarinnar er True). Í næsta ferli Sub með því að nota hringrás Gera þar til sækja gildi úr öllum frumum í dálki A vinnublað þar til dálkurinn rekst á tómt hólf:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Gildi núverandi hólfs er geymt í fylkinu dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

Í dæminu hér að ofan, ástandið IsEmpty(Cells(iRow, 1)) staðsett í upphafi mannvirkisins Gera þar til, þannig að lykkjan verður keyrð að minnsta kosti einu sinni ef fyrsta hólfið sem tekið er er ekki tómt.

Hins vegar, eins og sýnt er í lykkjudæmunum Gerðu á meðan, í sumum tilfellum er nauðsynlegt að lykkjan sé keyrð að minnsta kosti einu sinni, óháð upphaflegri niðurstöðu skilyrtrar tjáningar. Í þessu tilviki ætti skilyrtu tjáningin að vera sett í lok lykkjunnar, svona:

Gerðu ... Loop Until Is Empty(Cells(iRow, 1))

Skildu eftir skilaboð