Smyčky ve VBA

Existují situace, kdy je vyžadováno, aby program VBA provedl stejnou sadu akcí několikrát za sebou (tj. několikrát opakoval stejný blok kódu). To lze provést pomocí smyček VBA.

Smyčky VBA zahrnují:

Dále se blíže podíváme na každý z těchto cyklů.

Pro Loop Operator ve Visual Basic

Struktura operátoru smyčky Projekt ve Visual Basic může být organizován v jedné ze dvou forem: jako smyčka Pro další nebo jako smyčka Pro každého.

Cyklus „Pro… další“

Cyklus Pro další používá proměnnou, která postupně přebírá hodnoty z daného rozsahu. Při každé změně hodnoty proměnné se provádějí akce uzavřené v těle cyklu. To lze snadno pochopit z jednoduchého příkladu:

Pro i = 1 až 10 Celkem = Celkem + iArray(i) Další i

V této jednoduché smyčce Pro další používá se proměnná i, který postupně nabývá hodnot 1, 2, 3, … 10 a pro každou z těchto hodnot se provede kód VBA uvnitř smyčky. Tato smyčka tedy sečte prvky pole. iArray v proměnné Celková cena.

Ve výše uvedeném příkladu není zadán přírůstek smyčky, aby se proměnná zvýšila i od 1 do 10, výchozí nastavení je přírůstek 1… V některých případech je však nutné pro smyčku použít různé hodnoty přírůstku. To lze provést pomocí klíčového slova Krokjak ukazuje následující jednoduchý příklad.

Pro d = 0 až 10 Krok 0.1 dCelkem = dCelkem + d Další d

Protože ve výše uvedeném příkladu je krok přírůstku nastaven na stejnou hodnotu 0.1, pak proměnná dTotal pro každé opakování cyklu nabývá hodnot 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Chcete-li určit krok smyčky ve VBA, můžete použít zápornou hodnotu, například takto:

Pro i = 10 až 1 Krok -1 iArray(i) = i Další i

Tady je přírůstek -1, takže proměnná i s každým opakováním cyklu nabývá hodnot 10, 9, 8, … 1.

Smyčka „Pro každého“

Cyklus Pro každého podobný cyklu Pro další, ale místo iterace přes sekvenci hodnot pro proměnnou čítače, smyčku Pro každého provádí sadu akcí pro každý objekt v zadané skupině objektů. V následujícím příkladu pomocí smyčky Pro každého vyjmenuje všechny listy v aktuálním sešitu aplikace Excel:

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

Příkaz přerušení smyčky „Exit For“

Operátor Ukončete pro slouží k přerušení cyklu. Jakmile se na tento příkaz v kódu narazí, program ukončí provádění cyklu a přejde k provádění příkazů, které jsou v kódu bezprostředně po tomto cyklu. Toho lze využít například pro hledání konkrétní hodnoty v poli. K tomu je pomocí smyčky skenován každý prvek pole. Jakmile je požadovaný prvek nalezen, není třeba zbytek prohlížet – cyklus se přeruší.

Aplikace operátora Ukončete pro demonstrováno na následujícím příkladu. Zde smyčka iteruje přes 100 položek pole a porovnává každý s hodnotou proměnné dVal… Pokud je nalezena shoda, smyčka se ukončí:

For i = 1 až 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Smyčka Do While ve Visual Basic

Cyklus Dělat, zatímco spustí blok kódu, pokud je splněna zadaná podmínka. Následuje příklad postupu V, ve kterém pomocí smyčky Dělat, zatímco Fibonacciho čísla nepřesahující 1000 se zobrazují postupně:

'Podprocedura vydává Fibonacciho čísla nepřesahující 1000 Sub Fibonacci() Dim i As Integer 'počítadlo k označení pozice prvku v sekvenci Dim iFib As Integer 'ukládá aktuální hodnotu sekvence Dim iFib_Next As Integer 'ukládá další hodnotu sekvence Dim iStep As Integer 'ukládá velikost dalšího přírůstku 'inicializovat proměnné i a iFib_Next i = 1 iFib_Next = 0 'Do While smyčka se bude provádět, dokud hodnota 'aktuálního Fibonacciho čísla nebude větší než 1000 Do While iFib_Next < 1000 If i = 1 Potom 'zvláštní případ pro první prvek iStep = 1 iFib = 0 Jinak 'uložit velikost dalšího přírůstku před přepsáním 'aktuální hodnota sekvence iStep = iFib iFib = iFib_Next End If 'vytisknout aktuální Fibonacciho číslo ve sloupci A aktivní list 'v řádku s indexem i Cells(i, 1).Value = iFib 'vypočítejte další Fibonacciho číslo a zvyšte index pozice prvku o 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

V uvedeném příkladu podmínka iFib_Next < 1000 zkontrolovat na začátku smyčky. Pokud tedy první hodnota iFib_Next Pokud by jich bylo více než 1000, pak by se smyčka nikdy neprovedla.

Další způsob, jak implementovat smyčku Dělat, zatímco - umístěte podmínku ne na začátek, ale na konec cyklu. V tomto případě bude smyčka provedena alespoň jednou, bez ohledu na to, zda je podmínka splněna.

Schematicky takový cyklus Dělat, zatímco s podmínkou ke kontrole na konci bude vypadat takto:

Proveďte ... Loop While iFib_Next < 1000

Klikněte na „Do dokud“ ve Visual Basic

Cyklus Do dokud velmi podobné cyklu Dělat, zatímco: blok kódu v těle cyklu se provádí znovu a znovu, dokud není splněna zadaná podmínka (výsledkem podmíněného výrazu je Pravdivý). V dalším postupu V pomocí cyklu Do dokud načíst hodnoty ze všech buněk ve sloupci A listu, dokud sloupec nenarazí na prázdnou buňku:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Hodnota aktuální buňky je uložena v poli dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1). Hodnota iRow = iRow + 1 smyčka

Ve výše uvedeném příkladu podmínka IsEmpty(Cells(iRow, 1)) umístěné na začátku konstrukce Do dokud, takže smyčka bude provedena alespoň jednou, pokud první odebraná buňka není prázdná.

Nicméně, jak je ukázáno v příkladech smyčky Dělat, zatímco, v některých situacích je nutné, aby byla smyčka provedena alespoň jednou, bez ohledu na počáteční výsledek podmíněného výrazu. V tomto případě by měl být podmíněný výraz umístěn na konec smyčky takto:

Proveďte ... Opakovat, dokud není prázdný(Cells(iRow, 1))

Napsat komentář