Petlje u VBA

Postoje situacije kada VBA program mora izvršiti isti skup akcija nekoliko puta zaredom (to jest, ponoviti isti blok koda nekoliko puta). To se može učiniti pomoću VBA petlji.

VBA petlje uključuju:

Zatim ćemo pobliže pogledati svaki od ovih ciklusa.

Za operator petlje u Visual Basicu

Struktura operatora petlje Korištenje električnih romobila ističe u Visual Basicu mogu se organizirati u jednom od dva oblika: kao petlja Za… Dalje ili kao petlja Za svakoga.

Ciklus “Za … Dalje”

Ciklus Za… Dalje koristi varijablu koja uzastopno uzima vrijednosti iz zadanog raspona. Sa svakom promjenom vrijednosti varijable izvršavaju se akcije zatvorene u tijelu ciklusa. To je lako razumjeti iz jednostavnog primjera:

Za i = 1 do 10 Ukupno = Ukupno + iArray(i) Sljedeći i

U ovoj jednostavnoj petlji Za… Dalje koristi se varijabla i, koji sekvencijalno uzima vrijednosti 1, 2, 3, … 10, a za svaku od tih vrijednosti izvršava se VBA kod unutar petlje. Dakle, ova petlja zbraja elemente niza. iArray u varijabli ukupno.

U gornjem primjeru, inkrement petlje nije naveden, tako da bi se inkrementirala varijabla i od 1 do 10, zadana vrijednost je inkrement 1… Međutim, u nekim slučajevima potrebno je koristiti različite vrijednosti povećanja za petlju. To se može učiniti pomoću ključne riječi Korakkao što je prikazano u sljedećem jednostavnom primjeru.

Za d = 0 do 10 Korak 0.1 dUkupno = dUkupno + d Sljedeći d

Budući da je u gornjem primjeru korak povećanja postavljen jednak 0.1, zatim varijabla dUkupno za svako ponavljanje ciklusa poprima vrijednosti 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Da biste odredili korak petlje u VBA, možete koristiti negativnu vrijednost, na primjer, ovako:

Za i = 10 do 1 korak -1 iArray(i) = i Sljedeći i

Evo povećanja -1, dakle varijabla i svakim ponavljanjem ciklusa poprima vrijednosti 10, 9, 8, … 1.

Petlja "Za svaki"

Ciklus Za svakoga slično ciklusu Za… Dalje, ali umjesto ponavljanja niza vrijednosti za varijablu brojača, petlja Za svakoga izvodi skup akcija za svaki objekt u navedenoj grupi objekata. U sljedećem primjeru, korištenjem petlje Za svakoga nabraja sve listove u trenutnoj Excel radnoj knjizi:

Dim wSheet kao radni list za svaki wSheet u radnim listovima MsgBox "Najden list: " & wSheet.Name Next wSheet

Izjava o prekidu petlje "Izlaz za"

Operator Izlaz za koristi se za prekid ciklusa. Čim se ova naredba naiđe u kodu, program završava izvođenje petlje i nastavlja s izvođenjem naredbi koje se nalaze u kodu odmah nakon ove petlje. To se može koristiti, na primjer, za traženje određene vrijednosti u nizu. Da biste to učinili, pomoću petlje skenira se svaki element niza. Čim se pronađe traženi element, nema potrebe pregledavati ostatak - ciklus se prekida.

Aplikacija operatera Izlaz za prikazano u sljedećem primjeru. Ovdje petlja ponavlja više od 100 unosa polja i uspoređuje svaki s vrijednošću varijable dVal… Ako se pronađe podudaranje, petlja se prekida:

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

Do While petlja u Visual Basicu

Ciklus Za vrijeme izvršava blok koda sve dok je ispunjen navedeni uvjet. Slijedi primjer postupka ispod, u kojem se pomoću petlje Za vrijeme Fibonaccijevi brojevi koji ne prelaze 1000 prikazani su u nizu:

'Podprocedura daje Fibonaccijeve brojeve koji ne prelaze 1000 Sub Fibonacci() Dim i As Integer 'brojač za označavanje položaja elementa u nizu Dim iFib As Integer 'pohranjuje trenutnu vrijednost niza Dim iFib_Next As Integer 'pohranjuje sljedeću vrijednost niza Dim iStep As Integer 'pohranjuje veličinu sljedećeg inkrementa 'inicijalizirati varijable i i iFib_Next i = 1 iFib_Next = 0 'Do While petlja će se izvršavati dok vrijednost 'trenutačnog Fibonaccijevog broja ne bude veća od 1000 Do While iFib_Next < 1000 If i = 1 Zatim 'poseban slučaj za prvi element iStep = 1 iFib = 0 Inače 'spremite veličinu sljedećeg inkrementa prije prepisivanja 'trenutne vrijednosti niza iStep = iFib iFib = iFib_Next End If 'ispišite trenutni Fibonaccijev broj u stupcu A od aktivni radni list 'u redu s indeksom i Cells(i , 1).Value = iFib 'izračunajte sljedeći Fibonaccijev broj i povećajte indeks položaja elementa za 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

U navedenom primjeru uvjet iFib_Sljedeći < 1000 provjerava se na početku petlje. Stoga, ako je prva vrijednost iFib_Sljedeći Ako ih je bilo više od 1000, petlja se nikad ne bi izvršila.

Drugi način implementacije petlje Za vrijeme - postavite uvjet ne na početak, već na kraj petlje. U tom slučaju, petlja će se izvršiti barem jednom, bez obzira da li je uvjet ispunjen.

Shematski, takav ciklus Za vrijeme s uvjetom koji treba provjeriti na kraju će izgledati ovako:

Učinite ... Petlja Dok iFib_Next < 1000

Ciklus «Do» u Visual Basicu

Ciklus Učinite Do vrlo sličan ciklusu Za vrijeme: blok koda u tijelu petlje izvodi se iznova i iznova dok se ne ispuni navedeni uvjet (rezultat uvjetnog izraza je Pravi). U sljedećem postupku ispod pomoću ciklusa Učinite Do dohvaćanje vrijednosti iz svih ćelija u stupcu A radni list dok stupac ne naiđe na praznu ćeliju:

iRow = 1 Do IsEmpty(Cells(iRow, 1)) 'Vrijednost trenutne ćelije pohranjena je u nizu dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Vrijednost iRow = iRow + 1 petlja

U gornjem primjeru, uvjet Prazna je (ćelije (iRow, 1)) nalazi se na početku strukture Učinite Do, tako da će se petlja izvršiti barem jednom ako prva uzeta ćelija nije prazna.

Međutim, kao što je prikazano u primjerima petlje Za vrijeme, u nekim je situacijama potrebno da se petlja izvrši barem jednom, bez obzira na početni rezultat uvjetnog izraza. U ovom slučaju, uvjetni izraz treba staviti na kraj petlje, ovako:

Uradi ... Petlja dok nije prazno (ćelije (iRow, 1))

Ostavi odgovor