Excel VBA Loops – For Hver, For Neste, Gjør Mens, Nestet Og Mer
for å jobbe effektivt I VBA, må du forstå Sløyfer.
Looper lar deg gjenta en kodeblokk et bestemt antall ganger eller gjenta en kodeblokk på et hvert objekt i et sett med objekter.
Først vil Vi vise deg noen eksempler for å vise deg hvilke løkker som er i stand til. Da vil vi lære deg alt om looper.
Vba Loop Quick Eksempler
for Hver Looper
for Hver Looper sløyfe gjennom hvert objekt i en samling, for eksempel hvert regneark i arbeidsboken eller hver celle i et område.
Loop gjennom Alle Regneark I Arbeidsboken
denne koden vil sløyfe gjennom alle regneark i arbeidsboken, unhiding hvert ark:
1
2
3
4
6
7
8
|
Loop Gjennom Alle Celler I Området
denne koden vil sløyfe gjennom en rekke celler, testing hvis celleverdien er negativ, positiv eller null:
for neste sløyfe
en annen Type «for» Sløyfe Er For Neste sløyfe. For Neste Sløyfe lar deg sløyfe gjennom heltall.
denne koden vil gå gjennom heltall 1 til 10, og vise hver med en meldingsboks:
1
2
3
4
6
|
gjør mens sløyfer vil sløyfe mens betingelsen er oppfylt. Denne koden vil også sløyfe gjennom heltall 1 til 10, som viser hver med en meldingsboks.
1
2
3
4
6
7
8
sub dowhileloop ()
dim n som heltall
/div>
n = 1
gjør mens n < 11
msgbox n
n = n + 1
sløyfe
end sub
gjør til sløyfer
omvendt, Gjør Til Sløyfer vil sløyfe til en tilstand er oppfylt. Denne koden gjør det samme som de to foregående eksemplene.
1
2
3
4
6
7
8
sub dountilloop ()
dim n som heltall
/div>
n = 1
tilbake til n >= 10
msgbox n
n = n + 1
sløyfe
end sub
vi vil diskutere dette nedenfor, men du må være ekstremt forsiktig når du lager Gjør Mens Eller Gjør til sløyfer slik at du ikke lager en uendelig sløyfe.
VBA Loop Builder
Dette er et skjermbilde av «Loop Builder»fra Vår Premium Vba Add-in: AutoMacro. Loop Builder lar deg raskt og enkelt bygge løkker for å gå gjennom forskjellige objekter eller tall. Du kan utføre handlinger på hvert objekt og / eller velge bare objekter som oppfyller visse kriterier.tillegget inneholder også mange andre kodebyggere, et omfattende VBA-kodebibliotek og et utvalg kodeverktøy. Det er et must for ENHVER vba-utvikler.
Nå skal vi dekke de forskjellige typer løkker i dybden.
VBA For Neste Sløyfe
For Loop Syntaks
For Neste Sløyfe kan du gjenta en blokk med kode et angitt antall ganger. Syntaksen er:
1
2
3
4
5
For Counter = Start to End
Next
Where the items in brackets are optional.
- – Declares the counter variable. Required if Option Explicit is declared at the top of your module.
- Teller-en heltallvariabel som brukes til å telle
- Start – startverdien (Eks. 1)
- Slutt-sluttverdien (Ex. 10)
- – Lar deg telle hvert n heltall i stedet for hvert 1 heltall. Du kan også gå i omvendt med en negativ verdi (ex. Trinn -1) – / li >
- – koden som vil gjenta
- Neste-Avsluttende setning Til For Neste Sløyfe. Du kan inkludere Telleren eller ikke. Jeg anbefaler imidlertid sterkt å inkludere telleren, da det gjør koden enklere å lese.
Hvis det er forvirrende, ikke bekymre deg. Vi vil gjennomgå noen eksempler:
Telle til 10
denne koden teller til 10 ved hjelp Av En For-Neste Sløyfe:
1
2
3
4
6
7
8
sub foreach_countto10 ()
dim n som heltall
for n = 1 til 10
msgbox n
neste n
end sub
for loop trinn
telle til 10 – bare partall
dette kode vil telle til 10 bare telle partall:
1
2
3
4
6
7
8
sub foreach_countto10_even ()
dim n som heltall
for n = 2 til 10 trinn 2
msgbox n
neste n
end sub
legg merke til at vi la til «trinn 2». Dette forteller For Loop å «trinn» gjennom telleren med 2. Vi kan også bruke en negativ trinnverdi for å gå i revers:
For Loop Step – Inverse
Nedtelling fra 10
denne koden vil nedtelling fra 10:
1
2
3
4
6
7
8
sub foreach_countdown_inverse ()
dim n som heltall
for n = 10 til 1 trinn -1
msgbox n
neste n
msgbox «løft av»
end sub
slett Rader hvis Cellen Er Tom
jeg har oftest brukt et negativt trinn For-Loop for å sløyfe gjennom celleområder, slette rader som oppfyller visse kriterier. Hvis du sløyfe fra de øverste radene til de nederste radene, som du sletter rader du vil rote opp telleren.
dette eksemplet vil slette rader med tomme celler (starter fra nederste rad):
Nested For Loop
1
2
3
4
6
7
8
|
gjør til sløyfer
omvendt, Gjør Til Sløyfer vil sløyfe til en tilstand er oppfylt. Denne koden gjør det samme som de to foregående eksemplene.
1
2
3
4
6
7
8
|
vi vil diskutere dette nedenfor, men du må være ekstremt forsiktig når du lager Gjør Mens Eller Gjør til sløyfer slik at du ikke lager en uendelig sløyfe.
VBA Loop Builder
Dette er et skjermbilde av «Loop Builder»fra Vår Premium Vba Add-in: AutoMacro. Loop Builder lar deg raskt og enkelt bygge løkker for å gå gjennom forskjellige objekter eller tall. Du kan utføre handlinger på hvert objekt og / eller velge bare objekter som oppfyller visse kriterier.tillegget inneholder også mange andre kodebyggere, et omfattende VBA-kodebibliotek og et utvalg kodeverktøy. Det er et must for ENHVER vba-utvikler.
Nå skal vi dekke de forskjellige typer løkker i dybden.
VBA For Neste Sløyfe
For Loop Syntaks
For Neste Sløyfe kan du gjenta en blokk med kode et angitt antall ganger. Syntaksen er:
1
2
3
4
5
|
For Counter = Start to End
Next
|
Where the items in brackets are optional.
- – Declares the counter variable. Required if Option Explicit is declared at the top of your module.
- Teller-en heltallvariabel som brukes til å telle
- Start – startverdien (Eks. 1)
- Slutt-sluttverdien (Ex. 10)
- – Lar deg telle hvert n heltall i stedet for hvert 1 heltall. Du kan også gå i omvendt med en negativ verdi (ex. Trinn -1) – / li >
- – koden som vil gjenta
- Neste-Avsluttende setning Til For Neste Sløyfe. Du kan inkludere Telleren eller ikke. Jeg anbefaler imidlertid sterkt å inkludere telleren, da det gjør koden enklere å lese.
Hvis det er forvirrende, ikke bekymre deg. Vi vil gjennomgå noen eksempler:
Telle til 10
denne koden teller til 10 ved hjelp Av En For-Neste Sløyfe:
1
2
3
4
6
7
8
|
for loop trinn
telle til 10 – bare partall
dette kode vil telle til 10 bare telle partall:
1
2
3
4
6
7
8
sub foreach_countto10_even ()
dim n som heltall
for n = 2 til 10 trinn 2
msgbox n
neste n
end sub |
legg merke til at vi la til «trinn 2». Dette forteller For Loop å «trinn» gjennom telleren med 2. Vi kan også bruke en negativ trinnverdi for å gå i revers:
For Loop Step – Inverse
Nedtelling fra 10
denne koden vil nedtelling fra 10:
1
2
3
4
6
7
8
|
slett Rader hvis Cellen Er Tom
jeg har oftest brukt et negativt trinn For-Loop for å sløyfe gjennom celleområder, slette rader som oppfyller visse kriterier. Hvis du sløyfe fra de øverste radene til de nederste radene, som du sletter rader du vil rote opp telleren.
dette eksemplet vil slette rader med tomme celler (starter fra nederste rad):
Du Kan «nest» en For Loop inne i en Annen For Loop. Vi vil bruke Nestet For Løkker for å lage et multiplikasjonstabell:
1
2
3
4
5
6
7
8
9
10
11
|
exit for
exit for setningen lar deg avslutte a for neste sløyfe umiddelbart.
Du vil vanligvis bruke Exit for Sammen Med En If-Setning, avslutter For Neste Loop hvis en bestemt betingelse er oppfylt.
du kan for eksempel bruke En For Loop for å finne en celle. Når den cellen er funnet, kan du gå ut av løkken for å øke hastigheten på koden din.
denne koden vil gå gjennom rader 1 til 1000, på jakt etter «feil» i kolonne A. hvis den er funnet, vil koden velge cellen, varsle deg om den funnet feilen og avslutte sløyfen:
Viktig: I Tilfelle Nestet For Løkker, Avslutt For bare avslutter strømmen for Sløyfe, ikke alle aktive Sløyfer.
Fortsett For
VBA har ikke kommandoen «Fortsett» som finnes I Visual Basic. I stedet må du bruke «Exit».
VBA for Hver Sløyfe
VBA For Hver Sløyfe vil sløyfe gjennom alle objekter i en samling:
Du kan også Bruke Nestet for Hver Løkke til:
- Alle celler i et område på alle regneark
- Alle figurer på alle regneark
- alle ark i alle åpne arbeidsbøker
- og så videre…
syntaksen er:
1
2
3
|
For Each Object in Collection
Next
|
Where:
For Each Cell in Range
This code will loop through each cell in a range:
For Each Worksheet in Workbook
This code will loop through all worksheets in a workbook, unprotecting each sheet:
1
2
3
4
5
6
7
8
9
|
Sub ForEachSheet_inWorkbook()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Unprotect «passord»
Neste ws
End Sub
|
For Hver Åpen Arbeidsbok
denne koden vil lagre og lukke alle åpne arbeidsbøker:
1
2
3
4
6
7
8
|
For Hver Figur I Regnearket
denne koden vil slette alle figurer i det aktive arket.
1
2
3
4
6
7
8
|
For Hver figur i hvert regneark i arbeidsboken
du kan også neste for hver løkke. Her vil vi gå gjennom alle former i alle regneark i den aktive arbeidsboken:
1
2
3
4
5
6
7
8
9
10
11
|
For Hver – HVIS Sløyfe
som vi har nevnt før, kan du bruke En If-setning i en loop, utfører handlinger bare hvis visse kriterier Er Oppfylt.
denne koden vil skjule alle tomme rader i et område:
VBA Do While Loop
VBA Do While And Do Until (se neste avsnitt) er svært like. De vil gjenta en sløyfe mens (eller til) en betingelse er oppfylt.
Do While Loop vil gjenta en sløyfe mens en betingelse er oppfylt.
Her Er Gjøre Mens Syntaks:
1
2
3
|
hvor:
- tilstand – betingelsen for å teste
- – kodeblokken for å gjenta
du kan også sette opp en do while loop med tilstanden på slutten av sløyfen:
1
2
3
|
Do
Loop While Condition
|
We will demo each one and show how they differ:
Do While
Here is the Do While loop example we demonstrated previously:
1
2
3
4
6
7
8
|
Loop Mens
la oss nå kjøre samme prosedyre, bortsett fra at vi vil flytte tilstanden til slutten av sløyfen:
1
2
3
4
6
7
8
|
vba gjør til sløyfe
tilbake til Loops vil gjenta en løkke til en viss tilstand er oppfylt. Syntaksen er i hovedsak Den Samme Som Do Mens looper:
1
2
|
og på samme måte kan tilstanden gå i starten eller slutten av løkken:
1
2
3
|
Do
Loop Until Condition
|
Do Until
This do Until loop will count to 10, like our previous examples
1
2
3
4
5
6
8
|
sløyfe til
denne sløyfen til løkken teller til 10:
1
2
3
4
6
7
8
|
1
|
Her Er Et Eksempel på exit do:
End eller break loop
Som vi nevnte ovenfor, kan du bruke exit for eller exit do for å avslutte sløyfer:
1
|
Exit For
|
1
|
Exit Do
|
However, these commands must be added to your code before you run løkken din.
hvis du prøver å «bryte» en sløyfe som kjører, kan du prøve Å trykke ESC ELLER CTRL + Pause Break på tastaturet. Dette kan imidlertid ikke fungere. Hvis det ikke virker, må du vente på at sløyfen slutter, eller i tilfelle en endeløs sløyfe, bruk CTRL + Alt + Delete for å tvinge lukk Excel.det er lettere å ved et uhell lage en endeløs sløyfe som tvinger Deg til å starte Excel på Nytt, og potensielt miste arbeidet ditt.
Flere Loop Eksempler
Loop Gjennom Rader
Dette vil sløyfe gjennom alle radene i en kolonne:
Loop Gjennom Kolonner
Dette vil sløyfe Gjennom alle kolonnene på rad:
Loop Gjennom Filer i En Mappe
This code will loop through all files in a folder, creating a list:
Loop Through Array
This code will loop Through A Folder array ‘arrlist’:
1
2
|
lbound-funksjonen får «nedre grense» av matrisen og ubound får «øvre grense».
Looper I Access VBA
de fleste eksemplene ovenfor vil også fungere I Access VBA. I Access går vi imidlertid gjennom Recordset-Objektet i stedet For Områdeobjektet.
1
2
3
4
5
6
7
8
9
10
11
12
13
14 /div>
15
16
17
18
|