Deze tutorial laat je voorbeelden zien van het gebruik van de For Each Loop in VBA. Klik hier voor meer informatie over loops in het algemeen.
Voor elke lus
Met de For Each Loop kun je doorlopen elk object in een verzameling:
- Alle cellen in een bereik
- Alle werkbladen in een werkmap
- Alle geopende werkmappen
- Alle vormen in een werkblad
- Alle items in een array
- en meer!
Voor elk: basisvoorbeelden
Deze voorbeelden laten zien hoe u For Each-lussen kunt instellen om door verschillende soorten objecten te lopen.
Loop door cellen
Deze procedure loopt door elke cel in het bereik A1:A10, waarbij de cel gelijk wordt ingesteld aan zichzelf.
12345678 | Sub VoorElkeCel()Dim cel als bereikVoor elke cel in bladen ("Blad1"). Bereik ("A1:A10")Cell.Offset(0, 1).value = Cell.valueVolgende celEinde sub |
Doorgeluste bladen
Deze procedure loopt door elk blad in een werkmap, waardoor elk blad zichtbaar wordt.
12345678 | Sub ForEachSheets()Dim ws als werkbladVoor elke ws in bladenws.Zichtbaar = TrueVolgende bladEinde sub |
Loop door werkmappen
Deze procedure loopt door elke werkmap en sluit elke.
12345678 | Sub VoorElke Werkboeken()Dim wb als werkboekVoor elke wb In Werkmappenwb.SluitenVolgende wbEinde sub |
Loop door vormen
Deze procedure loopt door elke vorm in Blad1, waarbij elke vorm wordt verwijderd.
12345678 | Sub voor elke vorm()Dim SHP als vormVoor elke shp in bladen ("Blad1"). VormenSp.VerwijderenVolgende ShpEinde sub |
Doorloop grafieken
Deze procedure doorloopt elk diagram in Blad1, waarbij elk diagram wordt verwijderd.
12345678 | Sub ForEachCharts()Dim cht As ChartObjectVoor elke cht In Sheets ("Blad1").ChartObjectscht.Verwijderenvolgende chtEinde sub |
Loop door draaitabellen
Deze procedure loopt door elke draaitabel in Blad1, waarbij ze allemaal worden gewist
12345678 | Sub ForEachPivotTables()Dim pvt als draaitabelVoor elke pvt in bladen ("Blad1"). Draaitabellenpvt.ClearTablevolgende pvtEinde sub |
Doorloop tabellen
Deze procedure doorloopt elke tabel in Blad1, waarbij elke wordt verwijderd.
12345678 | Sub ForEachTables()Dim tbl As ListObjectVoor elke tbl In Spreadsheets ("Blad1").ListObjectstbl.Verwijderenvolgende tblEinde sub |
Doorloop items in array
Deze procedure doorloopt elk item in een array, geeft elke waarde weer in een msgbox,
12345678910 | Sub ForEachItemInArray()Dim arrValue As VariantDim item als variantarrValue = Array ("Artikel 1", "Artikel 2", "Artikel 3")Voor elk item in arrValueMsgBox-itemVolgende itemEinde sub |
Doorgeluste nummers
Deze procedure doorloopt elk nummer in een array, geeft elke waarde weer in een msgbox,
12345678910111213 | Sub ForEachNumberInNumbers()Dim arrNumber (1 tot 3) als geheel getalDim num als variantarrNummer(1) = 10arrGetal (2) = 20arrNummer (3) = 30Voor elk nummer In arrNumberMsgbox NumVolgende nummerEinde sub |
Voor elke Loop Builder
De voorbeelden in dit artikel zijn gebouwd met de Loop Builder in onze VBA-invoegtoepassing: AutoMacro.
De Loop Builder maakt het heel eenvoudig om code te genereren om door objecten te lopen. Automacro bevat ook vele andere Codegeneratoren, een uitgebreide Codebibliotheeken krachtig Coderingstools.
Voor elk - Als
U kunt ook If-statements binnen Loops gebruiken om te testen of objecten aan bepaalde criteria voldoen, en alleen acties uitvoeren op die objecten die aan de criteria voldoen. Hier is een voorbeeld van het doorlopen van elke cel in een bereik:
Voor elke cel binnen bereik - Als
1234567891011121314 | Sub If_Loop()Dim Cell als bereikVoor elke cel binnen bereik ("A2:A6")Als Cell.Value > 0 DanCell.Offset(0, 1).Waarde = "Positief"ElseIf Cell.Waarde < 0 DanCell.Offset(0, 1).Waarde = "Negatief"AndersCell.Offset(0, 1).Waarde = "Nul"Stop alsVolgende celEinde sub |
Voor elk veelvoorkomend voorbeeld
Sluit alle werkmappen
Met deze procedure worden alle geopende werkmappen gesloten en worden wijzigingen opgeslagen.
123456789 | Sub SluitenAlleWerkboeken()Dim wb als werkboekVoor elke wb In Werkmappenwb.Close SaveChanges:=TrueVolgende wbEinde sub |
Alle bladen verbergen
Met deze procedure worden alle werkbladen verborgen.
12345678 | SubHideAllSheets()Dim ws als werkbladVoor elke ws in bladenws.Visible = xlSheetHiddenVolgende wsEinde sub |
Alle bladen zichtbaar maken
Met deze procedure worden alle werkbladen zichtbaar.
12345678 | Sub UnhideAllSheets()Dim ws als werkbladVoor elke ws in bladenws.Visible = xlSheetVisibleVolgende wsEinde sub |
Bescherm alle bladen
Deze procedure beschermt alle werkbladen.
12345678 | Sub ProtectAllSheets()Dim ws als werkbladVoor elke ws in bladenws.Bescherm wachtwoord:="… "Volgende wsEinde sub |
Beveiliging van alle bladen opheffen
Met deze procedure wordt de beveiliging van alle werkbladen opgeheven.
12345678 | Sub BeschermAlle Bladen()Dim ws als werkbladVoor elke ws in bladenws.Unprotect Wachtwoord:="… "Volgende wsEinde sub |
Alle vormen op alle werkbladen verwijderen
Met deze procedure worden alle vormen in een werkmap verwijderd.
123456789101112 | Sub DeleteAllShapesOnAllWorksheets()Gedimd blad als werkbladDim SHP als vormVoor elke ws in bladenVoor elke Shp In ws.ShapesSp.VerwijderenVolgende ShpVolgende wsEinde sub |
Alle draaitabellen vernieuwen
Met deze procedure worden alle draaitabellen op een blad vernieuwd.
12345678 | Sub RefreshAllPivotTables()Dim pvt als draaitabelVoor elke pvt in bladen ("Blad1"). Draaitabellenpvt.RefreshTablevolgende pvtEinde sub |
Voor elk gebruiken in Access VBA
De For Each-lus werkt in Access VBA op dezelfde manier als in Excel VBA. In het volgende voorbeeld worden alle tabellen in de huidige database verwijderd.
123456789 | Sub VerwijderAlleTables()Dim tdf As TableDefDim dbs als databaseStel dbs = CurrentDb inVoor elke tdf in dbs.TableDefsDoCmd.DeleteObject tdf.NameLusStel dbs = Niets inEinde sub |