VBAдагы өзгөрмөлөр жана туруктуулар

VBAда, башка программалоо тилдериндей эле, өзгөрмөлөр жана константалар ар кандай маанилерди сактоо үчүн колдонулат. Аты айтып тургандай, өзгөрмөлөр өзгөрүшү мүмкүн, ал эми туруктуулар белгиленген маанилерди сактайт.

Мисалы, туруктуу Pi 3,14159265 маанисин сактайт… “Pi” саны программаны аткаруу учурунда өзгөрбөйт, бирок мындай маанини константа катары сактоо дагы да ыңгайлуу.

Ошол эле учурда биз өзгөрмө колдоно алабыз sVAT_Rate сатып алынган товарларга КНСтин ставкасын сактоого. Өзгөрмө маани sVAT_Rate сатып алынган буюмга жараша ар кандай болушу мүмкүн.

Маалыматтын түрлөрү

Бардык өзгөрмөлөр жана константалар белгилүү бир маалымат түрүнө кирет. Төмөнкү таблица VBAда колдонулган маалымат түрлөрүн сыпаттамасы жана мүмкүн болгон маанилердин диапазону менен келтирет:

Маалыматтын түрү көлөмбаяндооМаанилердин диапазону
Байт1 байтоң бүтүн сандар; көбүнчө бинардык маалыматтар үчүн колдонулат0 тартып 255 үчүн
Буль2 байтЧын же жалган болушу мүмкүнЧын же Жалган
бүтүн2 байтБүтүн сандар (бөлчөк бөлүгү жок)-32тан +768ке чейин
узун4 байтЧоң бүтүн сандар (бөлчөк бөлүгү жок)от -2 147 483 648 до +2 147 483 647
жалгыз4 байтЖалгыз тактык калкыма чекит саны-3.4e38ден +3.4e38ге чейин
Double8 байтКош тактык калкыма чекит саны-1.8e308ден +1.8e308ге чейин
акча8 байтОндук орундардын белгиленген саны менен калкылуучу чекит саныот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
дата8 байтДата жана убакыт – Дата түрүндөгү маалыматтар калкыма чекиттик сан менен көрсөтүлөт. Бул сандын бүтүн бөлүгү датаны, ал эми бөлчөк бөлүгү убакытты билдирет.1-жылдын 100-январынан 31-жылдын 9999-декабрына чейин
зат4 байтОбъект шилтемесиАр кандай объект шилтеме
арканөзгөрүп жататБелгилер топтому. String түрү туруктуу же өзгөрүлмө узундукта болушу мүмкүн. Көбүнчө өзгөрүлмө узундукта колдонулатТуруктуу узундук - болжол менен 65 белгиге чейин. Өзгөрмө узундук - болжол менен 500 миллиард белгиге чейин
Variantөзгөрүп жататДата, флоат же символ сап болушу мүмкүн. Бул түрү маалыматтардын кандай түрү киргизиле тургандыгы алдын ала белгилүү болбогон учурларда колдонулат.Сан – Double, сап – Сап

Албетте, жогорудагы таблицаны колдонуу жана туура маалымат түрүн тандоо, сиз эстутумду үнөмдүү колдоно аласыз (мисалы, маалымат түрүн тандаңыз. бүтүн ордуна узун or жалгыз ордуна Double). Бирок, көбүрөөк компакттуу маалымат түрлөрүн колдонууда, сиздин кодуңуз аларга пропорционалдуу эмес чоң маанилерди батырууга аракет кылбашы үчүн сак болушуңуз керек.

Өзгөрмөлөрдү жана туруктууларды жарыялоо

Котормочунун эскертүүсү: VBAдагы өзгөрмөлөр жөнүндө сөз кылып жатып, дагы бир маанилүү жагдайды белгилей кетүү керек. Эгерде биз өзгөрмө жарыялап, бирок ага эч кандай маани бербесек, анда ал демейки маани менен инициализацияланат:

• текст саптары бош саптар менен инициализацияланат;

• сандар — 0 мааниси;

• түрү өзгөрмөлөр Буль - жалган;

• даталары – 30-декабрь, 1899-жыл.

Өзгөрмө же туруктуу колдонуудан мурун, аны жарыялоо керек. Бул үчүн, макроко төмөнкү жөнөкөй код сабын кошуңуз:

Dim Имя_Переменной As Тип_Данных

Жогорудагы код сабында Variable_name коддо колдонула турган өзгөрмөнүн аты жана Data_Type Бул макалада бир аз мурда берилген таблицадагы маалымат түрлөрүнүн бири болуп саналат. Мисалы:

Dim sVAT_Rate Single Dim i As Integer

Туруктуулар да ушундай эле жарыяланат, бирок константаларды жарыялоодо алардын мааниси дароо көрсөтүлүшү керек. Мисалы, бул сыяктуу:

Const iMaxCount = 5000 Const iMaxScore = 100

Excelде өзгөрмөлөрдү жарыялоонун кереги жок. Демейки боюнча, Excelде бардык киргизилген, бирок жарыяланбаган өзгөрмөлөр түрү болот Variant жана сандык жана тексттик маанини да кабыл ала алат.

Ошентип, программист жаңы өзгөрмөнү каалаган убакта колдоно алат (ал жарыялана элек болсо да) жана Excel аны түрдөгү өзгөрмө катары карайт Variant. Бирок, бул эмне үчүн болбосун, бир нече себептер бар:

  1. Эстутумдун колдонулушу жана эсептөө ылдамдыгы. Эгер сиз маалымат түрүн көрсөтүү менен өзгөрмө жарыялабасаңыз, демейки боюнча ал түргө орнотулат. Variant. Бул маалымат түрү башка маалымат түрлөрүнө караганда көбүрөөк эстутумду колдонот. Ар бир өзгөрмө үчүн бир нече кошумча байт көп угулбашы мүмкүн, бирок иш жүзүндө программаларда миңдеген өзгөрмөлөр болушу мүмкүн (өзгөчө массивдер менен иштөөдө). Ошондуктан, сыяктуу өзгөрмөлөр тарабынан колдонулган кошумча эс Variant, түрдөгү өзгөрмөлөргө салыштырмалуу бүтүн or жалгыз, олуттуу суммага чейин кошууга болот. Мындан тышкары, түрдөгү өзгөрмөлөр менен операциялар Variant башка түрдөгү өзгөрмөлөргө караганда бир кыйла жай аткарылат, тиешелүүлүгүнө жараша типтеги кошумча миң өзгөрмөлөр Variant эсептөөлөрдү бир кыйла жайлатышы мүмкүн.
  2. Өзгөрмө аттарындагы каталардын алдын алуу. Эгерде бардык өзгөрмөлөр жарыяланган болсо, анда VBA операторун колдонсо болот - Option Explicit бардык жарыяланбаган өзгөрмөлөрдү аныктоо үчүн (бул тууралуу кийинчерээк сүйлөшөбүз). Бул туура эмес жазылган өзгөрмө аталышынын натыйжасында программадагы катанын көрүнүшүн жок кылат. Мисалы, аталган өзгөрмө колдонуу sVAT_Rate, сиз ката кетирип, бул өзгөрмөгө маани берип, "VATRate = 0,175" деп жазсаңыз болот. Мындан ары өзгөрүлмө деп күтүлүүдө sVAT_Rate 0,175 маанисин камтышы керек – бирок, албетте, андай эмес. Эгерде бардык колдонулган өзгөрмөлөрдү милдеттүү түрдө жарыялоо режими иштетилген болсо, анда VBA компилятору катаны дароо көрсөтөт, анткени ал өзгөрмө таба албайт. VATRrate жарыялангандардын арасында.
  3. Өзгөрмөнүн жарыяланган түрүнө дал келбеген маанилерди бөлүп көрсөтүү. Эгер сиз белгилүү бир түрдөгү өзгөрмө жарыялап, ага башка типтеги маалыматтарды дайындоого аракет кылсаңыз, сиз ката аласыз, ал оңдолбосо, программанын бузулушуна алып келиши мүмкүн. Бир караганда, бул өзгөрмөлөрдү жарыялабоо үчүн жакшы себеп болуп көрүнүшү мүмкүн, бирок, чындыгында, өзгөрмөлөрдүн бири туура эмес маалыматтарды алганы белгилүү болгон, ал кабыл алынышы керек болгон - ошончолук жакшы! Болбосо, программа иштей берсе, натыйжалар туура эмес жана күтүүсүз болуп калышы мүмкүн жана каталардын себебин табуу бир топ кыйыныраак болот. Ошондой эле макро "ийгиликтүү" аткарылышы мүмкүн. Натыйжада, ката байкалбай калат жана туура эмес маалыматтар менен иш улана берет!

Ушуга байланыштуу, туура эмес маалымат түрүн аныктоо жана коддогу мындай каталарды мүмкүн болушунча эртерээк оңдоо керек. Ушул себептерден улам, VBA макросун жазууда бардык өзгөрмөлөрдү жарыялоо сунушталат.

Option Explicit

Оператор Option Explicit VBA кодунда колдонула турган бардык өзгөрмөлөрдүн жарыяланышына себеп болот жана бардык жарыяланбаган өзгөрмөлөрдү компиляция учурунда ката катары белгилейт (коддун аткарылышы башталганга чейин). Бул операторду колдонуу кыйын эмес – VBA файлынын эң жогору жагына бул сапты жазыңыз:

Option Explicit

Ар дайым киргизгиңиз келсе Option Explicit ар бир жаңы VBA модулунун үстүнө, бул автоматтык түрдө аткарылышы мүмкүн. Бул үчүн, сиз параметрди иштетүү керек Өзгөрмө декларациясын талап кылуу VBA редакторунун жөндөөлөрүндө.

Бул төмөнкүдөй жасалат:

  • Visual Basic Editor менюсунан чыкылдатыңыз аспаптар > Жолдор
  • Пайда болгон диалог терезесинде өтмөктү ачыңыз Editor
  • Кутучаны белгилеңиз Өзгөрмө декларациясын талап кылуу жана пресс-релиздер OK

Иштетилгенде, сап Option Explicit ар бир жаңы түзүлгөн модулдун башында автоматтык түрдө киргизилет.

Өзгөрмөлөрдүн жана константалардын чөйрөсү

Ар бир жарыяланган өзгөрмө же туруктуу өзүнүн чектелген чөйрөсүнө, башкача айтканда, бул өзгөрмө бар программанын чектелген бөлүгүнө ээ. Колдонуу чөйрөсү өзгөрмөнүн же туруктуунун декларациясы кайда жасалганына жараша болот. Мисалы, өзгөрмөнү алалы sVAT_Rate, бул функцияда колдонулат Жалпы баасы. Төмөнкү таблицада өзгөрмөлөрдү аныктоонун эки варианты талкууланат sVAT_Rateмодулда эки башка позицияда жарыяланган:

Опция Ачык Dim sVAT_Rate Жалгыз Функция катары Total_Cost() Double As ... End Function
Эгерде өзгөрмө sVAT_Rate модулдун эң башында жарыяланган болсо, анда бул өзгөрмөнүн масштабы бүт модул болот (б.а. өзгөрмө sVAT_Rate Бул модулдун бардык процедуралары менен таанылат).

Демек, функцияда болсо Жалпы баасы туруксуз sVAT_Rate кандайдыр бир маани ыйгарылат, андан кийин ошол эле модулдун ичинде аткарылган кийинки функция өзгөрмөнү колдонот sVAT_Rate ошол эле мааниде.

Бирок, башка модулда жайгашкан кандайдыр бир функция чакырылса, анда ал үчүн өзгөрмө sVAT_Rate билинбей калат.

Option Explicit Function Total_Cost() Double Dim sVAT_Rate As Single... Аяктоочу функция
Эгерде өзгөрмө sVAT_Rate функциянын башында жарыяланды Жалпы баасы, анда анын чөйрөсү ушул функция менен гана чектелет (б.а. функциянын ичинде Жалпы баасы, сиз өзгөрмө колдоно аласыз sVAT_Rate, бирок сыртта эмес).

колдонууга аракет кылып жатканда sVAT_Rate башка процедурада, VBA компилятору ката жөнүндө кабарлайт, анткени бул өзгөрмө функциядан тышкары жарыяланган эмес Жалпы баасы (оператор колдонулган шартта Option Explicit).

Жогоруда көрсөтүлгөн мисалда өзгөрмө ачкыч сөз менен модулдун деңгээлинде жарыяланган курчу. Бирок, жарыяланган өзгөрмөлөр башка модулдарда колдонулушу мүмкүн. Мындай учурларда ачкыч сөздүн ордуна өзгөрмө жарыялоо курчу ачкыч сөз колдонулушу керек коомдук.

Айтмакчы, ачкыч сөздүн ордуна модул деңгээлинде өзгөрмө жарыялоо үчүн курчу ачкыч сөздү колдонсо болот жеке, бул өзгөрмө учурдагы модулда гана колдонууга арналгандыгын көрсөтөт.

Сиз ошондой эле константаларды жарыялоо үчүн ачкыч сөздөрдү колдоно аласыз. коомдук и жеке, бирок ачкыч сөздүн ордуна эмес Конст, аны менен бирге.

Төмөнкү мисалдар ачкыч сөздөрдү колдонууну көрсөтөт коомдук и жеке өзгөрмөлөргө жана туруктууларга колдонулат.

Опция ачык коомдук sVAT_Rate катары жалгыз коомдук конст iMax_Count = 5000 ...    
Бул мисалда, ачкыч сөз коомдук өзгөрмө жарыялоо үчүн колдонулат sVAT_Rate жана туруктуулар iMax_Count. Ушундай жол менен жарыяланган элементтердин көлөмү азыркы долбоор болуп калат.

Бул билдирет sVAT_Rate и iMax_Count каалаган долбоордун модулунда жеткиликтүү болот.

Опция Ачык Купуя sVAT_Rate катары жалгыз жеке Const iMax_Count = 5000 ...    
Бул мисалда, өзгөрмө жарыялоо үчүн sVAT_Rate жана туруктуулар iMax_Count колдонулган ачкыч жеке. Бул элементтердин масштабы учурдагы модулу болуп саналат.

Бул билдирет sVAT_Rate и iMax_Count учурдагы модулдун бардык процедураларында жеткиликтүү болот, бирок башка модулдардагы процедуралар үчүн жеткиликтүү болбойт.

Таштап Жооп