Slučky vo VBA

Existujú situácie, keď sa od programu VBA vyžaduje, aby niekoľkokrát za sebou vykonal rovnakú množinu akcií (to znamená niekoľkokrát zopakoval rovnaký blok kódu). To možno vykonať pomocou slučiek VBA.

Slučky VBA zahŕňajú:

Ďalej sa bližšie pozrieme na každý z týchto cyklov.

Pre Loop Operator vo Visual Basic

Štruktúra operátora slučky v jazyku Visual Basic môže byť organizovaný v jednej z dvoch foriem: ako slučka Pre... Ďalej alebo ako slučka Pre každý.

Cyklus „Na… ďalej“

Cyklus Pre... Ďalej používa premennú, ktorá postupne preberá hodnoty z daného rozsahu. Pri každej zmene hodnoty premennej sa vykonajú akcie uzavreté v tele cyklu. To je ľahko pochopiteľné z jednoduchého príkladu:

Pre i = 1 až 10 Celkom = Celkom + iArray(i) Ďalšie i

V tejto jednoduchej slučke Pre... Ďalej používa sa premenná i, ktorý postupne nadobúda hodnoty 1, 2, 3, … 10 a pre každú z týchto hodnôt sa vykoná kód VBA vo vnútri cyklu. Táto slučka teda sčítava prvky poľa. iArray v premennej Spolu.

Vo vyššie uvedenom príklade nie je špecifikovaný prírastok cyklu, aby sa zvýšila premenná i od 1 do 10, predvolená hodnota je prírastok 1… V niektorých prípadoch je však potrebné použiť rôzne hodnoty prírastku pre slučku. Môžete to urobiť pomocou kľúčového slova Krokako je znázornené na nasledujúcom jednoduchom príklade.

Pre d = 0 až 10 Krok 0.1 dTotal = dTotal + d Next d

Pretože vo vyššie uvedenom príklade je krok prírastku nastavený na rovnakú hodnotu 0.1, potom premenná dTotal pre každé opakovanie cyklu nadobúda hodnoty 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Na určenie kroku slučky vo VBA môžete použiť zápornú hodnotu, napríklad takto:

Pre i = 10 až 1 krok -1 iArray(i) = i Ďalší i

Tu je prírastok -1, teda premenná i s každým opakovaním cyklu nadobúda hodnoty 10, 9, 8, … 1.

Slučka „Pre každého“

Cyklus Pre každý podobný cyklu Pre... Ďalej, ale namiesto iterácie cez postupnosť hodnôt pre premennú počítadla, slučku Pre každý vykoná súbor akcií pre každý objekt v zadanej skupine objektov. V nasledujúcom príklade pomocou slučky Pre každý vymenuje všetky hárky v aktuálnom excelovom zošite:

Dim wSheet as Worksheet for každý wSheet in Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

Príkaz prerušenia slučky „Exit For“

operátor Ukončiť pre slúži na prerušenie cyklu. Akonáhle sa v kóde stretne s týmto príkazom, program ukončí vykonávanie cyklu a pristúpi k vykonávaniu príkazov, ktoré sú v kóde bezprostredne po tomto cykle. To sa dá použiť napríklad na vyhľadanie konkrétnej hodnoty v poli. Na tento účel sa pomocou slučky naskenuje každý prvok poľa. Akonáhle sa nájde požadovaný prvok, nie je potrebné prezerať zvyšok - cyklus sa preruší.

Aplikácia operátora Ukončiť pre demonštrovaný v nasledujúcom príklade. Tu cyklus iteruje viac ako 100 položiek poľa a každý porovnáva s hodnotou premennej dVal… Ak sa nájde zhoda, cyklus sa ukončí:

Pre i = 1 až 100 Ak dValues(i) = dVal, Potom IndexVal = i Ukončiť Na koniec Ak Ďalej i

Slučka Do While v jazyku Visual Basic

Cyklus Do toho vykoná blok kódu, pokiaľ je splnená zadaná podmienka. Nasleduje príklad postupu nižšie, v ktorom pomocou slučky Do toho Fibonacciho čísla nepresahujúce 1000 sa zobrazujú postupne:

'Podprocedúra vydáva Fibonacciho čísla nepresahujúce 1000 Sub Fibonacci() Dim i As Integer 'počítadlo označujúce polohu prvku v sekvencii Dim iFib As Integer 'ukladá aktuálnu hodnotu sekvencie Dim iFib_Next As Integer 'ukladá nasledujúcu hodnotu sekvencie Dim iStep As Integer 'ukladá veľkosť ďalšieho prírastku 'inicializovať premenné i a iFib_Next i = 1 iFib_Next = 0 'Slučka Do While sa vykoná, kým hodnota 'aktuálneho Fibonacciho čísla nie je väčšia ako 1000 Do While iFib_Next < 1000 Ak i = 1 Potom 'špeciálny prípad pre prvý prvok iStep = 1 iFib = 0 Inak 'uložte veľkosť ďalšieho prírastku pred prepísaním 'aktuálnej hodnoty sekvencie iStep = iFib iFib = iFib_Next End If 'vytlačte aktuálne Fibonacciho číslo v stĺpci A aktívny pracovný hárok 'v riadku s indexom i Cells(i, 1).Value = iFib 'vypočítajte ďalšie Fibonacciho číslo a zvýšte index pozície prvku o 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

V uvedenom príklade podmienka iFib_Next < 1000 skontrolované na začiatku cyklu. Ak teda prvá hodnota iFib_Next Ak by ich bolo viac ako 1000, cyklus by sa nikdy nevykonal.

Ďalší spôsob, ako implementovať slučku Do toho - umiestnite podmienku nie na začiatok, ale na koniec cyklu. V tomto prípade sa cyklus vykoná aspoň raz, bez ohľadu na to, či je podmienka splnená.

Schematicky takýto cyklus Do toho s podmienkou, ktorú treba skontrolovať na konci, bude vyzerať takto:

Urobte ... Loop While iFib_Next < 1000

Kliknite na „Do kým“ v jazyku Visual Basic

Cyklus Do kým veľmi podobný cyklu Do toho: blok kódu v tele cyklu sa vykonáva znova a znova, kým nie je splnená zadaná podmienka (výsledok podmieneného výrazu je Pravdivý). V ďalšom postupe nižšie pomocou cyklu Do kým načítať hodnoty zo všetkých buniek v stĺpci A pracovný hárok, kým stĺpec nenarazí na prázdnu bunku:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Hodnota aktuálnej bunky je uložená v poli dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1). Hodnota iRow = iRow + 1 slučka

Vo vyššie uvedenom príklade podmienka IsEmpty(Cells(iRow, 1)) nachádza sa na začiatku konštrukcie Do kým, takže cyklus sa vykoná aspoň raz, ak prvá prevzatá bunka nie je prázdna.

Ako je však uvedené v príkladoch slučky Do toho, v niektorých situáciách je potrebné, aby sa cyklus vykonal aspoň raz, bez ohľadu na počiatočný výsledok podmieneného výrazu. V tomto prípade by sa mal podmienený výraz umiestniť na koniec cyklu, takto:

Robiť ... Slučka, kým nie je prázdna(Cells(iRow, 1))

Nechaj odpoveď