Kilpos VBA

Yra situacijų, kai VBA programa turi atlikti tą patį veiksmų rinkinį kelis kartus iš eilės (ty kelis kartus kartoti tą patį kodo bloką). Tai galima padaryti naudojant VBA kilpas.

VBA kilpos apima:

Toliau atidžiau pažvelgsime į kiekvieną iš šių ciklų.

„Visual Basic“ kilpos operatoriui

Ciklo operatoriaus struktūra Šios Visual Basic gali būti organizuojamas viena iš dviejų formų: kaip ciklas Už… Kitas arba kaip kilpa Kiekvienam.

Ciklas „Dėl… Kitas“

ciklas Už… Kitas naudoja kintamąjį, kuris nuosekliai paima reikšmes iš nurodyto diapazono. Su kiekvienu kintamojo reikšmės pasikeitimu atliekami ciklo korpuse esantys veiksmai. Tai lengva suprasti iš paprasto pavyzdžio:

Jei i = 1–10 Iš viso = Iš viso + iArray(i) Kitas i

Šioje paprastoje kilpoje Už… Kitas naudojamas kintamasis i, kuris paeiliui paima reikšmes 1, 2, 3, … 10, ir kiekvienai iš šių reikšmių vykdomas VBA kodas ciklo viduje. Taigi ši kilpa sumuoja masyvo elementus. iArray kintamuoju VISO.

Aukščiau pateiktame pavyzdyje ciklo prieaugis nenurodytas, todėl norint padidinti kintamąjį i nuo 1 iki 10, numatytoji vertė yra prieaugis 1… Tačiau kai kuriais atvejais reikia naudoti skirtingas kilpos prieaugio reikšmes. Tai galima padaryti naudojant raktinį žodį Žingsniskaip parodyta toliau pateiktame paprastame pavyzdyje.

d = 0–10 0.1 veiksmas dIš viso = dIš viso + d Kitas d

Kadangi aukščiau pateiktame pavyzdyje padidinimo žingsnis yra lygus 0.1, tada kintamasis dIš viso kiekvienam ciklo pakartojimui įgyja reikšmes 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Norėdami nustatyti VBA ciklo žingsnį, galite naudoti neigiamą reikšmę, pavyzdžiui, taip:

Jei i = 10 į 1 veiksmas -1 iArray(i) = i Kitas i

Čia yra prieaugis -1, taigi kintamasis i su kiekvienu ciklo kartojimu įgyja reikšmes 10, 9, 8, ... 1.

Ciklas „Kiekvienam“

ciklas Kiekvienam panašus į ciklą Už… Kitas, bet užuot kartoję skaitiklio kintamojo reikšmių seką, kilpą Kiekvienam atlieka veiksmų rinkinį kiekvienam objektui nurodytoje objektų grupėje. Šiame pavyzdyje naudojant kilpą Kiekvienam išvardija visus lapus dabartinėje „Excel“ darbaknygėje:

Pritemdyti wSheet kaip darbalapį kiekvienam wsheet darbalapiuose MsgBox "Найден лист: " & wSheet.Name Kitas wSheet

Ciklo pertraukimo sakinys „Exit For“

operatorius Išėjimas už naudojamas ciklui nutraukti. Kai tik šis teiginys aptinkamas kode, programa baigia ciklo vykdymą ir tęsia teiginių, esančių kode, vykdymą iškart po šios kilpos. Tai gali būti naudojama, pavyzdžiui, ieškant konkrečios reikšmės masyve. Norėdami tai padaryti, naudojant kilpą, nuskaitomas kiekvienas masyvo elementas. Kai tik randamas reikiamas elementas, nereikia žvalgytis per likusius – ciklas nutrūksta.

Operatoriaus programa Išėjimas už parodyta sekančiame pavyzdyje. Čia ciklas kartoja daugiau nei 100 masyvo įrašų ir kiekvieną lygina su kintamojo reikšme dVal… Jei randama atitiktis, ciklas nutraukiamas:

Jei i = 1 iki 100 Jei dValues(i) = dVal tada IndexVal = i Išeiti už pabaigą, jei seka i

„Do While Loop“ programoje „Visual Basic“.

ciklas Daryk kol vykdo kodo bloką tol, kol tenkinama nurodyta sąlyga. Toliau pateikiamas procedūros pavyzdys Pagal, kuriame naudojant kilpą Daryk kol Fibonačio skaičiai, neviršijantys 1000, rodomi nuosekliai:

„Subprocedūra išveda Fibonačio skaičius, neviršijančius 1000 Sub Fibonacci() Dim i As Integer“ skaitiklis, rodantis elemento padėtį sekoje Dim iFib As Integer“ išsaugo dabartinę sekos reikšmę Dim iFib_Next As Integer „išsaugo kitą reikšmę iš sekos Dim iStep As Integer 'saugomas kito prieaugio dydis' inicijuojami kintamieji i ir iFib_Next i = 1 iFib_Next = 0 'Do While ciklas bus vykdomas tol, kol dabartinio Fibonačio skaičiaus reikšmė bus didesnė nei 1000 Doext1000iFii_1 Doext1Fiii_0 1 Tada „ypatingas pirmojo elemento atvejis iStep = 1 iFib = 1 Kitu atveju išsaugokite kito prieaugio dydį prieš perrašydami dabartinę sekos reikšmę iStep = iFib iFib = iFib_Next End If“ išspausdinkite dabartinį Fibonačio skaičių A stulpelyje aktyvus darbalapis 'eilėje su indeksu i Cells(i , XNUMX).Value = iFib 'apskaičiuokite kitą Fibonačio skaičių ir padidinkite elemento padėties indeksą XNUMX iFib_Next = iFib + iStep i = i + XNUMX ciklo pabaigos sub.

Pateiktame pavyzdyje sąlyga iFib_Next < 1000 patikrinta ciklo pradžioje. Todėl, jei pirmoji reikšmė iFib_Next Jei jų būtų daugiau nei 1000, ciklas niekada nebūtų vykdomas.

Kitas būdas įgyvendinti kilpą Daryk kol - sąlygą pateikite ne ciklo pradžioje, o pabaigoje. Tokiu atveju ciklas bus vykdomas bent vieną kartą, neatsižvelgiant į tai, ar sąlyga yra įvykdyta.

Schematiškai toks ciklas Daryk kol su sąlyga, kurią reikia patikrinti pabaigoje, atrodys taip:

Atlikite... Ciklas, kol iFib_Next < 1000

„Visual Basic“ spustelėkite „Do iki“.

ciklas Daryti iki labai panašus į ciklą Daryk kol: kodo blokas ciklo korpuse vykdomas vėl ir vėl, kol įvykdoma nurodyta sąlyga (sąlyginės išraiškos rezultatas yra Tiesa). Kitoje procedūroje Pagal naudojant ciklą Daryti iki gauti reikšmes iš visų stulpelio langelių A darbalapį, kol stulpelis susidurs su tuščiu langeliu:

iRow = 1 Do Til IsEmpty(Cells(iRow, 1)) 'Dabartinio langelio reikšmė saugoma masyve dCellValues>dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

Aukščiau pateiktame pavyzdyje sąlyga IsEmpty (ląstelės (iRow, 1)) esančios konstrukcijos pradžioje Daryti iki, todėl ciklas bus vykdomas bent kartą, jei pirmasis paimtas langelis nėra tuščias.

Tačiau, kaip parodyta ciklo pavyzdžiuose Daryk kol, kai kuriose situacijose ciklas turi būti įvykdytas bent vieną kartą, neatsižvelgiant į pradinį sąlyginės išraiškos rezultatą. Tokiu atveju sąlyginė išraiška turėtų būti pateikta ciklo pabaigoje, kaip nurodyta:

Atlikite... Ciklą, kol tuščia (ląstelės (iRow, 1))

Palikti atsakymą