Loops fil-VBA

Hemm sitwazzjonijiet meta programm VBA huwa meħtieġ biex iwettaq l-istess sett ta 'azzjonijiet diversi drabi wara xulxin (jiġifieri, irrepeti l-istess blokk ta' kodiċi diversi drabi). Dan jista 'jsir bl-użu ta' loops VBA.

Loops VBA jinkludu:

Sussegwentement, nagħtu ħarsa aktar mill-qrib lejn kull wieħed minn dawn iċ-ċikli.

Għal Loop Operator f'Visual Basic

L-istruttura tal-operatur tal-linja il fil Visual Basic jistgħu jiġu organizzati f'waħda minn żewġ forom: bħala loop Għal... Li jmiss jew bħala loop Għal kull.

Ċiklu “Għal… Li jmiss”

Cycle Għal... Li jmiss juża varjabbli li sekwenzjali tieħu valuri minn firxa partikolari. Ma 'kull bidla tal-valur tal-varjabbli, l-azzjonijiet magħluqa fil-korp taċ-ċiklu huma mwettqa. Dan huwa faċli biex tifhem minn eżempju sempliċi:

Għal i = 1 Sa 10 Total = Total + iArray(i) Li jmiss i

F'dan il-linja sempliċi Għal... Li jmiss tintuża varjabbli i, li b'mod sekwenzjali jieħu l-valuri 1, 2, 3, ... 10, u għal kull wieħed minn dawn il-valuri, jiġi esegwit il-kodiċi VBA ġewwa l-linja. Għalhekk, din il-linja tgħaqqad l-elementi tal-firxa. iArray fil-varjabbli total.

Fl-eżempju ta 'hawn fuq, l-inkrement tal-linja mhuwiex speċifikat, sabiex iżid il-varjabbli i minn 1 sa 10, in-nuqqas huwa inkrement 1… Madankollu, f'xi każijiet huwa meħtieġ li jintużaw valuri ta 'inkrement differenti għal-linja. Dan jista 'jsir bl-użu tal-keyword Passkif muri fl-eżempju sempliċi li ġej.

Għal d = 0 Sa 10 Pass 0.1 dTotal = dTotal + d Li jmiss d

Peress li fl-eżempju ta 'hawn fuq, il-pass ta' inkrement huwa ssettjat ugwali għal 0.1, imbagħad il-varjabbli dTotal għal kull ripetizzjoni taċ-ċiklu tieħu l-valuri 0.0, 0.1, 0.2, 0.3,... 9.9, 10.0.

Biex tiddetermina l-pass tal-linja f'VBA, tista 'tuża valur negattiv, pereżempju, bħal dan:

Għal i = 10 Sa 1 Pass -1 iArray(i) = i Li jmiss i

Hawnhekk l-inkrement huwa -1, għalhekk il-varjabbli i b'kull ripetizzjoni taċ-ċiklu tieħu l-valuri 10, 9, 8, ... 1.

Loop "Għal Kull"

Cycle Għal kull simili għal ċiklu Għal... Li jmiss, iżda minflok itertu fuq is-sekwenza ta 'valuri għall-varjabbli counter, il-linja Għal kull iwettaq sett ta 'azzjonijiet għal kull oġġett fil-grupp speċifikat ta' oġġetti. Fl-eżempju li ġej, bl-użu ta 'linja Għal kull jinnumera l-folji kollha fil-ktieb tax-xogħol attwali ta 'Excel:

Dim wSheet Bħala Worksheet Għal Kull wSheet f'Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

Dikjarazzjoni ta' interruzzjoni tal-linja "Ħruġ Għal"

operatur Ħruġ Għal użata biex tinterrompi ċ-ċiklu. Hekk kif din id-dikjarazzjoni tiltaqa' magħhom fil-kodiċi, il-programm itemm l-eżekuzzjoni tal-linja u jipproċedi għall-eżekuzzjoni tad-dikjarazzjonijiet li huma fil-kodiċi immedjatament wara dan il-linja. Dan jista 'jintuża, pereżempju, biex tfittex valur speċifiku f'firxa. Biex tagħmel dan, bl-użu ta 'linja, kull element tal-firxa jiġi skennjat. Hekk kif jinstab l-element meħtieġ, m'hemmx għalfejn tħares mill-bqija - iċ-ċiklu jiġi interrott.

Applikazzjoni tal-operatur Ħruġ Għal muri fl-eżempju li ġej. Hawnhekk il-linja jtenni fuq 100 entrata tal-firxa u jqabbel kull wieħed mal-valur tal-varjabbli dVal… Jekk tinstab taqbila, allura l-linja tintemm:

Għal i = 1 Sa 100 Jekk dValues(i) = dVal Imbagħad IndexVal = i Ħruġ Għal Tmiem Jekk Li jmiss i

Il-Do While Loop f'Visual Basic

Cycle Agħmel waqt tesegwixxi blokk ta 'kodiċi sakemm il-kundizzjoni speċifikata tkun sodisfatta. Dan li ġej huwa eżempju ta' proċedura sotto, li fiha tuża l-linja Agħmel waqt In-numri ta' Fibonacci li ma jaqbżux l-1000 jintwerew b'mod sekwenzjali:

'Sub proċedura toħroġ numri Fibonacci li ma jaqbżux 1000 Sub Fibonacci() Dim i As Integer 'counter biex tindika l-pożizzjoni tal-element fis-sekwenza Dim iFib As Integer 'jaħżen il-valur kurrenti tas-sekwenza Dim iFib_Next Kif Integer 'jaħżen il-valur li jmiss tas-sekwenza Dim iStep Kif Integer 'jaħżen id-daqs tal-inkrement li jmiss 'initialize varjabbli i u iFib_Next i = 1 iFib_Next = 0 'Do While loop se jesegwixxi sakemm il-valur ta' 'numru attwali ta' Fibonacci huwa akbar minn 1000 Do Filwaqt li iFib_Next < 1000 Jekk i = 1 Imbagħad 'każ speċjali għall-ewwel element iStep = 1 iFib = 0 Inkella 'jiffranka d-daqs taż-żieda li jmiss qabel ma tikteb fuq il-'l-valur kurrenti tas-sekwenza iStep = iFib iFib = iFib_Next End Jekk 'ipprintja n-numru attwali ta' Fibonacci fil-kolonna A ta' il-worksheet attiv 'fir-ringiela b'indiċi i Ċelloli (i , 1).Valur = iFib 'ikkalkula n-numru ta' Fibonacci li jmiss u żżid l-indiċi tal-pożizzjoni tal-element b'1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Fl-eżempju mogħti, il-kundizzjoni iFib_Next < 1000 iċċekkjat fil-bidu tal-linja. Għalhekk, jekk l-ewwel valur iFib_Next Kieku kien hemm aktar minn 1000, allura l-linja qatt ma tiġi esegwita.

Mod ieħor biex timplimenta loop Agħmel waqt - poġġi l-kundizzjoni mhux fil-bidu, iżda fl-aħħar tal-linja. F'dan il-każ, il-linja se tiġi esegwita mill-inqas darba, irrispettivament minn jekk il-kundizzjoni tkunx sodisfatta.

Skematikament, ċiklu bħal dan Agħmel waqt bil-kundizzjoni li trid tiġi ċċekkjata fl-aħħar se tidher bħal din:

Do ... Loop While iFib_Next < 1000

Цикл «Do Sakemm» в Visual Basic

Cycle Do Sakemm simili ħafna għaċ-ċiklu Agħmel waqt: il-blokka tal-kodiċi fil-korp tal-linja hija eżegwita għal darb'oħra sakemm tintlaħaq il-kundizzjoni speċifikata (ir-riżultat tal-espressjoni kondizzjonali huwa Veru). Fil-proċedura li jmiss sotto bl-użu ta' ċiklu Do Sakemm irkupra valuri miċ-ċelloli kollha f'kolonna A worksheet sakemm il-kolonna tiltaqa' ma' ċellula vojta:

iRow = 1 Do Sakemm IsEmpty(Cells(iRow, 1)) 'Il-valur taċ-ċellula kurrenti huwa maħżun fil-firxa dCellValues ​​​​dCellValues(iRow) = Ċelloli (iRow, 1).Valur iRow = iRow + 1 Loop

Fl-eżempju ta 'hawn fuq, il-kundizzjoni Huwa Vojt(Ċelloli(iRow, 1)) jinsab fil-bidu tal-istruttura Do Sakemm, għalhekk il-linja se tiġi esegwita mill-inqas darba jekk l-ewwel ċellula meħuda ma tkunx vojta.

Madankollu, kif muri fl-eżempji loop Agħmel waqt, f'xi sitwazzjonijiet huwa meħtieġ li l-linja tiġi esegwita mill-inqas darba, irrispettivament mir-riżultat inizjali tal-espressjoni kondizzjonali. F'dan il-każ, l-espressjoni kondizzjonali għandha titqiegħed fl-aħħar tal-linja, bħal dan:

Do ... Loop Sakemm Ikun Vojt(Ċelloli(iRow, 1))

Ħalli Irrispondi