Vba for loop (voor volgende, voor elke)
Belangrijkste punten
- VBA For-lussen zijn vaste lustypen.
- Het is niet mogelijk om een van deze loops te gebruiken bij het opnemen van een macro .
Voor de volgende lus
VBA FOR NEXT is een vaste lus die een teller gebruikt om iteraties uit te voeren. Simpel gezegd: u moet het aantal keren opgeven dat u de lus wilt uitvoeren, en zodra dat aantal lussen is bereikt, stopt deze automatisch. Daarom is het een vaste lus en het populairst onder VBA-ontwikkelaars.
Syntaxis
Hier is de syntaxis van de VBA For Next-lus:
For counter = Start To End [Step stepsize] [statements] Next [counter]
- Teller : Het is een variabele die het aantal herhalingen opslaat en de waarde ervan bij elke herhaling verhoogt. Als de lus zich bijvoorbeeld in de vijfde iteratie bevindt, zal de tellerwaarde vijf zijn, en zodra de lus de instructie voor de vijfde iteratie uitvoert, verandert de tellerwaarde naar zes.
- Start : Het is een numerieke variabele die de startwaarde van de teller opslaat.
- Einde : Het is een numerieke variabele die de uiteindelijke waarde van de teller opslaat.
- Stapgrootte : Deze variabele specificeert een grote toename of afname van de tellerwaarde. Standaard is de stapgrootte één, maar u kunt ook elke positieve of negatieve waarde gebruiken.
- Verklaring : Dit is een set code die u wilt uitvoeren bij elke iteratie van de For Next-lus.
- Volgende : Dit is de eindinstructie voor een iteratie van de lus en gebruikt de tellerwaarde om VBA te vertellen de lus te herhalen en zodra de teller de eindwaarde bereikt, beëindigt hij de lus.
Voorbeeld om te begrijpen voor de volgende lus
Laten we, om te begrijpen hoe we het voor de volgende lus kunnen gebruiken, een eenvoudige code schrijven om serienummers in een kolom toe te voegen.
Laat me er wat dieper op ingaan: we moeten een code schrijven die één voor één van de geselecteerde cel naar de volgende tien cellen kan gaan en alleen serienummers kunnen toevoegen in de onderstaande momentopname.
Om For Next Loop te gebruiken, kun je de volgende stappen volgen:
- Eerst moet u een variabele declareren die u kunt gebruiken om de tellerwaarde op te slaan.
- Vervolgens moeten we de tellerwaarde aan de variabele toewijzen.
- Nu is het tijd om code voor de lus te schrijven, dus in de eerste regel moet je de countervariabele gebruiken en de begin- en eindwaarden instellen. Hier in deze code heb je variabele ‘i’ als eindwaarde.
- Van daaruit moet u code schrijven die de serienummers aan de actieve cel kan toevoegen en vervolgens naar de volgende cel kan gaan. Naarmate de tellerwaarde bij elke iteratie toeneemt, kunt u deze gebruiken om het serienummer in de actieve cel in te voeren en daarna kunt u de shift gebruiken om de selectie naar de volgende cel naar beneden te verplaatsen.
- Gebruik aan het einde het volgende sleutelwoord en de countervariabele om de luscode te voltooien.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
Je kunt in de onderstaande momentopname zien dat wanneer ik deze code uitvoer, deze begint bij de geselecteerde cel door een serienummer in te voeren en vervolgens in elke iteratie naar de volgende cel gaat.
Zoals je weet is For Next een vaste lus en als je in deze code een numerieke waarde toewijst, vertelt het VBA om de lus dat aantal keren uit te voeren.
En je kunt de onderstaande momentopname zien die ik heb gemaakt in de tweede iteratie van de lus, waarbij de waarde van de tegenvariabele “i” twee is.
Het punt dat ik probeer te maken is dat de telvariabele bij elke iteratie zijn waarde verandert en die waarde in de actieve cel invoert, waarna door verschuiven de volgende cel naar beneden wordt geactiveerd, waardoor een iteratie wordt voltooid.
Uiteindelijk is het trefwoord “Volgende” VBA om terug te keren naar de eerste regel van de lus en deze te herhalen. Zoals je in de For Next-syntaxis hebt gezien, kun je ook een stapwaarde in de lus gebruiken om de teller op basis daarvan te laten werken.
Dus als u twee als stapwaarde gebruikt, ziet de code er als volgt uit.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i Step 2 ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
En wanneer u deze code uitvoert, zal er bij de activiteit zoiets zijn als de onderstaande momentopname.
Wanneer u een stapwaarde gebruikt (zoals stap 2, die u in de bovenstaande code hebt gebruikt), negeert VBA elke tweede iteratie in de lus, en zoals u kunt zien, heeft u vijf getallen met een verschil van één in elk getal.
Opmerking : in het bovenstaande voorbeeld heeft u ‘i’ als tellervariabele gebruikt, maar u kunt naar eigen inzicht ook een andere naam gebruiken.
Voor elke volgende lus
VBA FOR EACH NEXT is een vaste lus die door alle objecten in een verzameling kan lopen. In For Each Next hoeft u het aantal iteraties niet op te geven. In plaats daarvan kunt u een verzameling objecten opgeven, waarna deze al deze objecten één voor één kan doorlopen.
Bijvoorbeeld : als u door alle cellen in een bereik wilt bladeren. In dit geval is het bereik de verzameling en zijn de cellen de objecten die je hebt.
Syntaxis
Hier is de VBA-syntaxis voor elke volgende lus:
For Each Object In Collection [statements] Next [object]
- Object : Het vertegenwoordigt het enige object in de objectverzameling waar u doorheen loopt. Bij elke iteratie gaat het van het ene object naar het andere.
- Verzameling : dit is een verzameling objecten waar u doorheen wilt lopen.
- Verklaring : Regel(s) code die u in elke lus door alle objecten in de verzameling wilt laten lopen.
- Volgende : Dit is de eindinstructie van een iteratie van de lus en vertelt VBA om naar het volgende object in de verzameling te gaan.
Voorbeeld om de For Each Next-lus te begrijpen
Om de For Each Next-lus te begrijpen, gaan we code schrijven om alle werkbladen behalve het actieve werkblad te verbergen. Deze code controleert de naam van elk werkblad en vergelijkt deze met de naam van het actieve werkblad en verbergt deze als deze niet overeenkomt.
Om de For Each Next-lus te gebruiken, kunt u de volgende stappen volgen:
- Eerst moet u een variabele declareren die u als werkblad wilt gebruiken.
- Gebruik daarna het trefwoord “For Each”, vervolgens de variabele “mySheet” voor het blad en gebruik “ActiveWorkbook.Worksheets” voor de werkbladverzameling van de actieve werkmap.
- Vervolgens moet u de VBA IF-instructie gebruiken om te testen of de naam van het blad dat zich momenteel in deze lus-iteratie bevindt NIET GELIJK is aan het actieve werkblad, en als deze voorwaarde waar is, verberg dan het blad dat zich nu in de lus bevindt iteratie.
- Uiteindelijk heb je het trefwoord NEXT en “mySheet” de variabele om de luscode te voltooien.
Laatste code:
Sub Hide_Other_Sheets() Dim mySheet As Worksheet For Each mySheet In ActiveWorkbook.Worksheets If mySheet.Name <> ActiveSheet.Name Then mySheet.Visible = False End If Next mySheet End Sub
Wanneer u deze code uitvoert , doorloopt deze elk werkblad in de actieve werkmap en koppelt de naam aan het actieve werkblad. Als de naam van het werkblad niet overeenkomt met de naam van het actieve werkblad, gebeurt dit ook. masker.
Op deze manier worden alle werkbladen verborgen.