Opakované provedení skupiny příkazů umožňují cykly. Ve VBScriptu jsou k dispozici následující příkazy cyklů:
Do…Loop: Probíhá, pokud je splněna podmínka. Jak bude dále uvedeno, existují verze tohoto cyklu s podmínkou na začátku i s podmínkou na konci cyklu.
While…Wend: Cyklus probíhá až do splnění podmínky. Tento cyklus je pozůstatkem z předchozích verzí Basicu a je nahraditelný předchozím cyklem.
For…Next: Cyklus s pevným počtem opakování.
For Each…Next: Opakuje skupinu příkazů pro každý prvek ve skupině objektů nebo v poli.
Opakuje blok příkazů, dokud je splněna podmínka.
Syntaxe
Do [{While | Until} podmínka]
[příkazy]
[Exit Do]
[příkazy]
Loop
Nebo můžete použít tuto syntaxi:
Do
[příkazy]
[Exit Do]
[příkazy]
Loop [{While | Until} podmínka]
Syntaxe příkazu Do…Loop má tyto části:
Část | Popis |
podmínka | Aritmetický nebo řetězcový výraz, který je vyhodnocen jako True nebo False. Pokud je podmínka vyhodnocena jako Null, je považována za False |
příkazy | Jeden nebo více příkazů, které jsou opakovány, dokud nebo než podmínka nabude hodnoty True |
Příkaz cyklu Do…Loop můžete použít pro spuštění bloku příkazů v předem nedefinovaném počtu opakování. Příkazy jsou opakovány, dokud je splněna podmínka.
Podmínku můžete zkontrolovat ještě před provedením příkazů cyklu (jak je ukázáno v následujícím příkladu ). Příkazy uvnitř cyklu budou provedeny desetkrát. Pokud nastavíte proměnnou mojeCislo před provedením cyklu na hodnotu 9, cyklus neproběhne ani jednou.
Dim citac, mojeCislo
citac = 0
mojeCislo = 20 ' toto přestavte na 9
Do While mojeCislo > 10
mojeCislo = mojeCislo - 1
citac = citac + 1
Loop
MsgBox "Cyklus provedl " & citac & _
" opakování."
V následujícím příkladu proběhne cyklus pouze jednou, protože podmínka na konci cyklu je již před vyvoláním cyklu False
Dim citac, mojeCislo
citac = 0
mojeCislo = 9
Do
mojeCislo = mojeCislo - 1
citac = citac + 1
Loop While mojeCislo > 10
MsgBox " Cyklus provedl " & citac & _
" opakování."
Klíčové slovo Until můžete použít pro otestování podmínky v cyklu Do…Loop hned dvěma způsoby. Podmínku můžete otestovat před vstupem do cyklu (jak je ukázáno v následujícím příkladu ). Cyklus probíhá tak dlouho, dokud je podmínka False, a bude tedy proveden desetkrát.
Dim citac, mojeCislo
citac = 0
mojeCislo = 20
Do Until mojeCislo = 10
mojeCislo = mojeCislo - 1
citac = citac + 1
Loop
MsgBox " Cyklus provedl " & citac & _
"opakování."
Nebo můžete podmínku otestovat po prvním průchodu cyklu (jak je ukázáno v následujícím příkladu ). Cyklus probíhá tak dlouho, dokud je podmínka False, a bude tedy proveden devětkrát.
Dim citac, mojeCislo
citac = 0
mojeCislo = 1
Do
mojeCislo = mojeCislo + 1
citac = citac + 1
Loop Until mojeCislo = 10
MsgBox " Cyklus provedl " & citac & _
" opakování."
Provádění cyklu Do…Loop můžete přerušit užitím příkazu Exit Do. Protože obvykle chcete přerušit cyklus pouze v určitých situacích (např. nekonečná smyčka), použije se obvykle příkaz Exit…Do v podmíněném příkazu If…Then…Else. V následujícím příkladu je proměnné mojeCislo přiřazena hodnota 9, v těle cyklu se hodnota této proměnné nemění, a tudíž by vznikl nekonečný cyklus, protože mojeCislo nikdy nenabude hodnoty 10. Příkaz If…Then…Else spolu s Exit Do chrání cyklus před zacyklením.
Dim citac, mojeCislo
citac = 0
mojeCislo = 9
Do Until mojeCislo = 10
mojeCislo = mojeCislo - 1
citac = citac + 1
If mojeCislo < 10 Then Exit Do
Loop
MsgBox " Cyklus provedl " & citac & _
" opakování."
Vykonává příkazy tak dlouho, dokud je splněna podmínka.
Syntaxe
While podmínka
[příkazy]
Wend
Syntaxe příkazu While…Wend má tyto části:
Část | Popis |
podmínka | Aritmetický nebo řetězcový výraz, který je vyhodnocen jako True nebo False. Pokud je podmínka vyhodnocena jako Null, je považována za False |
příkazy | Jeden nebo více příkazů, které jsou opakovány, dokud nebo než podmínka nabude hodnoty True |
Pokud je podmínka True, jsou vykonávány všechny příkazy, dokud se nenarazí na Wend. Běh skriptu se pak vrátí zpět na While a podmínka je znovu vyhodnocena. Pokud je podmínka stále True, proces se opakuje. Pokud není, průběh skriptu pokračuje vykonáváním příkazu následujícho příkaz Wend. Cykly While…Wend mohou být vnořovány do libovolné úrovně. Každý Wend odpovídá poslednímu použitému While.
VBScript poskytuje příkaz cyklu While…Wend pro ty, kteří jsou zvyklí jej používat z předchozích verzí Visual Basicu. Protože příkaz While…Wend postrádá flexibilitu, je doporučováno spíše užití cyklu Do…Loop.
Cyklus s pevným počtem opakování.
Syntaxe
For čítač = začátek To konec [Step krok]
[příkazy]
[Exit For]
[příkazy]
Next
Syntaxe příkazu For…Next má tyto části:
Část | Popis |
čítač | Řídící proměnná cyklu (číselná). Proměnná nemůže být prvkem pole nebo prvkem uživatelem definovaného typu. |
začátek | Počáteční hodnota řídící proměnné. |
konec | Konečná hodnota řídící proměnné. |
krok | Hodnota, o kterou je změněna hodnota řídící proměnné po každém průchodu cyklu. Pokud není uveden, je krok roven jedné. |
příkazy | Příkazy, které mají být opakovaně provedeny. |
Krok může být jak kladný, tak záporný. Hodnota kroku určuje provádění cyklu dle následující tabulky:
Hodnota | Cyklus proběhne pokud |
Kladná nebo 0 | Čítač <= Konec |
Záporná | Čítač >= Konec |
Hodnotu řídící proměnné cyklu lze měnit i v těle cyklu. Tyto změny však zhoršují čitelnost a možnost snadného odladění vašeho kódu.
Pro předčasné ukončení cyklu lze použít příkaz Exit For.Kdekoli v kódu cyklu může být umístěn libovolný počet příkazů Exit For. Příkaz Exit For je často používán spolu s vyhodnocením nějaké podmínky (například If…Then). Po použití tohoto příkazu pokračuje skript za příkazem následujícím bezprostředně za příkazem Next.
Příkazy cyklu For…Next můžete vnořovat umístěním jednoho cyklu For…Next do cyklu druhého. Nezapomeňte, že identifikátor řídící proměnné cyklu musí být pro každý cyklus jedinečný. Příklad:
For I = 1 To 10
For J = 1 To 10
For K = 1 To 10
. . .
Next
Next
Next
Příkaz cyklu For…Next můžete použít pro opakované spuštění bloku příkazů pro známý počet opakování. Musíte použít řídící proměnnou cyklu, jejíž hodnota je zvětšována nebo zmenšována s každým opakováním cyklu. V následujícím příkladu způsobí cyklus padesátinásobné spuštění procedury nazvané MojeProc. Proměnná x je řídící proměnnou cyklu, její počáteční hodnota je 1 a konečná hodnota 50. Příkaz Next zvětšuje x o hodnotu 1.
Dim x
For x = 1 To 50
MojeProc
Next
Užitím klíčového slova Step můžete zvětšovat nebo zmenšovat řídící proměnnou cyklu o vámi zvolenou hodnotu. V následujícím příkladu je řídící proměnná cyklu zvětšována o hodnotu 2 před každým dalším průběhem cyklu. Když cyklus skončí, je proměnná celkem součtem hodnot 2, 4, 6, 8, a 10.
Dim j, celkem
For j = 2 To 10 Step 2
celkem = celkem + j
Next
MsgBox "Součet je " & celkem
Pro zmenšování řídící proměnné cyklu musíte použít zápornou hodnotu kroku. Také musíte uvést takovou konečnou hodnotu řídící proměnné, která bude menší než počáteční hodnota. V následujícím příkladu je řídící proměnná cyklu mojeCislo zmenšována o hodnotu 2 po každém průchodu cyklem. Když cyklus skončí, hodnota proměnné celkem je rovna součtu hodnot 16, 14, 12, 10, 8, 6, 4 a 2.
Dim mojeCislo, celkem
For mojeCislo = 16 To 2 Step -2
celkem = celkem + mojeCislo
Next
MsgBox "Součet je " & celkem
Použitím příkazu Exit For můžete předčasně ukončit libovolný cyklus For…Next před tím, než řídící proměnná cyklu dosáhne konečné hodnoty. Protože obvykle chcete cyklus opustit jen v určitých situacích (např. když nastane nějaká chyba), můžete použít příkaz Exit For v podmíněném příkazu If…Then…Else.
Opakuje skupinu příkazů pro kažý prvek ve skupině objektů nebo v poli.
Syntaxe
For Each prvek In skupina
[příkazy]
[Exit For]
[příkazy]
Next [prvek]
Syntaxe příkazu For Each…Next má tyto části:
Část | Popis |
prvek | Proměnná používaná pro opakování napříč prvky skupiny objektů nebo pole. Pro objekty může být prvek jen proměnná typu Variant nebo Object. Pro pole může být prvek jen proměnnou typu Variant. |
skupina | Jméno souboru objektů nebo pole. |
příkazy | Jeden nebo více příkazů, které jsou vykonány pro každou položku ve skupině. |
Cyklus For Each…Next je podobný cyklu For…Next. Namísto provádění příkazů s předem daným počtem opakování, opakuje cyklus For Each…Next skupinu příkazů pro každý prvek ve skupině objektů nebo v poli. To může být užitečné, pokud nevíte, kolik prvků ve skupině vlastně máte.
V následujím příkladu je uvedena procedura Window_onload, která se spustí vždy s otevřením stránky. V ní uvedený příkaz For Each…Next zajistí postupné vypsání všech hypertextových odkazů z dané stránky v dialogovém okně (o objektech a událostech v souvislosti s VBScriptem je podrobnější zmínka ve studijním článku Obsluha událostí ve VBScriptu).