Loops in VBA

Ci hè situazione quandu un prugramma VBA hè necessariu di fà u listessu settore di azzioni parechje volte in una fila (vale à dì, ripetite u listessu bloccu di codice parechje volte). Questu pò esse fattu cù i loops VBA.

I cicli VBA includenu:

Dopu, avemu da piglià un ochju più vicinu à ognunu di sti ciculi.

Per Loop Operator in Visual Basic

A struttura di l'operatore di loop lu in Visual Basic pò esse urganizatu in una di duie forme: cum'è un ciclu Per ... Avanti o cum'è un ciclu Per ognunu.

Ciclu "Per ... Next"

Ciculu Per ... Avanti usa una variabile chì piglia in sequenza valori da un intervallu datu. Cù ogni cambiamentu di u valore di a variàbbili, l'azzioni chjusi in u corpu di u ciculu sò realizati. Questu hè faciule da capisce da un esempiu simplice:

Per i = 1 à 10 Total = Total + iArray(i) Next i

In questu ciclu simplice Per ... Avanti variabile hè usata i, chì piglia in sequenza i valori 1, 2, 3, ... 10, è per ognunu di sti valori, u codice VBA in u ciclu hè eseguitu. Cusì, stu loop suma l'elementi di l'array. iArray in variabile Total.

In l'esempiu supra, l'incrementu di u ciclu ùn hè micca specificatu, cusì per incrementà a variàbile i da 1 à 10, u predeterminatu hè un incrementu 1... In ogni casu, in certi casi, hè necessariu aduprà valori di incrementu differenti per u ciclu. Questu pò esse fattu cù a keyword passucum'è mostra in u seguente esempiu simplice.

Per d = 0 à 10 Passu 0.1 dTotal = dTotal + d Next d

Siccomu in l'esempiu supra, u passu di incrementu hè uguali à 0.1, dopu a variabile d Totale per ogni ripetizione di u ciculu assume i valori 0.0, 0.1, 0.2, 0.3,... 9.9, 10.0.

Per determinà u passu di ciclu in VBA, pudete aduprà un valore negativu, per esempiu, cusì:

Per i = 10 à 1 Step -1 iArray(i) = i Next i

Eccu l'incrementu -1, dunque a variabile i cù ogni ripetizione di u ciculu assume i valori 10, 9, 8, ... 1.

Loop "Per ogni"

Ciculu Per ognunu simile à un ciclu Per ... Avanti, ma invece di iterà nantu à a sequenza di valori per a variabile contatore, u ciclu Per ognunu esegue un inseme d'azzioni per ogni ughjettu in u gruppu d'uggetti specificatu. In l'esempiu seguente, usendu un ciclu Per ognunu enumera tutti i fogli in u libru di travagliu Excel attuale:

Dim wSheet As Worksheet per ogni wSheet in Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

Dichjarazione di interruzzione in loop "Exit For"

Operator Esci per usatu per interrompe u ciclu. Appena sta dichjarazione hè scontru in u codice, u prugramma finisce l'esekzione di u ciclu è procede à l'esekzione di e dichjarazioni chì sò in u codice immediatamente dopu à stu ciclu. Questu pò esse usatu, per esempiu, per circà un valore specificu in un array. Per fà questu, utilizendu un loop, ogni elementu di l'array hè scanned. Appena l'elementu necessariu si trova, ùn ci hè bisognu di circà à u restu - u ciculu hè interrottu.

Applicazione operatore Esci per dimustratu in l'esempiu dopu. Quì u loop itera più di 100 entrate di array è paragunate ognuna cù u valore di a variabile dVal... Se si trova una partita, u ciclu hè finitu:

Per i = 1 à 100 If dValues(i) = dVal Allora IndexVal = i Exit For End If Next i

U Do While Loop in Visual Basic

Ciculu Fate mentre esegue un bloccu di codice sempre chì a cundizione specificata hè cumpleta. U seguitu hè un esempiu di una prucedura Sub, in quale utilizendu u ciclu Fate mentre I numeri di Fibonacci chì ùn superanu micca 1000 sò affissati in sequenza:

'Sub prucedura pruduce numeri di Fibonacci chì ùn superanu micca 1000 Sub Fibonacci() Dim i As Integer 'Counter per indicà a pusizione di l'elementu in a sequenza Dim iFib As Integer 'magazzina u valore attuale di a sequenza Dim iFib_Next As Integer 'magazzina u prossimu valore. di a sequenza Dim iStep As Integer 'magazzina a dimensione di u prossimu incrementu' inizializza variabili i è iFib_Next i = 1 iFib_Next = 0 'Do While loop sarà eseguitu finu à chì u valore di u numeru di Fibonacci attuale hè più grande di 1000 Do Mentre iFib_Next < 1000 If i = 1 Allora "casu speciale per u primu elementu iStep = 1 iFib = 0 Else "salvate a dimensione di u prossimu incrementu prima di sovrascrive" u valore attuale di a sequenza iStep = iFib iFib = iFib_Next End If "imprime u numeru attuale di Fibonacci in a colonna A di u fogliu di travagliu attivu 'in a fila cù l'indice i Cells (i , 1).Value = iFib 'calculate u prossimu numeru di Fibonacci è incremente l'indice di pusizione di l'elementu da 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

In l'esempiu datu, a cundizione iFib_Next < 1000 verificatu à u principiu di u ciclu. Dunque, se u primu valore iFib_Next S'ellu ci era più di 1000, u ciclu ùn saria mai eseguitu.

Un altru modu di implementà un ciclu Fate mentre - mette a cundizione micca à u principiu, ma à a fine di u ciclu. In questu casu, u ciclu serà eseguitu almenu una volta, indipendentemente da se a cundizione hè cumpresa.

Schematically, un tali ciclu Fate mentre cù a cundizione per esse verificata à a fine sarà cusì:

Fate ... Loop While iFib_Next < 1000

Цикл «Fà finu à» in Visual Basic

Ciculu Fate Finu à assai simili à u ciclu Fate mentre: u bloccu di codice in u corpu di u ciclu hè eseguitu una volta è una volta finu à chì a cundizione specificata hè cumpleta (u risultatu di l'espressione cundizionale hè True). In a prucedura dopu Sub usendu un ciclu Fate Finu à ritruvà i valori da tutte e cellule in una colonna A worksheet finu à chì a colonna scontra una cellula viota:

iRow = 1 Do Until IsEmpty (Cells (iRow, 1)) 'U valore di a cellula attuale hè almacenatu in l'array dCellValues ​​​​dCellValues(iRow) = Cells (iRow, 1).Value iRow = iRow + 1 Loop

In l'esempiu sopra, a cundizione IsEmpty(Celle (iRow, 1)) situatu à u principiu di a struttura Fate Finu à, cusì u ciclu serà eseguitu almenu una volta se a prima cellula pigliata ùn hè micca viota.

Tuttavia, cum'è mostra in l'esempii di loop Fate mentre, in certi situazioni hè necessariu chì u ciclu sia eseguitu almenu una volta, indipendentemente da u risultatu iniziale di l'espressione cundizionale. In questu casu, l'espressione cundizionale deve esse piazzata à a fine di u ciclu, cusì:

Fate ... Ciclu finu à chì hè vacu (Celle (iRow, 1))

Lascia un Audiolibro