Efnisyfirlit
Þ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))