Buclele repetă instrucțiunile de mai multe ori și pot economisi mult timp.
Următoarele tipuri de bucle există în Excel VBA:
Următorul cod inserează o secvență de numere în fiecare celulă a coloanei A (de la 1 la 12):
Sub while_loop() Cells(1, 1) = 1 Cells(2, 1) = 2 Cells(3, 1) = 3 Cells(4, 1) = 4 Cells(5, 1) = 5 Cells(6, 1) = 6 Cells(7, 1) = 7 Cells(8, 1) = 8 Cells(9, 1) = 9 Cells(10, 1) = 10 Cells(11, 1) = 11 Cells(12, 1) = 12 End Sub
Acest cod este foarte repetitiv...
Imaginați-vă dacă ar trebui să inserăm numere consecutive în sute de celule în loc de doar 12... Acum înțelegeți de ce buclele sunt foarte utile.
Să dăm un exemplu de ciclu gol While:
Sub while_loop() While [condiție] 'Instrucțiuni Wend End Sub
Atâta timp cât condiția este adevărată, instrucțiunile din buclă vor continua să se execute (dar aveți grijă să nu creați o buclă infinită).
Mai jos este macrocomanda de buclă care a fost discutată mai devreme, transformată într-o buclă While:
Sub while_loop() Dim num As Integer num = 1 'Numărul de pornire (în acest caz, este numărul liniei și valoarea setate la) While num <= 12 'Atâta timp cât variabila num este mai mică sau egală cu 12, instrucțiunile vor fi executate Cells(num, 1) = num 'Numerotare num = num + 1 'Numărul este incrementat cu 1 de fiecare dată când trece bucla Wend End Sub
Folosind această buclă într-o macrocomandă, tot ce ar trebui să facem dacă am avea nevoie de 400 de benzi în loc de 12 este să înlocuim 12 cu 400.
Există o altă modalitate de a scrie o buclă care funcționează la fel ca While Wend (care rulează atâta timp cât o anumită condiție conținută în comanda While este adevărată):
Sub do_while_loop() Do While [condiție] 'Instrucțiuni Loop End Sub
Următoarea versiune arată că condiția poate fi scrisă la sfârșitul buclei Do Loop, ceea ce înseamnă că instrucțiunile vor fi executate exact cel puțin o dată:
Sub do_while_loop() Do 'Instrucțiuni Loop While [condiție] End Sub
În loc să facem buclă în timp ce condiția este îndeplinită, putem, de asemenea, să ieșim din buclă după condiție dacă înlocuim While cu Until:
Sub do_while_loop() Do Until [condiție] 'Instrucțiuni Loop End Sub
Sub for_loop() For i = 1 To 5 'Instrucțiuni Next End Sub
Bucla For se va repeta aici de 5 ori.
De fiecare dată când acest ciclu este repetat, variabila i este mărită automat cu 1:
Sub for_loop() For i = 1 To 5 MsgBox i Next End Sub
Este posibil să părăsiți mai devreme bucla For folosind următoarea instrucțiune:
Exit For 'Ieșiți din bucla For
Să luăm în considerare un exemplu care va arăta clar acest lucru:
Sub for_loop() Dim max_loops As Integer max_loops = Range("A1") 'În celula A1, am specificat limita pentru numărul de repetări For i = 1 To 7 'Numărul de cicluri estimat: 7 If i > max_loops Then 'Dacă celula A1 este goală sau conține un număr mai mic de 7, atunci reduceți numărul de repetări Exit For 'Dacă condiția anterioară este TRUE, atunci ieșirea din bucla For...bucla End If MsgBox i Next End Sub
Alți operatori Exit:
Exit Do 'Ieșire buclă Do Loop
Exit Sub 'Ieșiți din procedură
Exit Function 'Funcția de ieșire