Բովանդակություն
Կան իրավիճակներ, երբ VBA ծրագրից պահանջվում է մի քանի անգամ անընդմեջ կատարել նույն գործողությունների փաթեթը (այսինքն՝ մի քանի անգամ կրկնել նույն կոդի բլոկը): Դա կարելի է անել VBA օղակների միջոցով:
VBA օղակները ներառում են.
Հաջորդը, մենք ավելի մանրամասն կանդրադառնանք այս ցիկլերից յուրաքանչյուրին:
Loop օպերատորի համար Visual Basic-ում
Օղակային օպերատորի կառուցվածքը The Visual Basic-ում կարող է կազմակերպվել երկու ձևերից մեկով՝ որպես օղակ Համար… Հաջորդը կամ որպես օղակ Յուրաքանչյուրի համար.
«Հաջորդի համար» ցիկլը
ցիկլ Համար… Հաջորդը օգտագործում է փոփոխական, որը հաջորդաբար վերցնում է արժեքներ տվյալ տիրույթից: Փոփոխականի արժեքի յուրաքանչյուր փոփոխությամբ կատարվում են ցիկլի մարմնում պարփակված գործողությունները։ Սա հեշտ է հասկանալ պարզ օրինակից.
i = 1-ից 10-ի համար Ընդհանուր = Ընդհանուր + iArray(i) Հաջորդ i
Այս պարզ օղակում Համար… Հաջորդը փոփոխական օգտագործվում է i, որը հաջորդաբար վերցնում է 1, 2, 3, … 10 արժեքները, և այս արժեքներից յուրաքանչյուրի համար կատարվում է օղակի ներսում գտնվող VBA կոդը: Այսպիսով, այս օղակն ամփոփում է զանգվածի տարրերը։ iArray փոփոխականի մեջ Ընդհանուր.
Վերոնշյալ օրինակում հանգույցի աճը նշված չէ, ուստի փոփոխականը մեծացնելու համար i 1-ից 10-ը, կանխադրվածը հավելում է 1… Այնուամենայնիվ, որոշ դեպքերում անհրաժեշտ է օգտագործել տարբեր աճող արժեքներ օղակի համար: Դա կարելի է անել՝ օգտագործելով հիմնաբառը Քայլինչպես ցույց է տրված հետևյալ պարզ օրինակում.
d = 0-ից 10-ի համար Քայլ 0.1 dTotal = dTotal + d Հաջորդ d
Քանի որ վերը նշված օրինակում աճող քայլը հավասար է 0.1, ապա փոփոխականը dԸնդամենը ցիկլի յուրաքանչյուր կրկնության համար ստանում են 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0 արժեքները:
VBA-ում հանգույցի քայլը որոշելու համար կարող եք օգտագործել բացասական արժեք, օրինակ, այսպես.
For i = 10 To 1 Step -1 iArray(i) = i Հաջորդ i
Ահա աճը -1, ուրեմն փոփոխականը i ցիկլի յուրաքանչյուր կրկնությամբ ստանում են 10, 9, 8, … 1 արժեքներ:
Օղակ «Յուրաքանչյուրի համար»
ցիկլ Յուրաքանչյուրի համար նման է ցիկլի Համար… Հաջորդը, բայց հաշվիչի փոփոխականի, հանգույցի արժեքների հաջորդականության վրա կրկնելու փոխարեն Յուրաքանչյուրի համար կատարում է գործողությունների մի շարք օբյեկտների նշված խմբի յուրաքանչյուր օբյեկտի համար: Հետևյալ օրինակում, օգտագործելով հանգույց Յուրաքանչյուրի համար թվարկում է բոլոր թերթերը ընթացիկ Excel աշխատանքային գրքում.
Մութ wSheet-ը որպես աշխատանքային թերթիկ յուրաքանչյուր wsheet-ի համար աշխատանքային թերթերում MsgBox «Найден лист:» & wSheet.Name Հաջորդ wSheet
Օղակի ընդհատման հայտարարություն «Ելք համար»
օպերատոր Ելք For օգտագործվում է ցիկլը ընդհատելու համար: Հենց որ այս հայտարարությունը հանդիպում է կոդում, ծրագիրը ավարտում է հանգույցի կատարումը և անցնում է այն հայտարարությունների կատարմանը, որոնք գտնվում են կոդի մեջ այս հանգույցից անմիջապես հետո: Սա կարող է օգտագործվել, օրինակ, զանգվածում որոշակի արժեք որոնելու համար: Դա անելու համար, օգտագործելով հանգույց, զանգվածի յուրաքանչյուր տարր սկանավորվում է: Հենց որ անհրաժեշտ տարրը գտնվի, մնացածը նայելու կարիք չկա. ցիկլը ընդհատվում է:
Օպերատորի դիմում Ելք For ցույց է տրված հետևյալ օրինակում. Այստեղ օղակը կրկնում է ավելի քան 100 զանգվածի գրառում և յուրաքանչյուրը համեմատում է փոփոխականի արժեքի հետ dVal… Եթե համընկնում է գտնվել, ապա հանգույցն ավարտվում է.
i = 1-ից 100-ի համար, եթե dValues(i) = dVal, ապա IndexVal = i Ելք վերջի համար, եթե հաջորդը i
Do while օղակը Visual Basic-ում
ցիկլ Արեք մինչ այդ կատարում է կոդի բլոկ, քանի դեռ նշված պայմանը բավարարված է: Ստորև բերված է ընթացակարգի օրինակ Sub, որում օգտագործելով հանգույցը Արեք մինչ այդ Ֆիբոնաչիի թվերը, որոնք չեն գերազանցում 1000-ը, ցուցադրվում են հաջորդաբար.
«Ենթակարգ պրոցեդուրան թողարկում է 1000-ը չգերազանցող Ֆիբոնաչիի թվեր, որոնք չեն գերազանցում 1-ը Sub Fibonacci() Dim i As Integer «հաշվիչը՝ նշելու տարրի դիրքը հաջորդականության մեջ Dim iFib As Integer «պահպանում է հաջորդականության ընթացիկ արժեքը Dim iFib_Next Քանի որ ամբողջ թիվը» պահպանում է հաջորդ արժեքը: հաջորդականության Dim iStep Քանի որ ամբողջ թիվը 'պահպանում է հաջորդ աճի չափը' սկզբնավորել փոփոխականները i և iFib_Next i = 0 iFib_Next = 1000 'Do while օղակը կգործի այնքան ժամանակ, մինչև «ընթացիկ Ֆիբոնաչիի համարի արժեքը լինի 1000-ից մեծ, Do while iFib_Next < 1 If i = 1 Այնուհետև «հատուկ դեպք առաջին տարրի համար iStep = 0 iFib = 1 Այլապես «պահեք հաջորդ աճի չափը նախքան «հաջորդականության ընթացիկ արժեքը iStep = iFib iFib = iFib_Next End Եթե «տպեք ընթացիկ Ֆիբոնաչիի համարը A սյունակում: ակտիվ աշխատաթերթը «i ինդեքսով տողում Բջիջներ (i, 1): Արժեք = iFib «հաշվիր հաջորդ Ֆիբոնաչիի թիվը և ավելացրեք տարրի դիրքի ինդեքսը 1-ով iFib_Next = iFib + iStep i = i + XNUMX Loop End Sub
Տրված օրինակում պայմանը iFib_Next < 1000 ստուգվել է օղակի սկզբում: Հետեւաբար, եթե առաջին արժեքը iFib_Next Եթե 1000-ից ավելի լինեին, ապա օղակը երբեք չէր կատարվի:
Օղակ իրականացնելու ևս մեկ միջոց Արեք մինչ այդ - դրեք պայմանը ոչ թե օղակի սկզբում, այլ վերջում: Այս դեպքում օղակը կիրականացվի առնվազն մեկ անգամ՝ անկախ պայմանը բավարարված լինելուց:
Սխեմատիկորեն նման ցիկլ Արեք մինչ այդ վերջում ստուգվելիք պայմանով այսպիսի տեսք կունենա.
Կատարեք ... Loop while iFib_Next < 1000
Կիկլ «Արա մինչև» Visual Basic-ում
ցիկլ Արեք մինչև շատ նման է ցիկլի Արեք մինչ այդ: հանգույցի մարմնի կոդի բլոկը կատարվում է նորից ու նորից, մինչև նշված պայմանը բավարարվի (պայմանական արտահայտության արդյունքը. Ճիշտ) Հաջորդ ընթացակարգում Sub օգտագործելով ցիկլը Արեք մինչև առբերեք արժեքները սյունակի բոլոր բջիջներից A աշխատանքային թերթիկ, մինչև սյունակը չհանդիպի դատարկ բջիջի.
iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Ընթացիկ բջիջի արժեքը պահվում է զանգվածում dCellValues dCellValues(iRow) = Cells(iRow, 1): Value iRow = iRow + 1 Loop
Վերոնշյալ օրինակում պայմանը IsEmpty (Բջիջներ (iRow, 1)) գտնվում է կառույցի սկզբում Արեք մինչև, այնպես որ հանգույցը կկատարվի առնվազն մեկ անգամ, եթե առաջին վերցված բջիջը դատարկ չէ:
Այնուամենայնիվ, ինչպես ցույց է տրված հանգույցի օրինակներում Արեք մինչ այդ, որոշ իրավիճակներում անհրաժեշտ է, որ օղակը կատարվի առնվազն մեկ անգամ՝ անկախ պայմանական արտահայտության սկզբնական արդյունքից։ Այս դեպքում պայմանական արտահայտությունը պետք է տեղադրվի օղակի վերջում, այսպես.
Կատարեք ... Հանգիստ մինչև դատարկ լինի (Cells (iRow, 1))