Loops katika VBA

Kuna hali wakati programu ya VBA inahitajika kufanya seti sawa ya vitendo mara kadhaa mfululizo (yaani, kurudia kizuizi sawa cha msimbo mara kadhaa). Hii inaweza kufanywa kwa kutumia vitanzi vya VBA.

Vitanzi vya VBA ni pamoja na:

Ifuatayo, tutaangalia kwa karibu kila moja ya mizunguko hii.

Kwa Opereta ya Kitanzi katika Visual Basic

Muundo wa operator wa kitanzi The katika Visual Basic inaweza kupangwa katika moja ya aina mbili: kama kitanzi Kwa… Inayofuata au kama kitanzi Kwa kila.

Mzunguko "Kwa ... Inayofuata"

Msafara Kwa… Inayofuata hutumia kigezo ambacho huchukua thamani kwa mpangilio kutoka kwa safu fulani. Kwa kila mabadiliko ya thamani ya kutofautiana, vitendo vilivyofungwa katika mwili wa mzunguko hufanyika. Hii ni rahisi kuelewa kutoka kwa mfano rahisi:

Kwa i = 1 hadi 10 Jumla = Jumla + iArray(i) Inayofuata i

Katika kitanzi hiki rahisi Kwa… Inayofuata variable hutumiwa i, ambayo huchukua maadili 1, 2, 3, ... 10, na kwa kila moja ya maadili haya, msimbo wa VBA ndani ya kitanzi unatekelezwa. Kwa hivyo, kitanzi hiki kinajumuisha vipengele vya safu. iArray katika kutofautiana Jumla.

Katika mfano hapo juu, nyongeza ya kitanzi haijabainishwa, kwa hivyo kuongeza utofauti i kutoka 1 hadi 10, chaguo-msingi ni nyongeza 1... Walakini, katika hali zingine ni muhimu kutumia viwango tofauti vya nyongeza kwa kitanzi. Hii inaweza kufanywa kwa kutumia neno kuu Hatua yakama inavyoonyeshwa katika mfano ufuatao rahisi.

Kwa d = 0 Hadi 10 Hatua 0.1 dTotal = dTotal + d Inayofuata d

Kwa kuwa katika mfano hapo juu, hatua ya kuongeza imewekwa sawa na 0.1, kisha kutofautiana dJumla kwa kila marudio ya mzunguko huchukua maadili 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Kuamua hatua ya kitanzi katika VBA, unaweza kutumia thamani hasi, kwa mfano, kama hii:

Kwa i = 10 hadi 1 Hatua -1 iArray(i) = i Inayofuata

Hapa kuna ongezeko -1, kwa hivyo kutofautisha i kwa kila marudio ya mzunguko huchukua maadili 10, 9, 8, ... 1.

Kitanzi "Kwa Kila"

Msafara Kwa kila sawa na mzunguko Kwa… Inayofuata, lakini badala ya kurudia juu ya mlolongo wa maadili kwa tofauti ya kaunta, kitanzi Kwa kila hufanya seti ya vitendo kwa kila kitu katika kikundi maalum cha vitu. Katika mfano ufuatao, kwa kutumia kitanzi Kwa kila inaorodhesha laha zote kwenye kitabu cha sasa cha Excel:

Fifisha Karatasi Kama Laha ya Kazi kwa Kila Laha katika Laha za Kazi MsgBox "Найден лист: " & wSheet.Name Wheet Inayofuata

Taarifa ya kukatiza kwa kitanzi "Toka Kwa"

Opereta Toka Kwa kutumika kukatiza mzunguko. Mara tu taarifa hii inapokutana katika msimbo, programu inamaliza utekelezaji wa kitanzi na kuendelea na utekelezaji wa taarifa ambazo ziko kwenye msimbo mara baada ya kitanzi hiki. Hii inaweza kutumika, kwa mfano, kutafuta thamani maalum katika safu. Ili kufanya hivyo, kwa kutumia kitanzi, kila kipengele cha safu kinachunguzwa. Mara tu kipengele kinachohitajika kinapatikana, hakuna haja ya kuangalia kwa wengine - mzunguko umeingiliwa.

Programu ya Opereta Toka Kwa inavyoonyeshwa katika mfano ufuatao. Hapa kitanzi kinarudia zaidi ya maingizo 100 ya safu na kulinganisha kila moja na thamani ya kutofautisha. dVal… Ikiwa kilinganishi kitapatikana, basi kitanzi kitakatishwa:

Kwa i = 1 Hadi 100 Ikiwa dValues(i) = dVal Kisha IndexVal = Natoka Kwa Mwisho Ikiwa Inayofuata i

Kitanzi cha Kufanya Wakati katika Visual Basic

Msafara Fanya wakati hutekeleza kizuizi cha msimbo mradi tu hali maalum imetimizwa. Ufuatao ni mfano wa utaratibu Chini, ambayo kwa kutumia kitanzi Fanya wakati Nambari za Fibonacci zisizozidi 1000 zinaonyeshwa kwa kufuatana:

'Taratibu ndogo hutoa nambari za Fibonacci zisizozidi 1000 Sub Fibonacci() Dim i As Integer 'counter kuonyesha nafasi ya kipengele katika mfuatano Dim iFib As Integer 'huhifadhi thamani ya sasa ya mlolongo Dim iFib_Next As Integer 'inahifadhi thamani inayofuata. ya mfuatano Dim iStep As Integer 'stores size of an increment next' anzisha viambajengo i na iFib_Next i = 1 iFib_Next = 0 'Do While kitanzi kitafanya hadi thamani ya 'nambari ya Fibonacci ya sasa iwe kubwa kuliko 1000 Fanya huku iFib_Next <1000 Ikiwa i = 1 Kisha 'kesi maalum kwa kipengele cha kwanza iStep = 1 iFib = 0 Vinginevyo 'hifadhi saizi ya nyongeza inayofuata kabla ya kubatilisha 'thamani ya sasa ya mlolongo iStep = iFib iFib = iFib_Next End Ikiwa 'chapisha nambari ya sasa ya Fibonacci kwenye safuwima A ya lahakazi amilifu 'katika safu na faharisi i Seli(i , 1).Thamani = iFib 'kokotoa nambari inayofuata ya Fibonacci na uongeze faharasa ya nafasi ya kipengele kwa 1 iFib_Next = iFib + iStep i = i + 1 Kitanzi Mwisho Ndogo

Katika mfano uliotolewa, hali iFib_Inayofuata <1000 kuangaliwa mwanzoni mwa kitanzi. Kwa hiyo, ikiwa thamani ya kwanza iFib_Inayofuata Ikiwa kulikuwa na zaidi ya 1000, basi kitanzi hakitawahi kutekelezwa.

Njia nyingine ya kutekeleza kitanzi Fanya wakati - weka hali si mwanzoni, lakini mwisho wa kitanzi. Katika kesi hii, kitanzi kitatekelezwa angalau mara moja, bila kujali hali hiyo inakabiliwa.

Kwa utaratibu, mzunguko kama huo Fanya wakati na hali ya kukaguliwa mwishoni itaonekana kama hii:

Fanya ... Kitanzia Wakati iFib_Next <1000

Цикл "Fanya Hadi" kwenye Visual Basic

Msafara Fanya Mpaka sawa na mzunguko Fanya wakati: kizuizi cha nambari kwenye mwili wa kitanzi kinatekelezwa tena na tena hadi hali iliyoainishwa ifikiwe (matokeo ya usemi wa masharti ni Kweli) Katika utaratibu unaofuata Chini kwa kutumia mzunguko Fanya Mpaka pata maadili kutoka kwa visanduku vyote kwenye safu wima A laha ya kazi hadi safu wima itakapokutana na seli tupu:

iRow = 1 Fanya Mpaka IsEmpty(Cells(iRow, 1)) 'Thamani ya seli ya sasa imehifadhiwa katika safu dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Thamani iRow = iRow + 1 Loop

Katika mfano hapo juu, hali IsEmpty(Seli(iRow, 1)) iko mwanzoni mwa muundo Fanya Mpaka, kwa hivyo kitanzi kitatekelezwa angalau mara moja ikiwa seli ya kwanza iliyochukuliwa si tupu.

Walakini, kama inavyoonyeshwa kwenye mifano ya kitanzi Fanya wakati, katika hali zingine ni muhimu kwamba kitanzi kitekelezwe angalau mara moja, bila kujali matokeo ya awali ya usemi wa masharti. Katika kesi hii, usemi wa masharti unapaswa kuwekwa mwishoni mwa kitanzi, kama hii:

Fanya ... Piga Kitanzi Mpaka IsEmpty(Seli(iRow, 1))

Acha Reply