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:

sub loopthroughsheets ()
dim ws som regneark
for hver ws i regneark
ws.Visible = True
End Sub

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:

underløype ()
dim jeg som heltall
for i = 1 til 10
msgbox i
neste i
end sub

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.

sub dowhileloop ()
dim n som heltall

/div>

n = 1
gjør mens n < 11
msgbox n
n = n + 1
sløyfe
end sub

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.

sub dountilloop ()
dim n som heltall

/div>

n = 1
tilbake til n >= 10
msgbox n
n = n + 1
sløyfe
end sub

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:

sub foreach_countto10 ()
dim n som heltall
for n = 1 til 10
msgbox n
neste n

end sub

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:

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
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):

Nested For Loop

Du Kan «nest» en For Loop inne i en Annen For Loop. Vi vil bruke Nestet For Løkker for å lage et multiplikasjonstabell:

sub nested_foreach_multiplicationtable ()
dim rad som heltall, col som heltall

for rad = 1 til 9
celler(rad + 1, col + 1).Verdi = rad * col
Neste col
End Sub
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:

  • alle regneark i en arbeidsbok
  • Alle figurer i et regneark
  • Alle åpne arbeidsbøker
  • 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:

    under foreachwb_inworkbooks ()

    dim wb som arbeidsbok
    for hver wb i arbeidsbøker
    wb.Lukk SaveChanges:= True
    Neste wb
    End Sub
    1
    2
    3
    4
    6
    7
    8

    For Hver Figur I Regnearket

    denne koden vil slette alle figurer i det aktive arket.

    under foreachshape ()
    dim shp som form
    for hver shp i activesheet.Figurer
    shp.Slett
    Neste shp

    End Sub
    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:

    dim shp som form, ws som regneark
    for hver ws i regneark
    for hver shp i ws.Figurer
    shp.Slett
    Neste shp
    End Sub

    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:

    gjør mens tilstanden
    sløyfe
    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:

    sub dowhileloop ()
    dim n som heltall

    /div>

    n = 1
    gjør mens n < 11
    msgbox n
    n = n + 1
    sløyfe
    end sub

    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:

    sub doloopwhile ()
    dim n som heltall

    /div>

    n = 1
    tilbake
    msgbox n
    n = n + 1
    sløyfe mens n < 11
    end sub
    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:

    gjør til tilstanden

    sløyfe

    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

    Sub DoUntilLoop ()
    Dim n som Heltall
    n = 1

    div>

    tilbake til n >10
    msgbox n
    sløyfe
    end sub

    1
    2
    3
    4
    5
    6
    8

    sløyfe til

    denne sløyfen til løkken teller til 10:

    sub doloopuntil ()
    dim n som heltall
    n = 1
    msgbox n
    n = n + 1
    sløyfe til n > 10
    end sub

    1
    2
    3
    4
    6
    7
    8

    avslutt

    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.

    sub loopthroughrecords ()
    på feil gjenoppta neste
    dim dbs som database

    div>

    dim rst som postsett
    sett dbs = currentdb
    Set rst = dbs.OpenRecordset(«tblClients», dbOpenDynaset)
    With rst
    .MoveLast
    .MoveFirst
    Do Until .EOF = True
    MsgBox (rst.Fields(«ClientName»))
    .MoveNext
    Loop
    End With
    rst.Close
    Set rst = Nothing
    Set dbs = Nothing
    End Sub

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14 /div>

    15
    16
    17
    18



    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert.