Excel VBA hurkok-minden, a következő, Do While, beágyazott & More

ahhoz, hogy hatékonyan működjön a VBA-ban, meg kell értenie a hurkokat.a

hurkok lehetővé teszik egy kódblokk meghatározott számú ismétlését, vagy egy kódblokk megismétlését minden objektumon egy objektumkészletben.

először néhány példát mutatunk be, hogy megmutassuk, milyen hurkok képesek. Akkor mindent megtanítunk a hurkokról.

VBA hurok gyors példák

minden hurokhoz

minden hurokhoz hurok a gyűjtemény minden objektumán, például a munkafüzet minden munkalapján vagy egy tartomány minden celláján.

hurok a munkafüzet összes munkalapján

Ez a kód végighalad a munkafüzet összes munkalapján, minden lap elrejtésével:

1
2
3
4
5
6
7
8

sub loopthroughsheets ()
Dim ws mint munkalap
minden egyes ws munkalapon
ws.Visible = True
következő
End Sub

hurok az összes cellán belül

Ez a kód végighalad egy cellatartományon, tesztelve, hogy a cellaérték negatív, pozitív vagy nulla:

a következő hurkokhoz

a “For” hurok másik típusa a következő hurok. A következő hurok lehetővé teszi az egész számok hurkolását.

Ez a kód az 1-től 10-ig terjedő egész számokon megy keresztül, mindegyik üzenetmezővel jelenik meg:

1
2
3
4
5
6

sub forloop()
Dim I egész számként
i = 1-től 10-ig
MsgBox I
következő i
end sub

do while loops

do while loops will loops while a feltétel teljesülése esetén. Ez a kód az 1-től 10-ig terjedő egész számokon is végighalad, mindegyik üzenetmezővel jelenik meg.

1
2
3
4
5
6
7
8

sub dowhileloop()
dim n egész számként
N = 1
do while n < 11
MsgBox n
N = N + 1
loop
End Sub

do amíg hurkok

fordítva, Addig tegye, amíg a hurkok hurkolnak, amíg egy feltétel teljesül. Ez a kód ugyanazt teszi, mint az előző két példa.

1
2
3
4
5
6
7
8

sub dountilloop()
dim n egész számként
N = 1
vissza, amíg n >= 10
MsgBox n
N = N + 1
hurok
vége sub

ezt az alábbiakban tárgyaljuk, de te rendkívül óvatosnak kell lennie a Do While vagy Do amíg hurkok létrehozásakor, hogy ne hozzon létre soha véget nem érő hurkot.

VBA Loop Builder

Ez egy screenshot a “Loop Builder” a mi prémium VBA Add-in: AutoMacro. A Loop Builder lehetővé teszi, hogy gyorsan és egyszerűen hozzon létre hurkokat a különböző objektumokon vagy számokon keresztül. Minden objektumon végrehajthat műveleteket, és/vagy csak bizonyos feltételeknek megfelelő objektumokat jelölhet ki.

A bővítmény számos más kódépítőt is tartalmaz, egy kiterjedt VBA kódkönyvtárat és egy sor kódolási eszközt. Ez egy kell minden VBA Fejlesztő.

most részletesen lefedjük a különböző típusú hurkokat.

VBA a következő ciklushoz

A hurok Szintaxisához

a következő ciklus lehetővé teszi egy kódblokk meghatározott számú ismétlését. A szintaxis:

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.
  • számláló-egy egész változó, amelyet a
  • Start számlálására használnak-a kezdő érték(pl. 1)
  • vége-a végérték (pl. 10)
  • – lehetővé teszi, hogy minden n egész számot számoljon minden 1 egész szám helyett. Azt is megy fordított negatív értéket (pl. Lépés -1)
  • – a kód, amely megismétli a
  • következő záró utasítást a következő hurokhoz. Felveheti a számlálót, vagy sem. Erősen ajánlom azonban a számláló felvételét, mivel ez megkönnyíti a kód olvasását.

Ha ez zavaró, ne aggódj. Néhány példát fogunk áttekinteni:

számolás 10-ig

Ez a kód 10-ig fog számolni egy For-Next hurok használatával:

1
2
3
4
5
6
7
8

sub foreach_countto10()
Dim n egész számként
n = 1 – től 10-ig
MsgBox n
következő N
vége

a huroklépéshez

számoljon 10-ig-csak páros számok

Ez a kód 10-ig számít, csak páros számokat számolva:

1
2
3
4
5
6
7
8

sub foreach_countto10_even()
dim n egész számként
n = 2-10 2.lépés
MsgBox n
következő n
vége sub

megjegyzés hozzáadtuk a “2. lépést”. Ez azt mondja a For huroknak, hogy 2-vel” lépjen ” át a számlálón. Negatív lépésértéket is használhatunk a fordított lépéshez:

hurok lépés-inverz

visszaszámlálás 10-től

Ez a kód visszaszámlál 10-től:

1
2
3
4
5
6
7
8
9

sub foreach_countdown_inverse()
dim n egész számként
n = 10-1 lépés -1
MsgBox n
következő N
MsgBox “lift off”
vége sub

törlés Sorok, ha a cella üres

leggyakrabban negatív lépést használtam a-Loop számára a cellatartományok közötti hurkoláshoz, bizonyos kritériumoknak megfelelő sorok törlésével. Ha hurok a felső sorok az alsó sorok, ahogy törli sorok akkor rendetlenség fel a számláló.

Ez a példa törli az üres cellákkal rendelkező sorokat (az alsó sorból kiindulva):

beágyazott hurokhoz

az egyik hurokhoz “fészkelhet” egy másik hurokhoz. Fogjuk használni beágyazott hurkok, hogy hozzon létre egy szorzótábla:

1
2
3
4
5
6
7
8
9
10
11

sub nested_foreach_multiplicationtable()
Dim sor egész számként, col egész számként
sor = 1-9
col = 1-9
cellák esetén(sor + 1, Col + 1).Value = row * col
következő col
következő sor
End Sub

kilépés

az exit for utasítás lehetővé teszi, hogy azonnal kilépjen a következő hurokból.

általában az Exit For-t használnád egy IF utasítás mellett, kilépve a For Next ciklusból, ha egy bizonyos feltétel teljesül.

például használhat egy For hurkot egy cella kereséséhez. Miután megtalálta a cellát, kiléphet a hurokból, hogy felgyorsítsa a kódot.

Ez a kód az 1-től 1000-ig terjedő sorokon keresztül hurkol, az A oszlopban a “hiba” kifejezést keresi.Ha megtalálta, a kód kiválasztja a cellát, figyelmezteti Önt a talált hibára, és kilép a hurokból:

fontos: beágyazott hurkok esetén az Exit For csak kilép az aktuális hurokból, nem minden aktív hurokból.

Folytatás

a VBA nem rendelkezik a Visual Basicben található” Folytatás ” paranccsal. Ehelyett az “Exit” – et kell használnia.

VBA minden hurokhoz

Az egyes hurkokhoz tartozó VBA a gyűjtemény összes objektumán keresztül fog hurkolni:

  • a tartomány összes cellája
  • a munkafüzet összes munkalapja
  • a munkalap összes alakja
  • az összes nyitott munkafüzet

Az egyes hurkokhoz beágyazott elemeket is használhat:

  • az összes munkalapon lévő összes cella
  • az összes munkalapon lévő összes alakzat
  • az összes nyitott munkafüzetben lévő összes lap

a szintaxis:

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.”Jelszó”
következő ws
End Sub

minden megnyitott munkafüzethez

Ez a kód elmenti és bezárja az összes megnyitott munkafüzetet:

1
2
3
4
5
6
7
8
9

sub foreachwb_inworkbooks()
Dim WB munkafüzetként
minden munkafüzethez
WB.Bezárás SaveChanges:= True
következő wb
vége Sub

a munkalap minden egyes alakjához

Ez a kód törli az összes alakzatot az aktív lapon.

1
2
3
4
5
6
7
8
9

sub foreachshape()
Dim SHP alakként
minden SHP-re az activesheet-ben.Alakzatok
shp.Delete
következő shp

vége

minden alakzat a munkafüzet minden munkalapján

az egyes hurkokhoz is fészkelhet. Itt végigjárjuk az összes alakzatot az aktív munkafüzet összes munkalapján:

1
2
3
4
5
6
7
8
9
10
11

sub foreachshape_inallworksheets()
Dim SHP mint alakzat, ws mint munkalap
minden ws munkalapon
minden egyes SHP ws-ben.Alakzatok
shp.Delete
következő shp
következő ws
vége Sub

minden – if hurokhoz

mint már említettük, használhatunk egy If utasítást a egy hurok, amely csak bizonyos kritériumok teljesülése esetén hajt végre műveleteket.

Ez a kód elrejti a tartomány összes üres sorát:

VBA Do While Loop

a VBA Do While and Do Until (lásd a következő részt) nagyon hasonlóak. Meg fognak ismételni egy hurkot, amíg (vagy amíg) egy feltétel teljesül.

A do While hurok megismétli a hurkot, amíg egy feltétel teljesül.

itt van a Do While szintaxis:

2
3

do while condition

loop

ahol:

  • feltétel – a tesztelési feltétel
  • – a kódblokk ismétlése

beállíthat egy do while hurkot is a hurok végén lévő feltétellel:

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
5
6
7
8

sub dowhileloop()
dim n egész számként
N = 1
do while n < 11
MsgBox n
N = N + 1
loop
End Sub

hurok míg

most futtassuk ugyanazt az eljárást, kivéve, hogy a feltételt a hurok végére mozgatjuk:

1
2
3
4
5
6
7
8

sub doloopwhile()
dim n egész számként
N = 1
vissza
MsgBox n
N = N + 1
hurok, míg n < 11
vége sub

VBA csinálni, amíg hurok

vissza, amíg A hurkok addig ismételnek egy hurkot, amíg egy bizonyos feltétel teljesül. A szintaxis lényegében ugyanaz, mint a Do While hurkok:

1
2
3

do amíg feltétel
hurok

és hasonlóan a feltétel mehet a ciklus elején vagy végén:

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
7
8

Sub DoUntilLoop()
Dim N egész számként
n = 1
vissza, amíg n > 10
MsgBox n
n = n + 1
hurok
end sub

hurok, amíg

Ez a hurok, amíg a hurok 10-ig számít:

1
2
3
4
5
6
7
8

sub doloopuntil()
Dim n egész számként
N = 1
vissza
MsgBox n
N = N + 1
hurok amíg n > 10
vége sub

Kilépés a Do hurokból

az Exit For használatához hasonlóan az Exit Do paranccsal azonnal kiléphet a Do hurokból

1
kilépés do

itt van egy példa az Exit do-ra:

vége vagy törése hurok

mint már említettük, a kilépéshez vagy a kilépéshez használhatja a kilépést:

1
Exit For
1
Exit Do

However, these commands must be added to your code before you run a hurok.

Ha egy jelenleg futó hurkot próbál “megtörni”, megpróbálhatja megnyomni az ESC vagy a CTRL + Pause Break billentyűzetet. Ez azonban nem biztos, hogy működik. Ha nem működik, meg kell várnia, amíg a hurok véget ér, vagy végtelen hurok esetén használja CTRL + ALT + Delete kényszeríteni az Excel bezárását.

ezért próbálom elkerülni a do hurkokat, könnyebb véletlenül létrehozni egy végtelen hurkot, amely arra kényszeríti, hogy újraindítsa az Excel-t, potenciálisan elveszítve a munkáját.

további Hurokpéldák

sorokon Áthurok

Ez egy oszlop összes során áthurokol:

hurok át az oszlopokon

Ez egy sor Összes oszlopán keresztül fog hurkolni:

hurok át a mappában lévő fájlokon

Ez a kód végighalad a mappában lévő összes fájlon, létrehozva egy listát:

hurok át a tömbön

Ez a kód végighalad a az array ‘arrlist’:

1
2
3

mert i = lbound(arrlist) to ubound(arrlist)
MsgBox arrlist(i)
következő i

az lbound függvény megkapja a tömb “alsó határát”, az ubound pedig a “felső határt”.

hurkok az Access VBA-ban

a fenti példák többsége az Access VBA-ban is működik. Az Access alkalmazásban azonban a Recordset objektumot hurkoljuk át, nem pedig a Range objektumot.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

sub loopthroughrecords()
on hiba folytatás következő
dim DBS mint adatbázis
Dim RST mint recordset
set 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



Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.