VBA-n begiztak

Badaude VBA programa batek ekintza multzo bera hainbat aldiz jarraian egiteko behar duenean (hau da, hainbat aldiz errepikatu kode bloke bera). Hau VBA begiztak erabiliz egin daiteke.

VBA begiztak honako hauek dira:

Jarraian, ziklo horietako bakoitza sakonago aztertuko dugu.

Loop Operator Visual Basic-en

Begizta-operadorearen egitura The Visual Basic-en bi forma hauetako batean antola daiteke: begizta gisa Horretarako... Hurrengoa edo begizta gisa Bakoitzarentzako.

"Hurrengorako..." zikloa

Zikloa Horretarako... Hurrengoa barruti jakin bateko balioak sekuentzialki hartzen dituen aldagai bat erabiltzen du. Aldagaiaren balio aldaketa bakoitzean, zikloaren gorputzean sartutako ekintzak egiten dira. Hau erraz ulertzen da adibide sinple batetik:

For i = 1 To 10 Total = Total + iArray(i) Hurrengo i

Begizta sinple honetan Horretarako... Hurrengoa aldagaia erabiltzen da i, 1, 2, 3, ... 10 balioak sekuentzialki hartzen dituena, eta balio horietako bakoitzerako, begiztaren barruan dagoen VBA kodea exekutatzen da. Horrela, begizta honek arrayko elementuak batu ditu. iArray aldagaian Guztira.

Goiko adibidean, begiztaren gehikuntza ez da zehazten, beraz, aldagaia handitzeko i 1etik 10era, lehenetsia gehikuntza bat da 1… Hala ere, kasu batzuetan beharrezkoa da begiztarako gehikuntza-balio desberdinak erabiltzea. Hau gako-hitza erabiliz egin daiteke Urratseraondoko adibide sinplean erakusten den bezala.

For d = 0 To 10 Step 0.1 dTotal = dTotal + d Hurrengo d

Goiko adibidean, gehikuntza-urratsaren berdina ezartzen da 0.1, gero aldagaia dGuztira zikloaren errepikapen bakoitzean 0.0, 0.1, 0.2, 0.3,... 9.9, 10.0 balioak hartzen ditu.

VBA-n begizta urratsa zehazteko, balio negatibo bat erabil dezakezu, adibidez, honela:

For i = 10 To 1 Step -1 iArray(i) = i Hurrengo i

Hona hemen gehikuntza -1, beraz, aldagaia i zikloaren errepikapen bakoitzean 10, 9, 8, ... 1 balioak hartzen ditu.

Begizta "bakoitzerako"

Zikloa Bakoitzarentzako ziklo baten antzekoa Horretarako... Hurrengoa, baina kontagailuaren aldagaiaren balio-sekuentziaren gainean errepikatu beharrean, begizta Bakoitzarentzako ekintza multzo bat egiten du zehaztutako objektu-taldeko objektu bakoitzarentzat. Hurrengo adibidean, begizta bat erabiliz Bakoitzarentzako Uneko Excel lan-koadernoko orri guztiak zerrendatzen ditu:

Dim wSheet Lan-orri bakoitzeko wSheet lan-orri gisa MsgBox "Найден лист: " & wSheet.Name Hurrengo wSheet

Begizta eten adierazpena "Irten For"

Operator Irteera For zikloa eteteko erabiltzen da. Kodean adierazpen hau aurkitu bezain laster, programak begiztaren exekuzioa amaitzen du eta begizta honen ondoren kodean dauden instrukzioen exekuzioari ekin dio. Hau erabil daiteke, adibidez, array batean balio zehatz bat bilatzeko. Horretarako, begizta bat erabiliz, arrayko elementu bakoitza eskaneatzen da. Beharrezko elementua aurkitu bezain laster, ez dago gainerakoak begiratu beharrik: zikloa eten egiten da.

Operadorearen aplikazioa Irteera For ondoko adibidean frogatua. Hemen begiztak 100 array-sarrera baino gehiago errepikatzen ditu eta bakoitza aldagaiaren balioarekin alderatzen du dVal… Bat-etortze bat aurkitzen bada, begizta amaituko da:

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

Do While begizta Visual Basic-en

Zikloa Egin bitartean kode bloke bat exekutatzen du, zehaztutako baldintza betetzen bada. Jarraian prozedura baten adibidea da Sub, zeinetan begizta erabiliz Egin bitartean 1000 baino gehiago ez diren Fibonacci zenbakiak sekuentzialki bistaratzen dira:

'Sub-prozedurak 1000 baino gehiago ez dituzten Fibonacci-ren zenbakiak ateratzen ditu. Sub Fibonacci() Dim i As Integer 'kontagailua Dim iFib As Integer gisa sekuentziaren posizioa adierazteko Dim iFib_Next As Integer-ek hurrengo balioa gordetzen du sekuentziaren uneko balioa. sekuentziaren Dim iStep As Integer 'ek hurrengo gehikuntzaren tamaina gordetzen du' hasieratu i eta iFib_Next aldagaiak i = 1 iFib_Next = 0 'Do While begizta exekutatu egingo da 'uneko Fibonacci zenbakiaren balioa 1000 baino handiagoa izan arte Do While iFib_Next < 1000 If i = 1 Orduan 'lehen elementuaren kasu berezia iStep = 1 iFib = 0 Bestela 'gorde hurrengo gehikuntzaren tamaina gainidatzi aurretik' sekuentziaren uneko balioa iStep = iFib iFib = iFib_Next End If 'inprimatu uneko Fibonacci zenbakiaren A zutabean. lan-orri aktiboa ' indizea i Cells (i , 1) duen errenkadan. Balioa = iFib 'kalkulatu hurrengo Fibonacci zenbakia eta handitu elementuaren posizioaren indizea 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Emandako adibidean, baldintza iFib_Hurrengoa < 1000 begiztaren hasieran egiaztatuta. Beraz, lehen balioa bada iFib_Hurrengoa 1000 baino gehiago baleude, begizta ez litzateke inoiz exekutatuko.

Begizta bat ezartzeko beste modu bat Egin bitartean - Jarri baldintza ez hasieran, begiztaren amaieran baizik. Kasu honetan, begizta gutxienez behin exekutatuko da, baldintza betetzen den ala ez kontuan hartu gabe.

Eskematikoki, halako ziklo bat Egin bitartean amaieran egiaztatu beharreko baldintza hau izango da:

Egin ... Begiztatu bitartean iFib_Next < 1000

"Egin arte" ikusi Visual Basic-en

Zikloa Egin arte zikloaren oso antzekoa Egin bitartean: begiztaren gorputzeko kode blokea behin eta berriz exekutatzen da zehaztutako baldintza bete arte (baldintza adierazpenaren emaitza da Egia). Hurrengo prozeduran Sub ziklo bat erabiliz Egin arte berreskuratu zutabe bateko gelaxka guztietako balioak A lan-orria zutabeak gelaxka huts batekin topo egin arte:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Uneko gelaxkaren balioa dCellValues ​​​​dCellValues(iRow) = Gelaxkak (iRow, 1).Balioa iRow = iRow + 1 Loop matrizean gordetzen da

Goiko adibidean, baldintza Hutsik dago(Gelulak (iRankada, 1)) egituraren hasieran kokatzen da Egin arte, beraz, begizta gutxienez behin exekutatuko da hartutako lehen gelaxka hutsik ez badago.

Hala ere, begizta adibideetan erakusten den bezala Egin bitartean, egoera batzuetan beharrezkoa da begizta gutxienez behin exekutatzea, baldintzazko adierazpenaren hasierako emaitza edozein dela ere. Kasu honetan, baldintzazko adierazpena begiztaren amaieran jarri behar da, honela:

Egin... Begiztatu hutsik dagoen arte (Gelulak(iRow, 1))

Utzi erantzun bat