Dolenni yn VBA

Mae yna sefyllfaoedd pan fydd angen rhaglen VBA i berfformio'r un set o gamau gweithredu sawl gwaith yn olynol (hynny yw, ailadrodd yr un bloc o god sawl gwaith). Gellir gwneud hyn gan ddefnyddio dolenni VBA.

Mae dolenni VBA yn cynnwys:

Nesaf, byddwn yn edrych yn agosach ar bob un o'r cylchoedd hyn.

Ar gyfer Gweithredwr Dolen yn Visual Basic

Strwythur y gweithredwr dolen Mae adroddiadau yn Visual Basic gellir ei drefnu mewn un o ddwy ffurf: fel dolen Ar gyfer … Nesaf neu fel dolen Ar gyfer Pob Un.

Beicio “Ar gyfer … Nesaf”

Beicio Ar gyfer … Nesaf yn defnyddio newidyn sy'n cymryd gwerthoedd yn ddilyniannol o ystod benodol. Gyda phob newid yng ngwerth y newidyn, cyflawnir y gweithredoedd sydd wedi'u hamgáu yng nghorff y cylchred. Mae hyn yn hawdd ei ddeall o enghraifft syml:

Ar gyfer i = 1 I 10 Cyfanswm = Cyfanswm + iArray(i) Nesaf i

Yn y ddolen syml hon Ar gyfer … Nesaf newidyn yn cael ei ddefnyddio i, sy'n cymryd y gwerthoedd 1, 2, 3, ... 10 yn olynol, ac ar gyfer pob un o'r gwerthoedd hyn, gweithredir y cod VBA y tu mewn i'r ddolen. Felly, mae'r ddolen hon yn crynhoi elfennau'r arae. iArray mewn newidyn Cyfanswm.

Yn yr enghraifft uchod, nid yw'r cynyddiad dolen wedi'i nodi, felly i gynyddran y newidyn i o 1 i 10, y rhagosodiad yw cynyddran 1… Fodd bynnag, mewn rhai achosion mae angen defnyddio gwahanol werthoedd cynyddran ar gyfer y ddolen. Gellir gwneud hyn gan ddefnyddio'r allweddair Camfel y dangosir yn yr enghraifft syml ganlynol.

Ar gyfer d = 0 I 10 Cam 0.1 dTotal = dTotal + d Nesaf d

Ers yn yr enghraifft uchod, gosodir y cam cynyddran yn hafal i 0.1, yna y newidyn d Cyfanswm ar gyfer pob ailadrodd y cylch yn cymryd ar y gwerthoedd 0.0, 0.1, 0.2, 0.3, … 9.9, 10.0.

I bennu'r cam dolen yn VBA, gallwch ddefnyddio gwerth negyddol, er enghraifft, fel hyn:

Ar gyfer i = 10 i 1 Cam -1 iArray(i) = i Nesaf i

Dyma'r cynyddran -1, felly y newidyn i gyda phob ailadroddiad o'r gylchred yn cymryd y gwerthoedd 10, 9, 8, …1.

Dolen “Ar Gyfer Pob Un”

Beicio Ar gyfer Pob Un tebyg i gylchred Ar gyfer … Nesaf, ond yn lle ailadrodd dros y dilyniant o werthoedd ar gyfer y newidyn cownter, y ddolen Ar gyfer Pob Un yn perfformio set o gamau gweithredu ar gyfer pob gwrthrych yn y grŵp penodol o wrthrychau. Yn yr enghraifft ganlynol, gan ddefnyddio dolen Ar gyfer Pob Un yn rhifo pob taflen yn y llyfr gwaith Excel cyfredol:

Dim wsheet Fel Taflen Waith Ar Gyfer Pob Taflen mewn Taflenni Gwaith MsgBox " Найден лист: " & wSheet.Name Nesaf wSheet

Datganiad ymyrraeth dolen “Ymadael Am”

Gweithredwr Allanfa Ar Gyfer a ddefnyddir i dorri ar draws y cylch. Cyn gynted ag y deuir ar draws y datganiad hwn yn y cod, mae'r rhaglen yn dod â gweithrediad y ddolen i ben ac yn symud ymlaen i gyflawni'r datganiadau sydd yn y cod yn syth ar ôl y ddolen hon. Gellir defnyddio hwn, er enghraifft, i chwilio am werth penodol mewn arae. I wneud hyn, gan ddefnyddio dolen, mae pob elfen o'r arae yn cael ei sganio. Cyn gynted ag y darganfyddir yr elfen ofynnol, nid oes angen edrych trwy'r gweddill - mae'r cylch yn cael ei dorri.

Cais gweithredwr Allanfa Ar Gyfer a ddangosir yn yr enghraifft ganlynol. Yma mae'r ddolen yn ailadrodd dros 100 o gofnodion arae ac yn cymharu pob un â gwerth y newidyn dVal… Os canfyddir cyfatebiaeth, yna terfynir y ddolen:

Ar gyfer i = 1 I 100 Os dValues(i) = dVal Yna MynegaiVal = i Gadael Am Diwedd Os Nesaf i

Y Dolen Gwneud Tra yn Visual Basic

Beicio Gwnewch tra yn gweithredu bloc o god cyn belled â bod yr amod penodedig yn cael ei fodloni. Mae'r canlynol yn enghraifft o weithdrefn is, y mae defnyddio'r ddolen Gwnewch tra Dangosir rhifau Fibonacci nad ydynt yn fwy na 1000 yn olynol:

'Allbynnau is-weithdrefnau Rhifau Fibonacci heb fod yn fwy na 1000 Mae rhifydd Is-Fibonacci() Dim i Fel Cyfanrif i ddangos lleoliad yr elfen yn y dilyniant Dim iFib As Integer 'yn storio gwerth cyfredol y dilyniant Dim iFib_Next As Integer' yn storio'r gwerth nesaf o'r dilyniant Dim iStep As Integer yn storio maint y cynyddiad nesaf 'cychwyn newidynnau i a iFib_Next i = 1 iFib_Next = 0 'Gwneud Tra bydd y ddolen yn gweithredu nes bod gwerth ' rhif Fibonacci cyfredol yn fwy na 1000 Gwneud Tra iFib_Next < 1000 Os i = 1 Yna ' achos arbennig ar gyfer elfen gyntaf iStep = 1 iFib = 0 Arall ' arbed maint y cynyddiad nesaf cyn trosysgrifo 'gwerth cyfredol y dilyniant iStep = iFib iFib = iFib_Next Diwedd Os 'argraffwch y rhif Fibonacci cyfredol yng ngholofn A o y daflen waith weithredol 'yn y rhes gyda mynegai i Cells(i , 1).Value = iFib 'cyfrifwch y rhif Fibonacci nesaf a chynyddwch y mynegai safle elfen erbyn 1 iFib_Next = iFib + iStep i = i + 1 Loop End Is

Yn yr enghraifft a roddir, y cyflwr iFib_Nesaf < 1000 wedi'i wirio ar ddechrau'r ddolen. Felly, os yw'r gwerth cyntaf iFib_Nesaf Pe bai mwy na 1000, yna ni fyddai'r ddolen byth yn cael ei gweithredu.

Ffordd arall o weithredu dolen Gwnewch tra - gosodwch y cyflwr nid ar y dechrau, ond ar ddiwedd y ddolen. Yn yr achos hwn, bydd y ddolen yn cael ei gweithredu o leiaf unwaith, ni waeth a yw'r amod yn cael ei fodloni.

Yn sgematig, cylch o'r fath Gwnewch tra gyda'r cyflwr i'w wirio ar y diwedd yn edrych fel hyn:

Gwnewch ... Dolen Tra iFib_Nesaf < 1000

Ewch i «Gwneud Tan» â Visual Basic

Beicio Gwnewch Tan tebyg iawn i gylchred Gwnewch tra: mae'r bloc cod yng nghorff y ddolen yn cael ei weithredu dro ar ôl tro nes bod yr amod penodedig wedi'i fodloni (canlyniad y mynegiant amodol yw Cywir). Yn y drefn nesaf is defnyddio cylch Gwnewch Tan adfer gwerthoedd o bob cell mewn colofn A taflen waith nes bod y golofn yn dod ar draws cell wag:

iRow = 1 Gwneud Tan IsEmpty(Celloedd(iRow, 1)) 'Mae gwerth y gell gyfredol yn cael ei storio yn yr arae dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

Yn yr enghraifft uchod, y cyflwr Is Gwag(Celloedd(iRow, 1)) lleoli ar ddechrau'r strwythur Gwnewch Tan, felly bydd y ddolen yn cael ei gweithredu o leiaf unwaith os nad yw'r gell gyntaf a gymerir yn wag.

Fodd bynnag, fel y dangosir yn yr enghreifftiau dolen Gwnewch tra, mewn rhai sefyllfaoedd mae angen gweithredu'r ddolen o leiaf unwaith, waeth beth fo canlyniad cychwynnol y mynegiant amodol. Yn yr achos hwn, dylid gosod y mynegiant amodol ar ddiwedd y ddolen, fel hyn:

Gwnewch ... Dolen Tan Yn Wag(Celloedd(iRow, 1))

Gadael ymateb