Mga loop sa VBA

May mga sitwasyon kung kailan kinakailangan ang isang VBA program na magsagawa ng parehong hanay ng mga aksyon nang maraming beses sa isang hilera (iyon ay, ulitin ang parehong bloke ng code nang maraming beses). Magagawa ito gamit ang mga VBA loops.

Kasama sa mga VBA loop ang:

Susunod, titingnan natin ang bawat isa sa mga siklong ito.

Para sa Loop Operator sa Visual Basic

Ang istraktura ng loop operator Ang sa Visual Basic ay maaaring ayusin sa isa sa dalawang anyo: bilang isang loop Para sa… Susunod o bilang isang loop Para sa Bawat isa.

Ikot “Para sa … Susunod”

cycle Para sa… Susunod gumagamit ng variable na sunud-sunod na kumukuha ng mga halaga mula sa isang ibinigay na hanay. Sa bawat pagbabago ng halaga ng variable, ang mga aksyon na nakapaloob sa katawan ng cycle ay ginaganap. Ito ay madaling maunawaan mula sa isang simpleng halimbawa:

Para sa i = 1 Hanggang 10 Kabuuan = Kabuuan + iArray(i) Susunod i

Sa simpleng loop na ito Para sa… Susunod ginagamit ang variable i, na sunud-sunod na kumukuha ng mga halaga 1, 2, 3, … 10, at para sa bawat isa sa mga halagang ito, ang VBA code sa loob ng loop ay isinasagawa. Kaya, ang loop na ito ay nagbubuod ng mga elemento ng array. iArray sa variable total.

Sa halimbawa sa itaas, ang loop increment ay hindi tinukoy, kaya upang dagdagan ang variable i mula 1 hanggang 10, ang default ay isang pagtaas 1… Gayunpaman, sa ilang mga kaso kinakailangan na gumamit ng iba't ibang mga halaga ng pagtaas para sa loop. Magagawa ito gamit ang keyword Hakbangtulad ng ipinapakita sa sumusunod na simpleng halimbawa.

Para sa d = 0 Hanggang 10 Hakbang 0.1 dKabuuan = dKabuuan + d Susunod d

Dahil sa halimbawa sa itaas, ang hakbang ng pagtaas ay itinakda katumbas ng 0.1, pagkatapos ay ang variable dKabuuan para sa bawat pag-uulit ng cycle ay tumatagal sa mga halaga 0.0, 0.1, 0.2, 0.3,... 9.9, 10.0.

Upang matukoy ang loop step sa VBA, maaari kang gumamit ng negatibong halaga, halimbawa, tulad nito:

Para sa i = 10 Hanggang 1 Hakbang -1 iArray(i) = i Susunod i

Narito ang pagtaas ay -1, kaya ang variable i sa bawat pag-uulit ng cycle ay tumatagal sa mga halaga 10, 9, 8, ... 1.

Loop "Para sa Bawat"

cycle Para sa Bawat isa katulad ng isang cycle Para sa… Susunod, ngunit sa halip na umulit sa pagkakasunud-sunod ng mga halaga para sa counter variable, ang loop Para sa Bawat isa gumaganap ng isang hanay ng mga aksyon para sa bawat bagay sa tinukoy na pangkat ng mga bagay. Sa sumusunod na halimbawa, gamit ang isang loop Para sa Bawat isa enumerates lahat ng mga sheet sa kasalukuyang Excel workbook:

I-dim ang wSheet Bilang Worksheet Para sa Bawat wSheet sa Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

Loop interrupt na pahayag na "Lumabas Para"

Opereytor Exit Para sa ginagamit upang matakpan ang cycle. Sa sandaling makita ang pahayag na ito sa code, tatapusin ng programa ang pagpapatupad ng loop at magpapatuloy sa pagpapatupad ng mga pahayag na nasa code kaagad pagkatapos ng loop na ito. Magagamit ito, halimbawa, upang maghanap ng isang partikular na halaga sa isang array. Upang gawin ito, gamit ang isang loop, ang bawat elemento ng array ay ini-scan. Sa sandaling natagpuan ang kinakailangang elemento, hindi na kailangang tingnan ang natitira - ang cycle ay nagambala.

Application ng operator Exit Para sa ipinakita sa sumusunod na halimbawa. Dito umuulit ang loop ng higit sa 100 mga entry ng array at inihahambing ang bawat isa sa halaga ng variable dVal… Kung may nakitang tugma, wawakasan ang loop:

Para sa i = 1 Hanggang 100 Kung dValues(i) = dVal Pagkatapos IndexVal = i Exit For End Kung Susunod i

Ang Do While Loop sa Visual Basic

cycle Gawin habang nagsasagawa ng isang bloke ng code hangga't natutugunan ang tinukoy na kundisyon. Ang sumusunod ay isang halimbawa ng isang pamamaraan sub, kung saan gamit ang loop Gawin habang Ang mga numero ng Fibonacci na hindi hihigit sa 1000 ay ipinapakita nang sunud-sunod:

'Sub procedure ay naglalabas ng mga numero ng Fibonacci na hindi hihigit sa 1000 Sub Fibonacci() Dim i As Integer 'counter upang ipahiwatig ang posisyon ng elemento sa sequence Dim iFib Habang iniimbak ng Integer 'ang kasalukuyang halaga ng sequence Dim iFib_Next Habang iniimbak ng Integer ang susunod na halaga ng pagkakasunud-sunod Dim iStep Bilang Integer 'nag-iimbak ng laki ng susunod na pagtaas 'nagsisimula ng mga variable i at iFib_Next i = 1 iFib_Next = 0 'Do While loop ay isasagawa hanggang ang halaga ng 'kasalukuyang Fibonacci number ay mas malaki sa 1000 Do Habang iFib_Next < 1000 Kung i = 1 Pagkatapos 'espesyal na kaso para sa unang elemento iStep = 1 iFib = 0 Iba pa 'i-save ang laki ng susunod na pagtaas bago i-overwrite 'ang kasalukuyang halaga ng sequence iStep = iFib iFib = iFib_Next End Kung 'i-print ang kasalukuyang numero ng Fibonacci sa column A ng ang aktibong worksheet 'sa row na may index i Cells(i , 1).Value = iFib 'kalkulahin ang susunod na numero ng Fibonacci at dagdagan ang index ng posisyon ng elemento ng 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Sa ibinigay na halimbawa, ang kondisyon iFib_Next < 1000 nasuri sa simula ng loop. Samakatuwid, kung ang unang halaga iFib_Next Kung mayroong higit sa 1000, kung gayon ang loop ay hindi kailanman isasagawa.

Ang isa pang paraan upang ipatupad ang isang loop Gawin habang - ilagay ang kondisyon hindi sa simula, ngunit sa dulo ng loop. Sa kasong ito, ang loop ay isasagawa nang hindi bababa sa isang beses, hindi alintana kung ang kundisyon ay natutugunan.

Schematically, tulad ng isang cycle Gawin habang na may kundisyon na susuriin sa dulo ay magiging ganito:

Gawin ... Loop Habang iFib_Next < 1000

Цикл «Gawin Hanggang» sa Visual Basic

cycle Gawin Hanggang halos kapareho ng cycle Gawin habang: ang block ng code sa katawan ng loop ay paulit-ulit na isinasagawa hanggang sa matugunan ang tinukoy na kundisyon (ang resulta ng conditional expression ay Totoo). Sa susunod na pamamaraan sub gamit ang isang cycle Gawin Hanggang kunin ang mga halaga mula sa lahat ng mga cell sa isang hanay A worksheet hanggang sa makita ng column ang isang walang laman na cell:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Ang halaga ng kasalukuyang cell ay naka-store sa array dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

Sa halimbawa sa itaas, ang kondisyon IsEmpty(Cells(iRow, 1)) matatagpuan sa simula ng istraktura Gawin Hanggang, kaya ang loop ay isasagawa ng kahit isang beses kung ang unang cell na kinuha ay walang laman.

Gayunpaman, tulad ng ipinapakita sa mga halimbawa ng loop Gawin habang, sa ilang mga sitwasyon kinakailangan na ang loop ay maisakatuparan nang hindi bababa sa isang beses, anuman ang paunang resulta ng conditional expression. Sa kasong ito, dapat ilagay ang conditional expression sa dulo ng loop, tulad nito:

Gawin ... I-loop Hanggang Ma-Empty(Cells(iRow, 1))

Mag-iwan ng Sagot