Petlje u VBA

Postoje situacije kada se od VBA programa traži da izvrši isti skup radnji nekoliko puta zaredom (tj. nekoliko puta ponovi isti blok koda). Ovo se može uraditi pomoću VBA petlji.

VBA petlje uključuju:

Zatim ćemo detaljnije pogledati svaki od ovih ciklusa.

Za operator petlje u Visual Basicu

Struktura operatora petlje The u Visual Basicu može biti organizovan u jednom od dva oblika: kao petlja Za… Sledeći ili kao petlja Za svaki.

Ciklus “Za … Sljedeći”

ciklus Za… Sledeći koristi varijablu koja sekvencijalno preuzima vrijednosti iz datog raspona. Sa svakom promjenom vrijednosti varijable izvode se radnje koje se nalaze u tijelu ciklusa. Ovo je lako razumjeti iz jednostavnog primjera:

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

U ovoj jednostavnoj petlji Za… Sledeći se koristi varijabla i, koji sekvencijalno uzima vrijednosti 1, 2, 3, … 10, a za svaku od ovih vrijednosti se izvršava VBA kod unutar petlje. Dakle, ova petlja sabira elemente niza. iArray u varijabilnoj ukupan.

U gornjem primjeru, inkrement petlje nije specificiran, tako da se povećava varijabla i od 1 do 10, podrazumevano je povećanje 1… Međutim, u nekim slučajevima je potrebno koristiti različite vrijednosti inkrementa za petlju. Ovo 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 inkrementa postavljen jednak 0.1, zatim varijabla dTotal 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

Ovdje je prirast -1, dakle varijabla i sa svakim ponavljanjem ciklusa poprima vrijednosti 10, 9, 8,…1.

Petlja "Za svaki"

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

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

Naredba prekida petlje “Izlaz za”

operator Izađi za koristi se za prekid ciklusa. Čim se ova naredba naiđe u kodu, program završava izvršavanje petlje i prelazi na izvršavanje naredbi koje se nalaze u kodu odmah nakon ove petlje. Ovo se može koristiti, na primjer, za traženje određene vrijednosti u nizu. Da biste to učinili, pomoću petlje, svaki element niza se skenira. Čim se pronađe traženi element, nema potrebe za pregledom ostatka – ciklus se prekida.

Aplikacija operatera Izađi za demonstrirano u sljedećem primjeru. Ovdje petlja ponavlja preko 100 unosa u niz i svaki upoređuje sa vrijednošću varijable dVal… Ako se pronađe podudaranje, onda se petlja prekida:

Za i = 1 do 100 Ako je dValues(i) = dVal Tada IndexVal = i Izlaz Za Kraj Ako Sljedeće i

Petlja Do While u Visual Basicu

ciklus Uradi dok izvršava blok koda sve dok je specificirani uvjet ispunjen. Sljedeći je primjer procedure Izmjene, u kojem se koristi petlja Uradi dok Fibonačijevi brojevi koji ne prelaze 1000 prikazuju se uzastopno:

'Sub procedura daje Fibonaccijeve brojeve koji ne prelaze 1000 Sub Fibonacci() Dim i As Integer 'brojač za označavanje pozicije 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 'inicijaliziraj varijable i i iFib_Next i = 1 iFib_Next = 0 'Do While petlja će se izvršavati sve dok vrijednost 'trenutnog Fibonačijevog broja ne bude veća od 1000 Do While iFib_Next1000 If < i 1 Zatim 'poseban slučaj za prvi element iStep = 1 iFib = 0 Inače 'sačuvajte veličinu sljedećeg inkrementa prije nego što prepišete 'trenutnu vrijednost niza iStep = iFib iFib = iFib_Next End If 'ispišite trenutni Fibonačijev broj u koloni A od aktivni radni list 'u redu sa indeksom i Cells(i , 1).Value = iFib 'izračunajte sljedeći Fibonačijev broj i povećajte indeks pozicije elementa za 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

U datom primjeru, uvjet iFib_Sljedeći < 1000 provjerava se na početku petlje. Stoga, ako je prva vrijednost iFib_Next Da ih ima više od 1000, onda se petlja nikada ne bi izvršila.

Drugi način implementacije petlje Uradi dok - postavite uslov ne na početak, već na kraj petlje. U ovom slučaju, petlja će se izvršiti najmanje jednom, bez obzira da li je uslov ispunjen.

Šematski, takav ciklus Uradi dok sa uslovom koji treba provjeriti na kraju će izgledati ovako:

Uradite ... Petlja dok je iFib_Next < 1000

Cikl «Do Until» u Visual Basicu

ciklus Do Until veoma slicno ciklusu Uradi dok: blok koda u tijelu petlje se izvršava iznova i iznova dok se ne ispuni navedeni uvjet (rezultat uvjetnog izraza je istinski). U sledećoj proceduri Izmjene koristeći ciklus Do Until dohvati vrijednosti iz svih ćelija u koloni A radni list sve dok stupac ne naiđe na praznu ćeliju:

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

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

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

Uradite ... petlja dok se ne isprazni (ćelije(iRow, 1))

Ostavite odgovor