Excel макросундагы өзгөрмөлөрдү жана туруктууларды түшүнүү

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

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

Эгер бир эле чоң маанини бир нече жолу колдонуу керек болсо, туруктуулар пайдалуу болушу мүмкүн. Санды көчүрүүнүн ордуна, жөн гана константтын атын жазсаңыз болот. Мисалы, сиз туруктуу маани болуп саналат Pi сактоо үчүн туруктуу "Pi" колдоно аласыз. Бул абдан чоң жана ар бир жолу аны жазуу же издөө жана көчүрүү абдан кыйын. Ошентип, эки белгини жазуу жетиштүү жана чөйрө автоматтык түрдө керектүү санды колдонот.

Excel колдонуучусу өзгөрмөлөрдү жарыялоосу керек, эгерде аларда сакталган маанини мезгил-мезгили менен өзгөртүү керек болсо. Мисалы, сиз sVAT_Rate деп аталган өзгөрмөнү орното аласыз, ал продукт үчүн учурдагы КНС ставкасын сактайт. Эгер ал өзгөрсө, аны тез эле оңдой аласыз. Бул өзгөчө Америка Кошмо Штаттарында бизнес кылгандар үчүн пайдалуу, ал жерде кээ бир товарларга КНС такыр салынбай калышы мүмкүн (жана бул салык дагы штаттан штатка айырмаланат).

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

Ар бир маалымат контейнери бир нече түрлөрдүн бири болушу мүмкүн. Бул жерде иштелип чыккан маалыматтын стандарттык түрлөрүн сүрөттөгөн таблица. Алардын көбү бар жана башталгыч адамга алар бири-бирин кайталап жаткандай сезилиши мүмкүн. Бирок бул иллюзордук сезим. Маалыматтын туура түрүн көрсөтүү эмне үчүн абдан маанилүү экенин билүү үчүн окууну улантыңыз.

Кичинекей сандар үчүн эстутумда көбүрөөк орун ээлеген маалымат түрүн колдонуу сунушталбайт. Мисалы, 1 саны үчүн Байт түрүн колдонуу жетиштүү. Бул өзгөчө алсыз компьютерлерде аткарылуучу модулдун иштешине оң таасирин тийгизет. Бирок бул жерде өтө алыска барбоо маанилүү. Эгер сиз өтө компакттуу маалымат түрүн колдонсоңуз, чоң өлчөмдөгү маани ага туура келбеши мүмкүн.

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

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

Өзгөрмөлөрдү жарыялоо үчүн Dim оператору колдонулат. Мисалы, бул сыяктуу:

Dim Variable_Name As Integer

Variable_Name - өзгөрмөнүн аты. Андан кийин, маалымат түрүн көрсөтүү менен As оператору жазылат. “Variable_Name” жана “Бүтүн сан” саптарынын ордуна, сиз өз атыңызды жана маалымат түрүн киргизсеңиз болот.

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

Const iMaxCount = 5000

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

  1. Вариант бир топ жайыраак иштетилет, эгерде мындай өзгөрмөлөр көп болсо, алсыз компьютерлерде маалыматтын иштетилиши кыйла жайлатылышы мүмкүн. Ошол секундалар чечет окшойт? Бирок, эгер сизге көп сандагы код саптарын жазып, анан аны начар компьютерлерде иштетишиңиз керек болсо (заманбап офис комплекттери көп оперативдүү эстутумду талап кылаарын эске алганда, алар дагы эле сатылууда), сиз ишти толугу менен токтото аласыз. Макросторду туура эмес жазуу оперативдүү эс тутуму аз жана татаал тапшырмаларды аткарууга арналбаган смарт-китептердин тоңушуна алып келген учурлар бар. 
  2. Аттарды туура эмес басып чыгарууга жол берилет, муну Option Explicit билдирүүсүн колдонуу менен алдын алууга болот, ал эгер бирөө табылса, жарыяланбаган өзгөрмөнү табууга мүмкүндүк берет. Бул каталарды аныктоонун оңой жолу, анткени кичине эле ката котормочу өзгөрмөнү аныктай албай калат. Эгерде сиз өзгөрмөлөрдү жарыялоо режимин күйгүзсөңүз, модулдун эң башында жарыяланбаган маалымат контейнерлери табылса, котормочу сизге макрону иштетүүгө уруксат бербейт.
  3. Маалыматтын түрүнө дал келбеген өзгөрмө маанилерден келип чыккан каталардан качыңыз. Адатта, бүтүн өзгөрмөгө тексттик маани ыйгаруу ката кетирет. Ооба, бир жагынан жалпы тип декларациясыз дайындалат, бирок алар алдын ала билдирилген болсо, анда кокус каталарды болтурбай коюуга болот.

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

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

  1. Саптар бош.
  2. Сандар 0 маанисин алат.
  3. Буль түрүндөгү өзгөрмөлөр башында жалган деп эсептелет.
  4. Демейки күнү - 30-жылдын 1899-декабры.

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

Option Explicit Statement

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

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

  1. Өнүктүрүү чөйрөсүнө өтүңүз - Куралдар > Жолдор.
  2. Андан кийин ачылган терезеде Редактор өтмөгүн ачыңыз.
  3. Акырында, Өзгөрмө декларациясын талап кылуу пунктунун жанындагы кутучаны белгилеңиз.

Бул кадамдарды аяктагандан кийин, "OK" баскычын чыкылдатыңыз. 

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

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

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

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

Option Explicit

sVAT_Rate Single сыяктуу

Total_Cost() функциясы Double

.

.

.

End Function

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

Андан тышкары, процедуралардын бири өзгөрмөнүн маанисин өзгөртсө, кийинкиси да бул оңдолгон маанини окуйт. Бирок башка модулдарда бул өзгөрмө дагы деле окулбайт.

Option Explicit

Total_Cost() функциясы Double

sVAT_Rate Single сыяктуу

   .

   .

   .

End Function

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

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

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

Бул жерде анын туруктуулар жана өзгөрмөлөр менен иштөөнүн жакшы мисалы бар таблица.

Option Explicit

Коомдук sVAT_Rate жалгыз катары

Коомдук Const iMax_Count = 5000

Бул мисалда, сиз Public ачкыч сөзү өзгөрмөнү жарыялоо үчүн кантип колдонуларын жана жалпы константты жарыялоо үчүн Visual Basic редакторунда эмнелерди жазуу керек экенин көрө аласыз. Бул балл контейнерлеринин көлөмү бардык модулдарга тиешелүү.
Option Explicit

Жеке sVAT_Rate Single

Жеке Const iMax_Count = 5000

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

Эмне үчүн туруктуулар жана өзгөрмөлөр керек

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

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

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

Же болбосо, бир аталышы бар туруктуу бар болсо жана өзгөрмө башка, бирок окшош атка ээ болсо. Иштеп чыгуучу аларды жөн эле чаташтыра алат. Мисалы, өзгөртүүнү талап кылбаган бир өзгөрмө Variable11 деп аталат, ал эми оңдоого боло турган башка өзгөрмө Variable1 деп аталат. Код жазып жатканда адам автоматтык түрдө кошумча бирдикти кокустан өткөрүп жиберип, аны байкабай калышы мүмкүн. Натыйжада, баалуулуктар үчүн контейнер өзгөрөт, ага тийбеш керек.

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

Ооба, бул кырдаалда комментарийлер менен кыла аласыз, бирок Const деген сөздү көрсөтүү оңой эмеспи?

Тыянактар

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

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

Таштап Жооп