Hurok a VBA-ban

Vannak helyzetek, amikor egy VBA-programnak ugyanazt a műveletsort többször egymás után végre kell hajtania (vagyis többször meg kell ismételnie ugyanazt a kódblokkot). Ezt VBA hurkok segítségével lehet megtenni.

A VBA hurkok a következőket tartalmazzák:

Ezután közelebbről megvizsgáljuk ezeket a ciklusokat.

Visual Basic hurokoperátorhoz

A hurokoperátor szerkezete A a Visual Basicben kétféle formában szervezhető: ciklusként Mert… Következő vagy hurokként Az egyes.

Ciklus "A következőre"

Ciklus Mert… Következő olyan változót használ, amely szekvenciálisan veszi az értékeket egy adott tartományból. A változó értékének minden egyes változásával a ciklus törzsébe zárt műveletek végrehajtásra kerülnek. Ez könnyen érthető egy egyszerű példából:

Ha i = 1-től 10-ig Összesen = Összesen + iArray(i) Következő i

Ebben az egyszerű körben Mert… Következő változót használjuk i, amely egymás után felveszi az 1, 2, 3, … 10 értékeket, és ezeknek az értékeknek mindegyikére a cikluson belüli VBA kód végrehajtásra kerül. Így ez a ciklus összegzi a tömb elemeit. iArray változóban Végösszeg.

A fenti példában a ciklus növekménye nincs megadva, ezért a változó növeléséhez i 1-től 10-ig, az alapértelmezett érték egy növekmény 1… Egyes esetekben azonban különböző növekményértékeket kell használni a hurokhoz. Ezt a kulcsszó használatával lehet megtenni Lépésamint az a következő egyszerű példában látható.

d = 0-tól 10-ig 0.1 lépés dÖssz = dÖssz + d Következő d

Mivel a fenti példában a növekmény lépése egyenlő: 0.1, majd a változó dÖsszesen a ciklus minden ismétléséhez 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0 értékeket vesz fel.

A huroklépés meghatározásához a VBA-ban negatív értéket használhat, például így:

Ha i = 10-től 1-hez lépés -1 iArray(i) = i Következő i

Itt van a növekedés -1, tehát a változó i a ciklus minden ismétlésével 10, 9, 8, … 1 értékeket vesz fel.

Hurok „Mindegyikhez”

Ciklus Az egyes ciklushoz hasonló Mert… Következő, de ahelyett, hogy a számlálóváltozó értéksorát iterálná, a ciklus Az egyes műveleteket hajt végre a megadott objektumcsoport minden egyes objektumánál. A következő példában hurkot használva Az egyes felsorolja az aktuális Excel-munkafüzet összes lapját:

Dim wSheet munkalapként minden wSheet a Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

Cikkmegszakítási utasítás „Exit For”

Operátor Kilépés a ciklus megszakítására szolgál. Amint ez az utasítás megjelenik a kódban, a program befejezi a ciklus végrehajtását, és folytatja a kódban közvetlenül a ciklus után található utasítások végrehajtását. Ez használható például egy adott érték keresésére egy tömbben. Ehhez egy hurok segítségével a tömb minden elemét átvizsgálja. Amint megtalálta a kívánt elemet, nem kell átnézni a többit – a ciklus megszakad.

Kezelői alkalmazás Kilépés a következő példában mutatjuk be. Itt a ciklus több mint 100 tömbbejegyzést iterál, és mindegyiket összehasonlítja a változó értékével dVal… Ha talál egyezést, akkor a ciklus megszakad:

Ha i = 1-től 100-ig Ha dÉrtékek(i) = dVal, akkor IndexVal = i Kilépés a végére, ha következő i

A Do While ciklus a Visual Basicben

Ciklus Csinálni, miközben kódblokkot hajt végre, amíg a megadott feltétel teljesül. A következő példa egy eljárásra alatt, amelyben a hurok használatával Csinálni, miközben Az 1000-et meg nem haladó Fibonacci-számok sorban jelennek meg:

Az "aleljárás 1000-nél nem nagyobb Fibonacci számokat ad ki Sub Fibonacci() Dim i As Integer" számláló, amely jelzi az elem helyzetét a sorozatban Dim iFib As Integer "tárolja a sorozat aktuális értékét Dim iFib_Next As Integer "tárolja a következő értéket a Dim iStep As Integer sorozatból a következő növekmény méretét tárolja az i és az iFib_Next változók inicializálása i = 1 iFib_Next = 0 'Do While ciklus addig fut, amíg az 'aktuális Fibonacci-szám értéke nem nagyobb, mint 1000 = Do Ex1000 iFiib1_1 Míg < iFiib0_1 1 Ezután 'speciális eset az első elemhez iStep = 1 iFib = XNUMX Különben mentse el a következő növekmény méretét, mielőtt felülírná a szekvencia aktuális értékét iStep = iFib iFib = iFib_Next End If 'nyomtassa ki az aktuális Fibonacci-számot az A oszlopába az i indexű sorban lévő aktív munkalap Cells(i , XNUMX).Value = iFib 'számítsa ki a következő Fibonacci-számot, és növelje az elempozíció indexét XNUMX-gyel iFib_Next = iFib + iStep i = i + XNUMX hurokvégi al

Az adott példában a feltétel iFib_Next < 1000 a ciklus elején ellenőrizve. Ezért, ha az első érték iFib_Next Ha több mint 1000 lenne, akkor a ciklus soha nem kerül végrehajtásra.

A hurok megvalósításának másik módja Csinálni, miközben - a feltételt ne a ciklus elejére, hanem a végére helyezzük. Ebben az esetben a ciklus legalább egyszer végrehajtásra kerül, függetlenül attól, hogy a feltétel teljesül-e.

Sematikusan egy ilyen ciklus Csinálni, miközben a végén ellenőrizendő feltétellel így fog kinézni:

Csináljon... Hurok, miközben iFib_Next < 1000

A Visual Basic „Do Til” parancsa

Ciklus Tedd Amíg nagyon hasonlít a ciklushoz Csinálni, miközben: a ciklus törzsében lévő kódblokk újra és újra lefut, amíg a megadott feltétel teljesül (a feltételes kifejezés eredménye Igaz). A következő eljárásban alatt ciklus segítségével Tedd Amíg értékeket kér le egy oszlop összes cellájából A munkalapot, amíg az oszlop üres cellát nem talál:

iRow = 1 Do Til IsEmpty(Cells(iRow, 1)) 'Az aktuális cella értéke a dCellValues ​​tömbben tárolódik dCellValues(iRow) = Cells(iRow, 1).Érték iRow = iRow + 1 Loop

A fenti példában a feltétel Üres (Cellák (iRow, 1)) a szerkezet elején található Tedd Amíg, így a ciklus legalább egyszer végrehajtásra kerül, ha az első cella nem üres.

Azonban, ahogy a hurokpéldákban látható Csinálni, miközben, bizonyos helyzetekben szükséges, hogy a ciklust legalább egyszer végrehajtsák, függetlenül a feltételes kifejezés kezdeti eredményétől. Ebben az esetben a feltételes kifejezést a ciklus végére kell helyezni, így:

Csináljon... Hurok addig, amíg üres (Cellák (iRow, 1))

Hagy egy Válaszol