Dieses Tutorial zeigt Ihnen Beispiele für die Verwendung der For Each Loop in VBA. Klicken Sie hier, um mehr über Schleifen im Allgemeinen zu erfahren.
Für jede Schleife
Mit For Each Loop können Sie durchschleifen jede einzelne Objekt in einer Sammlung:
- Alle Zellen in einem Bereich
- Alle Arbeitsblätter in einer Arbeitsmappe
- Alle geöffneten Arbeitsmappen
- Alle Formen in einem Arbeitsblatt
- Alle Elemente in einem Array
- und mehr!
Für jeden: Grundlegende Beispiele
Diese Beispiele zeigen, wie Sie For Each-Schleifen einrichten, um verschiedene Objekttypen zu durchlaufen.
Zellen durchschleifen
Dieses Verfahren durchläuft jede Zelle im Bereich A1: A10 und setzt die Zelle rechts auf sich selbst.
12345678 | Unter ForEachCell()Zelle als Bereich dimmenFür jede Zelle in Sheets("Sheet1").Range("A1:A10")Cell.Offset(0, 1).value = Cell.valueNächste ZelleEnd Sub |
Blätter durchschleifen
Dieses Verfahren durchläuft jedes Blatt in einer Arbeitsmappe und blendet jedes Blatt ein.
12345678 | Unter ForEachSheets()Dim ws als ArbeitsblattFür jedes ws in Sheetsws.Visible = TrueNächstes BlattEnd Sub |
Durchlaufen von Arbeitsmappen
Dieses Verfahren durchläuft jede Arbeitsmappe und schließt jede.
12345678 | Unter ForEachWorkbooks()Dim wb als ArbeitsmappeFür jedes wb in Arbeitsmappenwb.SchließenNächstes wbEnd Sub |
Formen durchschleifen
Dieses Verfahren durchläuft jede Form in Sheet1 und löscht jede.
12345678 | Sub ForEachShape()Shp als Form dimmenFür jede Shp in Sheets("Sheet1").ShapesShp.LöschenNächster ShpEnd Sub |
Diagramme durchschleifen
Dieses Verfahren durchläuft jedes Diagramm in Sheet1 und löscht jedes.
12345678 | Sub ForEachCharts()Dim cht As ChartObjectFor Each cht In Sheets("Sheet1").ChartObjectscht.LöschenNächste chtEnd Sub |
Durchlaufen von PivotTables
Dieses Verfahren durchläuft jede PivotTable in Sheet1 und löscht jede einzelne
12345678 | Unter ForEachPivotTables()pvt als PivotTable dimmenFür jedes pvt In Sheets("Sheet1").PivotTablespvt.ClearTableNächstes PVTEnd Sub |
Tabellen durchschleifen
Dieses Verfahren durchläuft jede Tabelle in Sheet1 und löscht jede einzelne.
12345678 | Unter ForEachTables()Dim tbl As ListObjectFor Each tbl In Sheets("Sheet1").ListObjectstbl.LöschenNächstes tblEnd Sub |
Durchlaufen von Elementen im Array
Dieses Verfahren durchläuft jedes Element in einem Array, zeigt jeden Wert in einer Msgbox an,
12345678910 | Unter ForEachItemInArray()Dim arrValue als VarianteArtikel als Variante dimmenarrValue = Array("Element 1", "Element 2", "Element 3")Für jeden Artikel in arrValueMsgBox-ElementNächstes ObjektEnd Sub |
Zahlen durchschleifen
Dieses Verfahren durchläuft jede Zahl in einem Array, zeigt jeden Wert in einer Msgbox an,
12345678910111213 | Unter ForEachNumberInNumbers()Dim arrNumber(1 To 3) As IntegerDim num Als VariantearrNummer(1) = 10arrNummer(2) = 20arrNummer(3) = 30Für jede Zahl In arrNumberMsgbox-NummerNächste NummerEnd Sub |
Für jeden Loop Builder
Die Beispiele in diesem Artikel wurden mit dem Loop-Builder in unserer VBA-Add-In: AutoMacro.
Die Loop-Builder macht es sehr einfach, Code zum Durchlaufen von Objekten zu generieren. AutoMakro enthält auch viele andere Code-Generatoren, ein umfangreicher Codebibliothek, und mächtig Codierungstools.
Für jeden - Wenn
Sie können auch If-Anweisungen innerhalb von Schleifen verwenden, um zu testen, ob Objekte bestimmte Kriterien erfüllen, und nur Aktionen an den Objekten ausführen, die die Kriterien erfüllen. Hier ist ein Beispiel für das Durchlaufen jeder Zelle in einem Bereich:
Für jede Zelle im Bereich - Wenn
1234567891011121314 | Unter If_Loop()Zelle als Bereich dimmenFür jede Zelle im Bereich ("A2: A6")Wenn Cell.Value > 0 ThenCell.Offset(0, 1).Value = "Positive"ElseIf Cell.Value < 0 ThenCell.Offset(0, 1).Value = "Negativ"AndersCell.Offset(0, 1).Value = "Null"Ende WennNächste ZelleEnd Sub |
Für jedes gängige Beispiel
Alle Arbeitsmappen schließen
Dieses Verfahren schließt alle geöffneten Arbeitsmappen und speichert die Änderungen.
123456789 | Unter CloseAllWorkbooks()Dim wb als ArbeitsmappeFür jedes wb in Arbeitsmappenwb.Close SaveChanges:=TrueNächstes wbEnd Sub |
Alle Blätter ausblenden
Dieses Verfahren blendet alle Arbeitsblätter aus.
12345678 | Unter HideAllSheets()Dim ws als ArbeitsblattFür jedes ws in Sheetsws.Visible = xlSheetHiddenNächstes wsEnd Sub |
Alle Blätter einblenden
Dieses Verfahren blendet alle Arbeitsblätter ein.
12345678 | Unter UnhideAllSheets()Dim ws als ArbeitsblattFür jedes ws in Sheetsws.Visible = xlSheetVisibleNächstes wsEnd Sub |
Alle Blätter schützen
Dieses Verfahren schützt alle Arbeitsblätter.
12345678 | Unter ProtectAllSheets()Dim ws als ArbeitsblattFür jedes ws in Sheetsws.Protect-Passwort:="… "Nächstes wsEnd Sub |
Schutz aller Blätter aufheben
Durch dieses Verfahren wird der Schutz aller Arbeitsblätter aufgehoben.
12345678 | Unter UnprotectAllSheets()Dim ws als ArbeitsblattFür jedes ws in Sheetsws.Passwort aufheben:="… "Nächstes wsEnd Sub |
Alle Formen auf allen Arbeitsblättern löschen
Dieses Verfahren löscht alle Formen in einer Arbeitsmappe.
123456789101112 | Unter DeleteAllShapesOnAllWorksheets()Dim Sheet als ArbeitsblattShp als Form dimmenFür jedes ws in SheetsFür jede Shp in ws.ShapesShp.LöschenNächster ShpNächstes wsEnd Sub |
Alle PivotTables aktualisieren
Dieses Verfahren aktualisiert alle PivotTables auf einem Blatt.
12345678 | Unter RefreshAllPivotTables()pvt als PivotTable dimmenFür jedes pvt In Sheets("Sheet1").PivotTablespvt.RefreshTableNächstes PVTEnd Sub |
Verwenden von For Each in Access VBA
Die For Each-Schleife funktioniert in Access VBA genauso wie in Excel VBA. Im folgenden Beispiel werden alle Tabellen in der aktuellen Datenbank entfernt.
123456789 | Unter RemoveAllTables()Dim tdf As TableDefDim dbs als DatenbankSetze dbs = CurrentDbFür jede tdf in dbs.TableDefsDoCmd.DeleteObject tdf.NameSchleifeSetze dbs = NichtsEnd Sub |