Zanke v VBA

Obstajajo situacije, ko mora program VBA izvesti isti nabor dejanj večkrat zaporedoma (to je, večkrat ponoviti isti blok kode). To je mogoče storiti z uporabo zank VBA.

Zanke VBA vključujejo:

Nato si bomo podrobneje ogledali vsakega od teh ciklov.

Operator zanke za v Visual Basicu

Struktura operatorja zanke O v Visual Basicu je mogoče organizirati v eni od dveh oblik: kot zanko Za… Naprej ali kot zanko Za vsakogar.

Kroži “Za … naprej”

Cycle Za… Naprej uporablja spremenljivko, ki zaporedno vzame vrednosti iz danega obsega. Z vsako spremembo vrednosti spremenljivke se izvedejo dejanja, ki so zaprta v telesu cikla. To je enostavno razumeti iz preprostega primera:

Za i = 1 do 10 Total = Total + iArray(i) Naslednji i

V tej preprosti zanki Za… Naprej spremenljivka se uporablja i, ki zaporedno zavzema vrednosti 1, 2, 3, … 10 in za vsako od teh vrednosti se izvede koda VBA znotraj zanke. Tako ta zanka sešteje elemente matrike. iArray v spremenljivki Skupaj za plačilo.

V zgornjem primeru prirastek zanke ni določen, da bi povečali spremenljivko i od 1 do 10, privzeto je prirast 1… Vendar pa je v nekaterih primerih treba uporabiti različne vrednosti prirastka za zanko. To lahko storite s ključno besedo Korakkot je prikazano v naslednjem preprostem primeru.

Za d = 0 do 10 Korak 0.1 dTotal = dTotal + d Naslednji d

Ker je v zgornjem primeru korak prirastka nastavljen na enak 0.1, nato spremenljivko dSkupaj za vsako ponovitev cikla zavzame vrednosti 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Če želite določiti korak zanke v VBA, lahko uporabite negativno vrednost, na primer takole:

Za i = 10 do 1 korak -1 iArray(i) = i Naslednji i

Tukaj je prirastek -1, torej spremenljivka i z vsako ponovitvijo cikla prevzame vrednosti 10, 9, 8, … 1.

Zanka "Za vsakega"

Cycle Za vsakogar podobno ciklu Za… Naprej, vendar namesto ponavljanja zaporedja vrednosti za spremenljivko števca, zanke Za vsakogar izvede nabor dejanj za vsak predmet v navedeni skupini predmetov. V naslednjem primeru z uporabo zanke Za vsakogar našteje vse liste v trenutnem Excelovem delovnem zvezku:

Zatemni wSheet kot delovni list za vsak wSheet v delovnih listih MsgBox "Najden list: " & wSheet.Name Next wSheet

Izjava o prekinitvi zanke "Izhod za"

Operater Izhod za uporablja za prekinitev cikla. Takoj ko v kodi naleti na ta stavek, program zaključi izvajanje zanke in nadaljuje z izvajanjem stavkov, ki so v kodi takoj za to zanko. To lahko uporabite na primer za iskanje določene vrednosti v matriki. Če želite to narediti, se s pomočjo zanke skenira vsak element matrike. Takoj, ko je najden zahtevani element, ni treba brskati po preostalih - cikel je prekinjen.

Aplikacija operaterja Izhod za prikazano v naslednjem primeru. Tukaj zanka ponovi več kot 100 vnosov polja in vsakega primerja z vrednostjo spremenljivke dVal… Če se najde ujemanje, se zanka prekine:

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

Zanka Do While Loop v Visual Basicu

Cycle Delajte nekaj časa izvede blok kode, dokler je podani pogoj izpolnjen. Sledi primer postopka spodaj, v katerem z uporabo zanke Delajte nekaj časa Fibonaccijeva števila, ki ne presegajo 1000, so prikazana zaporedno:

'Subprocedura izpiše Fibonaccijeva števila, ki ne presegajo 1000. Sub Fibonacci() Dim i As Integer 'števec za označevanje položaja elementa v zaporedju Dim iFib As Integer' shrani trenutno vrednost zaporedja Dim iFib_Next As Integer 'shrani naslednjo vrednost zaporedja Dim iStep As Integer 'shranjuje velikost naslednjega prirastka 'inicializira spremenljivki i in iFib_Next i = 1 iFib_Next = 0 'Do While zanka se bo izvajala, dokler vrednost 'trenutnega Fibonaccijevega števila ne bo večja od 1000 Do While iFib_Next < 1000 Če i = 1 Nato 'poseben primer za prvi element iStep = 1 iFib = 0 Sicer 'shrani velikost naslednjega prirastka pred prepisovanjem 'trenutne vrednosti zaporedja iStep = iFib iFib = iFib_Next End If 'natisni trenutno Fibonaccijevo število v stolpcu A od aktivni delovni list 'v vrstici z indeksom i Cells(i , 1).Value = iFib 'izračunajte naslednje Fibonaccijevo število in povečajte indeks položaja elementa za 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

V navedenem primeru je pogoj iFib_Naslednji < 1000 preverjeno na začetku zanke. Torej, če je prva vrednost iFib_Naprej Če bi jih bilo več kot 1000, se zanka nikoli ne bi izvedla.

Drug način za izvedbo zanke Delajte nekaj časa - pogoj ne postavite na začetek, ampak na konec zanke. V tem primeru se bo zanka izvedla vsaj enkrat, ne glede na to, ali je pogoj izpolnjen.

Shematsko, tak cikel Delajte nekaj časa s pogojem, ki ga je treba preveriti na koncu, bo videti takole:

Do ... Loop While iFib_Next < 1000

Cikel »Do« v Visual Basicu

Cycle Naredite do zelo podobno ciklu Delajte nekaj časa: blok kode v telesu zanke se izvaja znova in znova, dokler ni izpolnjen podani pogoj (rezultat pogojnega izraza je True). V naslednjem postopku spodaj z uporabo cikla Naredite do pridobi vrednosti iz vseh celic v stolpcu A delovni list, dokler stolpec ne naleti na prazno celico:

iRow = 1 Do IsEmpty(Cells(iRow, 1)) 'Vrednost trenutne celice je shranjena v matriki dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Vrednost iRow = iRow + 1 Loop

V zgornjem primeru je pogoj Je Prazno(Celice(iRow, 1)) ki se nahaja na začetku strukture Naredite do, tako da se bo zanka izvedla vsaj enkrat, če prva vzeta celica ni prazna.

Vendar, kot je prikazano v primerih zanke Delajte nekaj časa, je v nekaterih situacijah potrebno, da se zanka izvede vsaj enkrat, ne glede na začetni rezultat pogojnega izraza. V tem primeru je treba pogojni izraz postaviti na konec zanke, takole:

Naredi ... Zanka, dokler ni prazno (celice (iRow, 1))

Pustite Odgovori