Denna handledning visar dig exempel på hur du använder For each loop i VBA. Klicka här för att lära dig mer om slingor i allmänhet.
För varje slinga
Med För varje slinga kan du gå igenom varje objekt i en samling:
- Alla celler i ett område
- Alla kalkylblad i en arbetsbok
- Alla öppna arbetsböcker
- Alla former i ett kalkylblad
- Alla objekt i en array
- och mer!
För var och en: Grundläggande exempel
Dessa exempel kommer att visa hur du ställer in För varje slingor att gå igenom olika typer av objekt.
Loop Through Cells
Denna procedur går igenom varje cell i intervallet A1: A10 och ställer in cellen till att vara rätt lika med sig själv.
12345678 | Sub ForEachCell ()Dim Cell As RangeFör varje cell i ark ("Ark1"). Område ("A1: A10")Cell.Offset (0, 1) .värde = Cell.värdeNästa cellAvsluta Sub |
Loop Through Sheets
Den här proceduren går igenom varje ark i en arbetsbok, vilket gör att varje ark inte visas.
12345678 | Sub ForEachSheets ()Dim ws Som arbetsbladFör varje ws i bladws.Visible = TrueNästa bladAvsluta Sub |
Loop Through Workbooks
Denna procedur går igenom varje arbetsbok och stänger var och en.
12345678 | Sub ForEachWorkbooks ()Dim wb Som arbetsbokFör varje wb i arbetsböckerwb.StängNästa wbAvsluta Sub |
Loop Through Shapes
Denna procedur går igenom varje form i Sheet1 och raderar var och en.
12345678 | Sub ForEachShape ()Dim Shp som formFör varje inmatningsark ("Sheet1"). FormerShp.DeleteNästa ShpAvsluta Sub |
Loop Through Charts
Denna procedur går igenom varje diagram i Sheet1 och raderar varje.
12345678 | Sub ForEachCharts ()Dim cht As ChartObjectFör varje cht i Sheets ("Sheet1"). ChartObjectscht.DeleteNästa kapAvsluta Sub |
Loop Through PivotTables
Denna procedur går igenom varje pivottabell i Sheet1 och rensar var och en
12345678 | Sub ForEachPivotTables ()Dim pvt som pivottabellFör varje pvt i Sheets ("Sheet1"). Pivottabellerpvt.ClearTableNästa pvtAvsluta Sub |
Loop Through Tabeller
Denna procedur går igenom varje tabell i Sheet1 och raderar varje tabell.
12345678 | Sub ForEachTables ()Dim tbl Som ListObjectFör varje tbl i Sheets ("Sheet1"). ListObjectstbl.RaderaNästa tblAvsluta Sub |
Loop Through Items in Array
Denna procedur går igenom varje objekt i en matris, visar varje värde i en msgbox,
12345678910 | Sub ForEachItemInArray ()Dim arrVärde som variantDim objekt som variantarrValue = Array ("Artikel 1", "Artikel 2", "Artikel 3")För varje artikel i arrValueMsgBox ArtikelNästa artikelAvsluta Sub |
Loop Through Numbers
Denna procedur går igenom varje nummer i en matris, visar varje värde i en msgbox,
12345678910111213 | Sub ForEachNumberInNumbers ()Dim arrNumber (1 till 3) som heltalDim num Som variantarrNumber (1) = 10arrNumber (2) = 20arrNumber (3) = 30För varje nummer i arrNumberMsgbox -nummerNästa nummerAvsluta Sub |
För varje loop -byggare
Exemplen i denna artikel byggdes med Loop Builder i vår VBA-tillägg: AutoMacro.
De Loop Builder gör det mycket enkelt att generera kod för att gå igenom objekt. AutoMacro innehåller också många andra Kodgeneratorer, en omfattande Kodbibliotekoch kraftfull Kodningsverktyg.
För varje - Om
Du kan också använda If -satser inom loopar för att testa om objekt uppfyller vissa kriterier, bara utföra åtgärder på de objekt som uppfyller kriterierna. Här är ett exempel på att gå igenom varje cell i ett intervall:
För varje cell i intervallet - If
1234567891011121314 | Sub If_Loop ()Dim Cell som intervallFör varje cell i intervallet ("A2: A6")Om Cell.Value> 0 DåCell.Offset (0, 1) .Value = "Positive"ElseIf Cell.Value <0 SedanCell.Offset (0, 1) .Value = "Negativt"AnnanCell.Offset (0, 1) .Value = "Noll"Avsluta omNästa cellAvsluta Sub |
För varje vanligt exempel
Stäng alla arbetsböcker
Denna procedur stänger alla öppna arbetsböcker och sparar ändringar.
123456789 | Sub CloseAllWorkbooks ()Dim wb Som arbetsbokFör varje wb i arbetsböckerwb.Close SaveChanges: = TrueNästa wbAvsluta Sub |
Dölj alla ark
Denna procedur döljer alla kalkylblad.
12345678 | Sub HideAllSheets ()Dim ws Som arbetsbladFör varje ws i bladws.Visible = xlSheetHiddenNästa wsAvsluta Sub |
Ta bort alla blad
Denna procedur visar alla kalkylblad.
12345678 | Sub UnhideAllSheets ()Dim ws Som arbetsbladFör varje ws i bladws.Visible = xlSheetVisibleNästa wsAvsluta Sub |
Skydda alla ark
Denna procedur skyddar alla kalkylblad.
12345678 | Sub ProtectAllSheets ()Dim ws Som arbetsbladFör varje ws i bladws.Protect Password: = "…"Nästa wsAvsluta Sub |
Skydda alla blad
Denna procedur avskyddar alla kalkylblad.
12345678 | Sub UnprotectAllSheets ()Dim ws Som arbetsbladFör varje ws i bladws.Unprotect Password: = "…"Nästa wsAvsluta Sub |
Ta bort alla former på alla kalkylblad
Denna procedur tar bort alla former i en arbetsbok.
123456789101112 | Sub DeleteAllShapesOnAllWorksheets ()Dimma blad som arbetsbladDim Shp som formFör varje ws i bladFör varje Shp In ws.ShapesShp.DeleteNästa ShpNästa wsAvsluta Sub |
Uppdatera alla pivottabeller
Denna procedur uppdaterar alla pivottabeller på ett ark.
12345678 | Sub RefreshAllPivotTables ()Dim pvt som pivottabellFör varje pvt i Sheets ("Sheet1"). Pivottabellerpvt.RefreshTableNästa pvtAvsluta Sub |
Använda för var och en i Access VBA
För varje slinga fungerar på samma sätt i Access VBA som i Excel VBA. I följande exempel kommer alla tabeller i den aktuella databasen att tas bort.
123456789 | Sub RemoveAllTables ()Dim tdf As TableDefDim dbs som databasStäll in dbs = CurrentDbFör varje tdf i dbs.TableDefsDoCmd.DeleteObject tdf.NameSlingaStäll in dbs = ingentingAvsluta Sub |