Bucles en VBA

Hi ha situacions en què cal que un programa VBA realitzi el mateix conjunt d'accions diverses vegades seguides (és a dir, repetir el mateix bloc de codi diverses vegades). Això es pot fer mitjançant bucles VBA.

Els bucles VBA inclouen:

A continuació, veurem amb més detall cadascun d'aquests cicles.

For Loop Operator a Visual Basic

L'estructura de l'operador de bucle El a Visual Basic es pot organitzar en una d'aquestes dues formes: com un bucle Per... A continuació o com a bucle Per cadascú.

Cicle "Per a... Següent"

cicle Per... A continuació utilitza una variable que pren seqüencialment valors d'un rang determinat. Amb cada canvi del valor de la variable, es realitzen les accions tancades al cos del cicle. Això és fàcil d'entendre a partir d'un exemple senzill:

Per i = 1 a 10 Total = Total + iArray(i) Següent i

En aquest bucle senzill Per... A continuació s'utilitza la variable i, que pren seqüencialment els valors 1, 2, 3, ... 10, i per a cadascun d'aquests valors s'executa el codi VBA dins del bucle. Per tant, aquest bucle suma els elements de la matriu. iArray en variable Total.

A l'exemple anterior, no s'especifica l'increment del bucle, per tant, per augmentar la variable i d'1 a 10, el valor predeterminat és un increment 1… No obstant això, en alguns casos és necessari utilitzar diferents valors d'increment per al bucle. Això es pot fer mitjançant la paraula clau Pascom es mostra a l'exemple senzill següent.

Per a d = 0 a 10 Pas 0.1 dTotal = dTotal + d Següent d

Com que a l'exemple anterior, el pas d'increment s'estableix igual a 0.1, després la variable dTotal per a cada repetició del cicle pren els valors 0.0, 0.1, 0.2, 0.3,... 9.9, 10.0.

Per determinar el pas del bucle a VBA, podeu utilitzar un valor negatiu, per exemple, com aquest:

Per i = 10 a 1 Pas -1 iArray(i) = i Següent i

Aquí està l'increment -1, doncs la variable i amb cada repetició del cicle pren els valors 10, 9, 8, … 1.

Bucle "Per a cadascú"

cicle Per cadascú semblant a un cicle Per... A continuació, però en lloc d'iterar sobre la seqüència de valors de la variable comptador, el bucle Per cadascú realitza un conjunt d'accions per a cada objecte del grup d'objectes especificat. A l'exemple següent, utilitzant un bucle Per cadascú enumera tots els fulls del llibre de treball d'Excel actual:

Dim wSheet com a full de treball per a cada wSheet als fulls de treball MsgBox "Найден лист: " & wSheet.Name Següent wSheet

Declaració d'interrupció de bucle "Exit For"

Operador Surt per utilitzat per interrompre el cicle. Tan bon punt es troba aquesta instrucció al codi, el programa finalitza l'execució del bucle i passa a l'execució de les sentències que es troben al codi immediatament després d'aquest bucle. Això es pot utilitzar, per exemple, per cercar un valor específic en una matriu. Per fer-ho, utilitzant un bucle, s'escaneja cada element de la matriu. Tan bon punt es trobi l'element necessari, no cal mirar la resta: el cicle s'interromp.

Aplicació d'operador Surt per demostrat en l'exemple següent. Aquí el bucle itera més de 100 entrades de matriu i compara cadascuna amb el valor de la variable dVal… Si es troba una coincidència, el bucle s'acaba:

Per a i = 1 a 100 Si dValues(i) = dVal Aleshores IndexVal = i Sortir per a Finalitzar Si Següent i

El bucle Do While a Visual Basic

cicle Fer mentre executa un bloc de codi sempre que es compleixi la condició especificada. El següent és un exemple de procediment Sub, en què s'utilitza el bucle Fer mentre Els nombres de Fibonacci que no superen 1000 es mostren seqüencialment:

'El subprocediment produeix nombres de Fibonacci que no superen els 1000. Sub Fibonacci() Dim i As Integer 'Comptador' per indicar la posició de l'element en la seqüència Dim iFib As Integer 'emmagatzema el valor actual de la seqüència Dim iFib_Next As Integer' emmagatzema el valor següent de la seqüència Dim iStep As Integer 'emmagatzema la mida del següent increment' inicialitza les variables i i iFib_Next i = 1 iFib_Next = 0 'Do While loop s'executarà fins que el valor del 'número actual de Fibonacci sigui superior a 1000 Do While iFib_Next < 1000 Si i = 1 Aleshores, "cas especial per al primer element iStep = 1 iFib = 0 En cas contrari, deseu la mida del següent increment abans de sobreescriure" el valor actual de la seqüència iStep = iFib iFib = iFib_Next End If "imprimiu el nombre de Fibonacci actual a la columna A de el full de treball actiu "a la fila amb l'índex i Cells (i , 1).Value = iFib "calculeu el següent nombre de Fibonacci i incrementeu l'índex de posició de l'element en 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

En l'exemple donat, la condició iFib_Next < 1000 comprovat al principi del bucle. Per tant, si el primer valor iFib_Següent Si n'hi hagués més de 1000, el bucle no s'executaria mai.

Una altra manera d'implementar un bucle Fer mentre - col·loqueu la condició no al principi, sinó al final del bucle. En aquest cas, el bucle s'executarà almenys una vegada, independentment de si es compleix la condició.

Esquemàticament, aquest cicle Fer mentre amb la condició que cal comprovar al final serà així:

Fes... Bucle mentre iFib_Next < 1000

Цикл «Fes fins a» a Visual Basic

cicle Fer fins molt semblant al cicle Fer mentre: el bloc de codi del cos del bucle s'executa una i altra vegada fins que es compleix la condició especificada (el resultat de l'expressió condicional és Veritable). En el següent tràmit Sub utilitzant un cicle Fer fins recuperar valors de totes les cel·les d'una columna A full de treball fins que la columna trobi una cel·la buida:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'El valor de la cel·la actual s'emmagatzema a la matriu dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Valor iRow = iRow + 1 bucle

A l'exemple anterior, la condició IsEmpty(Cèl·lules (iFila, 1)) situat a l'inici de l'estructura Fer fins, de manera que el bucle s'executarà almenys una vegada si la primera cel·la presa no està buida.

Tanmateix, com es mostra als exemples de bucle Fer mentre, en algunes situacions és necessari que el bucle s'executi almenys una vegada, independentment del resultat inicial de l'expressió condicional. En aquest cas, l'expressió condicional s'ha de col·locar al final del bucle, així:

Fes... Recorre fins que estigui buit(Cèl·lules(iFila, 1))

Deixa un comentari