VBA-ның басқарушы структуралары
Программаның орындалу үрдісін басқару үшін VBA тілінде көп деген түрлі структкралары бар. Олар арқылы шарт бойынша программаның ағу барысын айырлауға
(тармақтауға), бірнеше баламадан таңдау жасауды, түрлі қайталануды (циклды) және де ішкі программаларды шақырып қайта кері оралуды ұйымдастыруға болады.
Тілдің негізгі конструкцияялары болып табылатын процедуралары мен функцияларын басқарушы структуралары қатарына жатқызуға болады. Бүл қатарға, кең қолдануға
ұсынбасақта, әйгілі белгі арқылы өту амалын да қосуға орынды.
|
Белгі арқылы өту
Бұл оператордың бірнеше түрі бар.GoTo белгі;
'белгі' деген барар жердегі белгінің атауы. Басқару (орындалу кезегі) шартсыз (міндетті) түрде белгісі бар операторға ауысады.
GoSub ... Return. Синтасисі GoSub белгі1
... белгі1 ... Return Оператордың бұл түрі белгі мен Return операторының арасындағы кодты ішкі программа подпрограмма ретінде қолдануға мүмкіндік береді.
Return операторы кездескен соң басқару GoSub операторынаң кейнгі оператор алады. On өрнек GoTo белгі1 , белгі2... Өрнек 255-тен аспайтын сан мәнін туындау керек. Басқару мәнге
сәйкес белгіге ауысады. On өрнек GoSub белгі, белгі ... Бұл оператор басқаруды өрнектің мәніне сәйкес подпрограммаға ауыстырады.
Шындыққа келгенде белгіге өту
операторлары программаның схемасын шырмайлап, түсініксіз қылады. Оларды қолдануды шектеген немесе мүлде қолданбаған жөн.
|
Шарт бойнша тармақтау
If Шарт..Then Операторлар тобы [Else Операторлар тобы] Enf If Бұл оператор есептеу процесін екі жолдың біреуіне түсіреді. Шарт ретінде өрнек қолданылады. Ол өрнектің мәні логикалық болуы керек.
Операторлар тобына кез-келген операторлар кіре алады. Тік жақша ішіндегі конструкциялар жоқ болуы да мүмкін. Ағылшын әріптерімен көрсетілген жазулардың конструкцияда болуы - міндет.
If Шарт Then Операторлар тобы [ElseIf Шарт Then Операторлар тобы] [Else Операторлар тобы] End If Мына оператор `ElseIf шарт` арқылы бірнеше жолдың ішінен керек тармақты тауп оған есеп процесін жолдайды.
Select Case Талданатын өрнек Case Мәндер тізімі Операторлар тобы Case Мәндер тізімі Операторлар тобы [Case Else Операторлар тобы] End Select
Осы оператор тармақтауды, яғни үрдістің бағытын өзгертеді, өрнектің мәніне қарап. Өрнектің мәні қай тізімге кіреді, соған сәйкес операторлар орындалып кетеді. Оларды орындап болғасын, End Select-тен кейінгі оператор басқаруды өзіне алады.
Егер еш тізімге табылған мән кірмесе, қате пайда болады.Сол себептен Case Else операторын қосқан өте орынды. Тізімді көрсетерде салыстыру таңбаларын ұрықсат бар (>,<,<>,<=,>=).
|
Циклдер
While Шарт Операторлар тобы Wend Шарт өрнегі логикалық мәнді туындауы кажет.Операторлар тобы мән шындықты белгілегенше орындалады. Егер циклға
енерде өрнек мәні жалған болса операторлар тобы мүлде орындалмайды. Операторды сирек қолдану керек.
Do While/Until Шарт Операторлар тобы Loop
Do Операторлар тобы Loop While/Until Шарт Алдынғы екі операторда ортадағы операторлар тобы орындалады
While жағдайында шарт шын болып тұрса, ал Until жағдайында - шын болғанша. Шарт тексеруді оператордың басына немесе соңына орналастыруға болады.
For Цикл санағышы =бастапқы мән To сонғы мән [ қадам мәні] Операторлар тобы Next
Кең қолданылатын цикл операторының түрі. Оперторлар тобы цикл айнымалысы (санағышы) бастапқы мәннен соңғыға жеткенше оралып орындалады. Айнымалы мәні қадамға өзгеріп отырады. Егер бұл шама түсіп қалса қадам бір деп саналады.
For Each объектАатауы In коллекцияАты Операторлар тобы Next Оператор белгілі коллекцияға кіретін барлық объекттерді қарап, олармен түрлі амалдарды орындауға арналған.
Көпшіліктің (коллекцияАты) мүшесінің методтары мен қасиеттеріне объектАтауы арқылы жетуге иболады.
|
Процедуралар (Макростар)
Синтаксисі: [Private/Public][Static] Sub ([Параметрлердің тізімі]) Операторлар тобы End Sub
Егер Public мінездемесі болса бұл процедураға жоба ортасының қай жерінен болсада жетуге болады.
Private болса, жету орынды тек модул ортасында. Static -процедураның айнымалылары тұрақты дегенді білдіреді(шақырылған сайын мәндерін өшірмейді).
Параметрлерді тапсыру синтаксисі: [Optional][ByVal/ByRef] Айнымалы атауы As Типы[= Мәні ] Айнымалының типын көрсету өте маңызды іс. Міндетті түрде
көрсетілмейтін параметрдің алғашқы мәнін көрсету керек. Егер ол айнымалы тізімнен түсіп қалса, интерпретатор өзі алғашғы мәнді айнымалыға меншіктей қояды. Параметрдің
міндетті емес екенін Optional кілттік сөзі танытады. Ал, ByRef, ByVal кілттік сөздері параметрдің не мәні, не сілтемесі арқылы тапсырылатынын көрсетеді. Бұл екі айырмашылықты мұқият түсініп алу қажет, айтпесе күтпеген нәтижелерге тап болуыңыз мүмкін.
Процедураны шақырғанда атын жазу керек, сол жағынан дөңгелек жақша ішінде, бар болса, параметрлердің тізімін орналастыру қажет. Кей кезде процедураның атауының алдына Call
сөзін қоса аласыз. Үндемеу принципы бойнша параметр сілтемесі арқылы тапсырылады.
|
Функциялар
Синтаксисі: [Private/Public][Static] Function([Параметрлердің тізімі]) Операторлар тобы
Функция атауы = Мән End Function
Егер Public мінездемесі болса бұл функцияға жоба ортасының қай жерінен болсада жетуге болады.
Private болса, жету орынды тек модул ортасында. Static -процедураның айнымалылары тұрақты дегенді білдіреді(шақырылған сайын мәндерін өшірмейді).
Параметрлерді тапсыру синтаксисі: [Optional][ByVal/ByRef] Айнымалы атауы As Типы[= Мәні ] Айнымалының типын көрсету өте маңызды іс. Міндетті түрде
көрсетілмейтін параметрдің алғашқы мәнін көрсету керек. Егер ол айнымалы тізімнен түсіп қалса, интерпретатор өзі алғашғы мәнді айнымалыға меншіктей қояды. Параметрдің
міндетті емес екенін Optional кілттік сөзі танытады. Ал, ByRef, ByVal кілттік сөздері параметрдің не мәні, не сілтемесі арқылы тапсырылатынын көрсетеді. Бұл екі айырмашылықты мұқият түсініп алу қажет, айтпесе күтпеген нәтижелерге тап болуыңыз мүмкін.
Функцияны шақырғанда оның атын өрнек арасында жазу керек, сол жағынан дөңгелек жақша ішінде, бар болса, параметрлердің тізімін көрсетіп.
Функция мән туындап сол өрнектің есебіне қайырып қосады. Процелура мән қайырмайды, ал функция болса, міндетті түрде шақырған жерге мән қайырады.
|
Таңдау конструкциялары
Кей жағдайларда айнымалыға мәнді белгілі шарттың орындалуы бойынша меншіктеу керек болады. Ондайда VBA келесі операторларды қолдануға ұсынады:
- Switch(Шарт1, Мән1, Шарт2, Мән2,...)
Dim Baga
Dim Akil
Baga = 5
Akil=Switch( Baga<4,"Тапсырмапсын ғой!", Baga>=4,"Жарайсын батыр!")
MsgBox Akil Akil мәні меншіктеледі Baga мәніне қарай.
- IIF(Өрнек, Шындықтағы, Жалғандағы)
Dim Baga
Baga=4
MsgBox Iif(Baga,"Тапсырмапсын ғой!","Жарайсын батыр!")
Бұл жағдайда экран бетіне екінші хабарлама шығады.
-
Choose(Индекс, Мән1, Мән2, Мән3,...)
Dim Baga
Dim Soz As String
Baga=4
'Soz=Choose(Baga,
"Қанағатсыз","Қанағатсыз",
"Қанағат","Жақсы","Үздік")
Soz айнымалысының мәні болады "Жақсы" жолы.
|
Циклдан мерзімсіз шығу
Кейде есептеу үрдісін тоқтату немесе үзу керек болады. Кейде араласып та кету керек. Сол үшін келесі операторлар бар:
DoEvents- тосып қалған процестерді эорлап орындату. Кейде ұзын процестер ресурстарды ұстап басқаларға жұмыс істетпейды, сонда осы оператор көмектеседі.
End- есептеу тоқтайды. Айнымалыла өшеді, файлдар жабылады. Есеп процесін басынан бастау керек.
Stop-есепті кідіртеді. Айнымалылар мен файлдарда еш өзгеріс тумайды. Тоқтаған жерден процесті жалғастыру болады.
|
Сыртқы сілтемелер
Сыртқы сілтемелер тілген кірмейтін басқа библиотекалардың функциялары жету үшін қолданылады. Мысалы, API функцияларына.
|
VBA-ның редакторы мен жобалары туралы
|