Массивті пайдаланудан бҧрын міндетті тҥрде Dim операторының
көмегімен жариялап, массивте сақталатын мəндер тҥрін көрсету керек.
Массивтегі барлық мəндер бір деректер тҥріне жату керек. Массивті
жариялау кезінде Variant тҥрін пайдалана отырып, осы шектеуден өтіп
кетуге болады. Мҧндай жағдайда массив элементтері əртҥрлі типті
деректердің мəндерін қабылдай алады.
Массивті жариялау операторының синтаксисі:
Dim <МассивтіңАты> (<көлем1>, <көлем2>, ...) As <ДеректерТҥрі>
Жақшада көрсетілген шамалар массив көлемдерін белгілейді -
индекстер санын жəне əрбір нақты индекстің барынша рҧқсат етілетін
мəнін белгілейді. Бҧл ретте массив элементтерін индекстеу өздігінен
нөлден басталады. Сонымен, жариялым
DIM ARRAY (9) AS INTEGER
бҥкіл типтің ауыспалысы болып табылатын 10 элементтің бір өлшемді
массивін айқындайды, ал жариялым
DIM ARRAY (4, 9) AS VARIANT
əмбебап Variant типтің ауыспалылары болып табылатын елу (5 х 10)
элементінен ек өлшемді массивті айқындайды.
Массивті жариялау кезінде индекстің жоғарғы шегін ғана емес,
сондай-ақ төменгі шегін көрсетуге болады, яғни нақты индекс
массивінің өзгеру диапазонын айқын белгілеуге болады, бҧл ретте
төменгі шегі кез-келген бҥтін сан болуы мҥмкін. Осындай
анықтаманың синтаксисі:
Dim <МассивтіңАты> (<мин1> То <макс1>, ) As <ДеректерТҥрі>
Келтірілген мысалдарда тіркелген көлемнің массивтері туралы
айтылды, олардың элементтерінің саны массивті сипаттау кезінде Dim
операторында айқын көрсетілген. Мҧндай массивтер статикалық деп
аталады. VBA-да көлемдері сипаттау кезінде тіркелмейтін,
динамикалық массивтерді де пайдалануға болады. Динамикалық
массивтің көлемін анықтау тікелей бағдарламаны орындау кезінде
жасалуы мҥмкін.
Динамикалық массивті анықтау кезінде Dim операторында
массивтің атынан кейін бос жақшалар жəне ауыспалы тҥрінің
сипаттамасы тҧру керек. Индекстер саны мен оларды өзгерту
диапазоны белгіленбейді. Массивті пайдаланудан бҧрын ReDim
операторын енгізу керек, ол динамикалық массив индекстерінің
көлемдігін жəне өзгеру диапазондарын белгілейді.
Динамикалық массивтің көлемдерін анықтау жəне жариялау
синтаксисі:
Dim <МассивтіңАты> () As <ДеректерТҥрі>
ReDim <МассивтіңАты> (<көлем1>, <көлем2>, ...)
Динамикалық массивті жариялау жəне көлемдерін анықтау
мысалын, содан кейін осы массивтің одан арғы көлемінің өзгеру
мысалын келтірейік:
Dim dArray () As Variant
ReDim dArray (1, 2)
dArray (0, 0) = 2
dArray (0,
1
) = 3
k = dArray (0, 0) + dArray (0, 1)
ReDim dArray (k)
dArray (0) = (Жол1)
Осы мысалда dArray массиві алдымен алты элементтен тҧратын екі
өлшемді массив ретінде айқындалады, содан кейін бір өлшемді массив
ретінде қайта айқындалады, бҧл ретте индекстің жоғарғы шегі k
ауыспалының мəнімен белгіленеді.
8.4.
Ауыспалылар мен рәсімдердің әрекет ету аясы
VBA-дағы бардық рəсімдердің, қызметтердің, ауыспалылар мен
константалардың өз əрекет ету аясы бар. Бҧл барлығының
бағдарламалық кодтың белгіленген жерінде - сипатталған жерінде
пайдаланылуы мҥмкін екенін білдіреді. Мысалы, егер А ауыспалы
Procl рəсімінің деңгейінде Dim операторының көмегімен сипатталған
болса, онда дəл осы рəсім оның əрекет ету аясы болып табылады. Егер
басқа Proc2 рəсімі болса, онда осы ауыспалыны жариялымсыз
пайдалануға болмайды.
Ауыспалылардың
әрекет
ету
аясы.
Ауыспалының
бағдарламаның қай жерінде жəне қалай сипатталғаны, жадқа
қаншалықты ҧзақ ―өмір сҥретіні‖ жəне тағайындалған мəнін
сақтайтыны оның əрекет ету аясы айқындайды. Ауыспалылардың
əрекет ету аясын айқындау кезінде ҥш тҥрлі деңгей бар: рəсім деңгейі,
модуль деңгейі жəне жоба деңгейі.
Рәсім деңгейіндегі ауыспалыны айқындау ҥшін, оның сипаттамасы
осы рəсімнің деңгейіне орналасады.
Модуль деңгейіндегі рəсімді айқындау ҥшін жəне оны осы
модульдің барлық рəсімінде ортақ пайдалану ҥшін ең қолжетімді ету
ҥшін оның сипаттамасын модульдерді жариялау секциясына - қандай
да бір рəсімдердің немесе қызметтердің мəтінінің алдына
орналастырған жөн. Бҧл ретте əрекет ету аясының айқын сипаттамасы
пайдаланылуы мҥмкін. Бҧл жағдайда «Dim» өзекті сөзінің орнына,
«Private» өзекті сөзі пайдаланылады.
Жоба деңгейіндегі ауыспалыны сипаттау ҥшін, оның сипаттамасын
жоба модульдерінің біріндегі жариялым секциясына орналастыру
керек; бҧл ретте міндетті тҥрде «Public» өзекті сөзі пайдаланылу керек.
Осындай тəсілмен сипатталған ауыспалылар жобаның кез-келген
модулінде пайдаланылуы мҥмкін.
Жоғарыда айтылғанның барлығы константалар мен массивтердің
əрекет ету аясының сипаттамасы мен анықтамасына жатады.
Ауыспалылар ҥшін оларды сипаттайтын, деңгейін өзгертпейтін,
бірақ рəсім деңгейінде сипатталған ауыспалының мəнін жҧмысы
аяқталғаннан кейін де сақтау мҥмкіндігін беретін тағы бір тəсіл бар.
Ол ҥшін статикалық ауыспалы ретінде айқындалатын Static
ауыспалыны пайдаланған жөн. Осындай ауыспалы жадта бөлінген
орынды жəне сипатталған əрі пайдаланылған рəсім аяқталғаннан кейін
де өз мəнін сақтайды.
Бҧған қарамастан статикалық ауыспалы басқа рəсімдерде
пайдаланыла алмайды. Оның əрекет ету аясы емес, тек өмір сҥру
уақыты ғана өзгереді. Егер статикалық ауыспалы сипатталған рəсім
қайта шақырылса, онда бҧл ауыспалы бҧдан бҧрынғы шақыру кезінде
рəсімнің жҧмысы аяқталу сəтінде ие болған мəнін сақтайды. Әдетті
(статикалық емес) ауыспалылар қайтадан инициалданады жəне рəсімге
кіру кезінде бос мəндер алады.
Рәсімдер мен қызметтердің әрекет ету ӛрістері. Рəсімдер мен
қызметтердің əрекет ету аясының тек екі деңгейі бар: модуль деңгейі
жəне жоба деңгейі. Өздігінен жоба деңгейі пайдаланылады. Рəсім
немесе қызмет жобасында кез-келген басқа рəсім немесе қызмет
шақырылуы мҥмкі. Жоба деңгейіндегі рəсімдер мен қызметтерді
сипаттау кезінде міндетті емес «Public» өзекті сөзі пайдаланылуы
мҥмкін. Осы сөздің болуы немесе болмауы рəсімге əсер етпейді.
Егер тек модуль деңгейінде пайдаланылатын рəсімді сипаттау
қажет болса, онда ол ҥшін «Private» өзекті сөзі қолданылады. Алайда
рəсімнің осындай сипаттамасы рəсім ҥшін əрекет ету аясын
қысқартады жəне жеке-дара пайдаланылуына тыйым салады. Оны тек
басқа рəсімнен шақыруға болады.
Рəсімдерді немесе қызметтерді сипаттау кезінде «Static» өзекті сөзі
пайдаланылуы мҥмкін. Ол рəсімнің əрекет ету аясына əсер етпейді,
бірақ осы рəсімнің немесе қызметтің ішінде сипатталған барлық
ауыспалыға əсер етеді. Бҧл жағдайда барлық жергілікті ауыспалы
Static мəртебесіне ие болады жəне рəсім аяқталғаннан кейін жадта
сақталады; қайтадан шақыру кезінде бҧрынғы мəндері сақталады.
Келесі мысалды қарастырайық.
Public A1 As String
Private A2 As Integer
Dim A3 As Single
Sub Proc1()
Достарыңызбен бөлісу: |