Excel VBA-silmukat-jokaiselle, seuraavaksi, Do While, Sissed & More
toimiaksesi tehokkaasti VBA: ssa, sinun täytyy ymmärtää silmukoita.
silmukoilla voi toistaa joukon koodilohkoa useita kertoja tai toistaa koodilohkon jokaiselle objektille objektijoukossa.
ensin näytämme muutaman esimerkin, jotka näyttävät, mihin silmukat pystyvät. Sitten opetamme sinulle kaiken silmukoista.
VBA Loop Quick Examples
jokaiselle silmukalle
jokaiselle silmukalle silmukan läpi jokaisen kokoelman objektin, kuten jokaisen työkirjan laskentataulukon tai jokaisen alueen solun.
kierrä kaikki työkirjan työarkit
tämä koodi kiertää kaikki työkirjan työarkit ja poistaa jokaisen levyn:
1
2
3
4
5
6
8
|
sub looptroughsheets ()
dim ws laskentataulukkona
kunkin työarkissa olevan ws
ws.Visible = true
Next
End Sub
|
Silmukka kaikkien alueella olevien solujen läpi
tämä koodi silmukoi solualueen läpi testaten, onko solun arvo negatiivinen, positiivinen vai nolla:
seuraaville silmukoille
toinen ”for” – silmukka on seuraava silmukka. For Next Loop voit silmukka läpi kokonaislukuja.
tämä koodi silmukoi kokonaislukujen 1-10 läpi näyttäen jokaisen viestikentällä:
1
2
3
4
5
6
|
sub forloop ()
Dim I kokonaislukuna
for I = 1-10
MsgBox I
next I
End Sub
|
do while loops will loop while the condition is met. Tämä koodi myös silmukka läpi kokonaislukuja 1-10, näytetään jokainen viestikenttään.
1
2
3
4
5
6
7
8
|
tee kunnes silmukat
käänteisesti, Tee kunnes silmukoita silmukka kunnes ehto täyttyy. Tämä koodi tekee saman kuin kaksi edellistä esimerkkiä.
1
2
3
4
5
6
7
8
|
tästä keskustellaan alla, mutta sinä täytyy olla erittäin varovainen luodessaan tehdä vaikka tai tehdä kunnes silmukoita niin, että et luo loputon silmukka.
VBA Loop Builder
Tämä on kuvakaappaus ”Loop Builder” Premium VBA-Lisäosastolta: AutoMacro. Loop Builder voit nopeasti ja helposti rakentaa silmukoita silmukan läpi eri esineitä tai numeroita. Voit suorittaa toimintoja jokaiselle objektille ja / tai valita vain tiettyjä kriteerejä täyttäviä objekteja.
lisäosa sisältää myös monia muita koodinrakentajia, laajan VBA-koodikirjaston sekä valikoiman koodaustyökaluja. Se on oltava tahansa VBA Kehittäjä.
nyt käydään läpi eri silmukkatyypit perusteellisesti.
VBA seuraavalle silmukalle
silmukan syntaksille
seuraavan silmukan avulla voit toistaa koodilohkon tietyn määrän kertoja. Syntaksi on:
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.
- Counter – kokonaislukumuuttuja, jolla lasketaan
- alku – alkuarvo (ENT. 1)
- loppu – loppuarvo (ENT. 10)
- – voit laskea jokaisen n kokonaisluvun sijaan jokaisen 1 kokonaisluvun. Voit myös mennä Käänteinen negatiivinen arvo (ENT. Vaihe -1)
- – koodi, joka toistaa
- seuraavan Loppulauseen For Next Loopille. Voit sisällyttää laskurin tai ei. Suosittelen kuitenkin laskuria, koska se helpottaa koodin lukemista.
Jos se hämmentää, ei hätää. Käymme läpi joitakin esimerkkejä:
lasketaan arvoon 10
tämä koodi lasketaan arvoon 10 käyttäen seuraavaa silmukkaa:
1
2
3
4
5
6
7
8
|
silmukkavaiheessa
lasketaan 10: een – vain parilliset luvut
tämä koodi lasketaan 10 vain laskemalla parilliset numerot:
1
2
3
4
5
6
7
8
|
notice we added the ”step 2”. Tämä kertoo For Loopin ”astuvan” laskurin läpi 2: lla. Voimme myös käyttää negatiivista askelarvoa astuaksemme taaksepäin:
Silmukkaaskel-käänteiselle
lähtölaskenta 10: stä
tämä koodi tulee lähtölaskenta 10: stä:
1
2
3
4
5
6
7
8
|
sub foreach_countdown_inverse ()
DIM n kokonaislukuna
for N = 10 to 1 step -1
MsgBox n
seuraava n
MsgBox ”lift off”
End Sub
|
poista Rivit jos solu on tyhjä
olen useimmiten käyttänyt negatiivista vaihetta silmukkaan silmukoidakseni solujen alueiden läpi, poistaen rivejä, jotka täyttävät tietyt kriteerit. Jos kierrät ylimmiltä riveiltä alimmille riveille, kun poistat rivejä, sotket laskurisi.
tässä esimerkissä poistetaan rivit, joissa on tyhjiä soluja (alariviltä alkaen):
sisäkkäisiä silmukalle
voit ”pesiä” yhden silmukalle toisen silmukan sisään. Käytämme sisäkkäisiä silmukoita luoda kertotaulu:
1
2
3
4
5
6
7
8
9
10
11
|
exit for
exit for statement voit poistua A: sta seuraavan silmukan osalta välittömästi.
käytät yleensä Exitiä If-lausekkeen kanssa poistuen seuraavasta silmukasta, jos tietty ehto täyttyy.
esimerkiksi voit käyttää For-silmukkaa solun löytämiseksi. Kun solu löytyy, voit poistua silmukasta nopeuttaaksesi koodiasi.
tämä koodi silmukoi rivien 1-1000 läpi ja etsii ”virhettä” sarakkeesta A. Jos se löytyy, koodi valitsee solun, ilmoittaa löydetystä virheestä ja poistuu silmukasta:
tärkeää: jos kyseessä on sisäkkäinen Silmukka, vain poistuu nykyinen silmukka, ei kaikki aktiiviset silmukat.
Jatka
VBA: lla ei ole Visual Basicistä löytyvää ”Jatka” – komentoa. Sen sijaan, sinun täytyy käyttää ”Exit”.
VBA jokaiselle silmukalle
jokaisen silmukan VBA kiertää kaikki kokoelman objektit:
- kaikki alueen solut
- kaikki työkirjan työkirjat
- kaikki avoimet työkirjat
Voit myös käyttää sisäkkäisiä jokaiselle lenkille:
- kaikki alueen solut kaikissa työkirjoissa
- kaikki muodot kaikissa työkirjoissa
- kaikki arkit kaikissa avoimissa työkirjoissa
li>ja niin edelleen…
syntaksi on:
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.Poista ”salasana”
Next ws
End Sub
|
jokaisen avoimen työkirjan osalta
tämä koodi tallentaa ja sulkee kaikki avoimet työkirjat:
1
2
3
4
5
6
7
8
|
sub foreachwb_inworkbooks ()
Dim WB työkirjana
kunkin WB työkirjoissa
WB.Sulje SaveChanges:=True
Next wb
End Sub
|
kunkin muodon osalta työarkissa
tämä koodi poistaa kaikki muodot aktiivisesta arkista.
1
2
3
4
5
6
8
9
|
jokaiselle muodosta jokaisessa työkirjassa
voit myös pesiä jokaiselle silmukalle. Täällä me silmukoimme kaikki muodot kaikissa työarkeissa aktiivisessa työkirjassa:
1
2
3
4
5
6
7
8
9
10
11
|
jokaiselle – IF-silmukalle
kuten olemme aiemmin maininneet, voit käyttää If-lausetta silmukka, joka suorittaa toimia vain, jos tietyt kriteerit täyttyvät.
tämä koodi piilottaa kaikki tyhjät rivit alueella:
VBA Do kun taas silmukka
VBA Do While ja Do Until (katso seuraava kohta) ovat hyvin samanlaisia. Ne toistavat silmukan, kun (tai kunnes) ehto täyttyy.
Do While Loop toistaa silmukan, kun ehto täyttyy.
tässä on Do While Syntax:
1
2
3
|
Do kun taas kunto
silmukka
|
where:
- condition – the condition to test
- – the code block to repeat
voit myös asettaa do while Loopin, jossa on silmukan lopussa oleva ehto:
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
|
Silmukka kun taas
nyt ajetaan sama menettely, paitsi siirrämme ehdon silmukan loppuun:
1
2
3
4
5
6
7
8
|
VBA do until loop
back until Silmukat toistavat silmukan, kunnes tietty ehto täyttyy. Syntaksi on periaatteessa sama kuin do-luupissa:
1
2
3
|
do until Condition
loop
|
ja vastaavasti kunto voi mennä lenkin alussa tai lopussa:
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 kokonaislukuna
n = 1
back until n >10
MsgBox n
+ 1 loop
End Sub
|
silmukka, kunnes
tämä silmukka, kunnes silmukka laskee arvoon 10:
1
2
3
4
5
6
7
8
|
Exit Do Loop
samalla tavalla kuin käytetään Exit for exit A For Loop, käytetään Exit Do-komentoa do Loopista poistumiseen välittömästi
1
|
tässä on esimerkki exit do: sta:
loppu-tai taukosilmukka
kuten edellä mainittiin, voit käyttää exit for or exit do: ta exit loopiin:
1
|
Exit For
|
1
|
Exit Do
|
However, these commands must be added to your code before you run sinun silmukkasi.
Jos yrität ”katkaista” käynnissä olevan silmukan, voit kokeilla näppäimistöllä Esc-tai CTRL + Pause Break-näppäintä. Tämä ei kuitenkaan välttämättä toimi. Jos se ei toimi, sinun täytyy odottaa silmukan loppua tai, jos kyseessä on loputon silmukka, käytä CTRL + ALT + Delete pakottaa sulje Excel.
tämän takia yritän välttää Do loopeja, on helpompaa vahingossa luoda loputon silmukka, joka pakottaa sinut käynnistämään Excelin uudelleen, mahdollisesti menettäen työsi.
lisää Silmukkaesimerkkejä
Silmukka rivien läpi
tämä silmukoi kaikkien sarakkeen rivien läpi:
Silmukka sarakkeiden läpi
tämä silmukka kiertää kaikkien sarakkeiden läpi rivissä:
Silmukka kansion tiedostojen läpi
tämä koodi kiertää kansion kaikkien tiedostojen läpi, luoden luettelon:
silmukka rivin läpi
tämä koodi silmukka läpi array ’arrlist’:
1
2
3
|
for I = lbound(arrlist) to ubound(arrlist)
MsgBox arrlist(i)
next I
|
lbound-funktio saa joukon ”alarajan” ja ubound ”ylärajan”.
luupit Access VBA: ssa
useimmat yllä olevista esimerkeistä toimivat myös Access VBA: ssa. Kuitenkin, Access, me silmukka kautta Recordset objekti sijaan Range objekti.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
8 |
sub looptroughrecords ()
on Error Resume Next
Dim DBS tietokantana
Dim rst tietueina
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
|