په VBA کې لوپس

داسې شرایط شتون لري کله چې د VBA برنامه اړتیا وي چې ورته عملونه څو ځله په پرله پسې ډول ترسره کړي (دا د کوډ ورته بلاک څو ځله تکرار کړئ). دا د VBA لوپونو په کارولو سره ترسره کیدی شي.

د VBA لوپونه شامل دي:

بیا، موږ به د دې دوره هر یو ته نږدې کتنه وکړو.

په بصری اساس کې د لوپ آپریټر لپاره

د لوپ آپریټر جوړښت د په بصری اساس کې کیدای شي په دوو بڼو کې تنظیم شي: د لوپ په توګه لپاره… بل یا د لوپ په توګه د هر یو لپاره.

سایکل "د… بل لپاره"

سایټ لپاره… بل یو متغیر کاروي چې په ترتیب سره د ورکړل شوي حد څخه ارزښتونه اخلي. د متغیر ارزښت د هر بدلون سره، هغه کړنې چې د دورې په بدن کې تړل شوي ترسره کیږي. دا د ساده مثال څخه پوهیدل اسانه دي:

د i = 1 څخه تر 10 پورې Total = Total + iArray(i) بل i

په دې ساده لوپ کې لپاره… بل متغیر کارول کیږي i، کوم چې په ترتیب سره ارزښتونه 1، 2، 3، … 10 اخلي، او د دې هر یو ارزښت لپاره، د لوپ دننه د VBA کوډ اجرا کیږي. په دې توګه، دا لوپ د صف عناصر راټولوي. iArray په متغیر ټول.

په پورته مثال کې، د لوپ زیاتوالی ندی مشخص شوی، نو د متغیر زیاتولو لپاره i له 1 څخه تر 10 پورې، ډیفالټ یو زیاتوالی دی 1… په هرصورت، په ځینو مواردو کې دا اړینه ده چې د لوپ لپاره مختلف زیاتیدونکي ارزښتونه وکاروئ. دا د کلیدي کلمې په کارولو سره ترسره کیدی شي ګاملکه څنګه چې په لاندې ساده مثال کې ښودل شوي.

د d = 0 څخه تر 10 پورې مرحله 0.1 dTotal = d Total + d بل d

څرنګه چې په پورته مثال کې، د زیاتوالي مرحله مساوي ټاکل شوې 0.1، بیا متغیر dټول د هر دورې تکرار لپاره 0.0، 0.1، 0.2، 0.3، … 9.9، 10.0 ارزښتونه اخلي.

په VBA کې د لوپ ګام ټاکلو لپاره، تاسو کولی شئ منفي ارزښت وکاروئ، د بیلګې په توګه، دا:

د i = 10 څخه تر 1 مرحلې -1 iArray(i) = i راتلونکی i

دلته زیاتوالی دی -1نو متغیر i د دورې د هر تکرار سره 10، 9، 8، … 1 ارزښتونه اخلي.

لوپ "د هر یو لپاره"

سایټ د هر یو لپاره د سایکل په څیر لپاره… بل، مګر د کاونټر متغیر لپاره د ارزښتونو ترتیب تکرارولو پرځای ، لوپ د هر یو لپاره د شیانو په ټاکل شوي ګروپ کې د هر څیز لپاره د عملونو سیټ ترسره کوي. په لاندې مثال کې، د لوپ په کارولو سره د هر یو لپاره په اوسني ایکسل کاري کتاب کې ټولې پاڼې شمیرل کیږي:

WSheet د WSheet په توګه د ورکشاپ په توګه د هر wsheet لپاره د WSheet MsgBox "نوم لیکنه: " & wSheet. نوم بل wsheet

د لوپ مداخلت بیان "د وتلو لپاره"

چلونکی د وتلو لپاره د دوران د ګډوډولو لپاره کارول کیږي. هرڅومره ژر چې دا بیان په کوډ کې پیښ شي ، برنامه د لوپ اجرا کول پای ته رسوي او د دې لوپ څخه سمدلاسه وروسته د کوډ کې د بیاناتو اجرا کولو ته ځي. دا کارول کیدی شي، د بیلګې په توګه، په یوه صف کې د ځانګړي ارزښت لټون کولو لپاره. د دې کولو لپاره، د لوپ په کارولو سره، د صف هر عنصر سکین شوی. هرڅومره ژر چې اړین عنصر وموندل شي ، د پاتې برخې لیدلو ته اړتیا نشته - دوره مداخله شوې.

د آپریټر غوښتنلیک د وتلو لپاره په لاندې مثال کې ښودل شوي. دلته لوپ له 100 څخه ډیر سري ننوتل تکراروي او هر یو د متغیر ارزښت سره پرتله کوي dVal… که یو میچ وموندل شي، نو لوپ ختم شوی دی:

د i = 1 څخه تر 100 پورې که dValues(i) = dVal بیا IndexVal = i د پای لپاره وتل که راتلونکی i

په بصری اساس کې د ترسره کولو پرمهال لوپ

سایټ په داسې حال کې وکړئ د کوډ یو بلاک اجرا کوي تر هغه چې ټاکل شوی شرط پوره شي. لاندې د طرزالعمل یوه بیلګه ده فرعيپه کوم کې چې د لوپ په کارولو سره په داسې حال کې وکړئ د فیبوناکي شمیرې چې له 1000 څخه ډیر نه وي په ترتیب سره ښودل کیږي:

فرعي کړنالرې د فبوناکي شمیرې تولیدوي چې له 1000 څخه ډیر نه وي Sub Fibonacci() Dim i As Integer' کاونټر د عنصر موقعیت په ګوته کولو لپاره Dim iFib As Integer 'د ترتیب اوسنی ارزښت ذخیره کوي Dim iFib_Next As Integer' راتلونکی ارزښت ذخیره کوي د ترتیب Dim iStep د Integer په توګه د راتلونکي زیاتوالي اندازه ذخیره کوي 'متغیرونه i او iFib_Next i = 1 iFib_Next = 0' Do while loop به اجرا شي تر هغه چې د اوسني فیبوناکي شمیر ارزښت له 1000 څخه ډیر وي Do پداسې حال کې چې iFib_Next = 1000 = 1 که 1 بیا د لومړي عنصر لپاره ځانګړې قضیه iStep = 0 iFib = 1 نور 'د راتلونکي زیاتوالي اندازه خوندي کړئ مخکې له دې چې د بیا لیکلو لړۍ موجوده ارزښت iStep = iFib iFib = iFib_Next End If 'په کالم A کې د اوسني فیبوناکي شمیره چاپ کړئ. فعاله کاري پاڼه 'په قطار کې د شاخص i حجرو (i , 1) سره. ارزښت = iFib' راتلونکی فیبوناکي شمیره محاسبه کړئ او د عنصر موقعیت شاخص د 1 iFib_Next = iFib + iStep i = i + XNUMX لوپ پای پای ته لوړ کړئ.

په ورکړل شوي مثال کې، حالت iFib_Next <1000 د لوپ په پیل کې چک شوی. له همدې امله، که لومړی ارزښت iFib_Next که چیرې د 1000 څخه ډیر وي، نو لوپ به هیڅکله اعدام نشي.

د لوپ پلي کولو بله لاره په داسې حال کې وکړئ - حالت په پیل کې نه بلکه د لوپ په پای کې ځای په ځای کړئ. په دې حالت کې، لوپ به لږترلږه یو ځل اعدام شي، پرته له دې چې شرط پوره شي.

په سکیماتیک ډول، دا ډول دوره په داسې حال کې وکړئ د هغه حالت سره چې په پای کې به یې معاینه شي داسې ښکاري:

دا ... لوپ پداسې حال کې چې iFib_Next <1000

په بصری اساس کې «تر هغه پورې وکړئ»

سایټ ترهغې پورې وکړئ سایکل ته ډیر ورته په داسې حال کې وکړئ: د لوپ په بدن کې د کوډ بلاک په مکرر ډول اجرا کیږي تر هغه چې ټاکل شوی حالت پوره نشي (د مشروط بیان پایله ده ریښتیني د). په راتلونکی کړنلاره کې فرعي د سایکل په کارولو سره ترهغې پورې وکړئ په یوه کالم کې د ټولو حجرو څخه ارزښتونه ترلاسه کړئ A کاري پاڼه تر هغه چې کالم د خالي حجرې سره مخ شي:

iRow = 1 تر هغه وخته پورې ترسره کړئ چې IsEmpty(Cells(iRow, 1)) 'د اوسنۍ حجرې ارزښت په dCellValues ​​dCellValues(iRow) = Cells(iRow, 1) کې ساتل کیږي. ارزښت iRow = iRow + 1 لوپ

په پورته مثال کې، حالت خالي ده(حجرې(iRow, 1)) د جوړښت په پیل کې موقعیت لري ترهغې پورې وکړئ، نو لوپ به لږترلږه یو ځل اجرا شي که چیرې لومړی اخیستل شوی حجره خالي نه وي.

په هرصورت، لکه څنګه چې د لوپ مثالونو کې ښودل شوي په داسې حال کې وکړئپه ځینو حاالتو کې دا اړینه ده چې لوپ لږترلږه یو ځل اجرا شي، پرته له دې چې د مشروط بیان لومړنۍ پایلې په پام کې ونیول شي. په دې حالت کې، شرطي بیان باید د لوپ په پای کې کیښودل شي، لکه:

وکړئ ... لوپ تر هغه چې خالي نه وي(حجرې(iRow, 1))

یو ځواب ورکړئ ووځي