Excel makrolarida o'zgaruvchilar va doimiylarni tushunish

Ushbu maqolada siz makroslarda qanday konstantalar va o'zgaruvchilar borligini, ularni qayerda ishlatish mumkinligini va turli xil ma'lumotlar turlari o'rtasidagi asosiy farq nima ekanligini bilib olasiz. Agar siz shunchaki o'zgaruvchini yozishingiz mumkin va uni hech qachon o'zgartirmasangiz, nima uchun doimiylar kerakligi ham aniqlanadi.

Boshqa dasturlash tillari singari, ma'lumotlar o'zgaruvchilar yoki konstantalarda saqlanishi mumkin (ikkalasi ham ko'pincha ma'lumotlar konteynerlari deb ataladi). Bu tushunchalar orasidagi asosiy farq. Birinchisi dasturda nima sodir bo'lishiga qarab o'zgarishi mumkin. O'z navbatida, konstantalar bir marta o'rnatiladi va ularning qiymatini o'zgartirmaydi.

Agar bir xil katta qiymatni bir necha marta ishlatish kerak bo'lsa, doimiylar foydali bo'lishi mumkin. Raqamni nusxalash o'rniga, siz shunchaki doimiy nomini yozishingiz mumkin. Misol uchun, siz doimiy qiymat bo'lgan Pi ni saqlash uchun doimiy "Pi" dan foydalanishingiz mumkin. Bu juda katta va har safar uni yozish yoki qidirish va nusxalash juda qiyin. Shunday qilib, ikkita belgi yozish kifoya va muhit avtomatik ravishda kerakli raqamni ishlatadi.

Excel foydalanuvchisi vaqti-vaqti bilan ularda saqlangan qiymatni o'zgartirishi kerak bo'lsa, o'zgaruvchilarni e'lon qilishi kerak. Masalan, siz mahsulot uchun joriy QQS stavkasini saqlaydigan sVAT_Rate deb nomlangan o'zgaruvchini o'rnatishingiz mumkin. Agar u o'zgarsa, uni tezda tuzatishingiz mumkin. Bu, ayniqsa, Qo'shma Shtatlarda biznes bilan shug'ullanadiganlar uchun foydalidir, bu erda ba'zi tovarlar QQSga umuman tortilmasligi mumkin (va bu soliq ham shtatdan shtatga farq qiladi).

Ma'lumot turlari

Har bir ma'lumot konteyneri bir nechta turlardan biri bo'lishi mumkin. Bu erda qayta ishlangan ma'lumotlarning standart turlarini tavsiflovchi jadval mavjud. Ularning ko'plari bor va dastlab yangi boshlanuvchilar uchun ular bir-birini takrorlayotganday tuyulishi mumkin. Ammo bu xayoliy tuyg'u. To'g'ri ma'lumotlar turini ko'rsatish nima uchun juda muhimligini bilish uchun o'qing.

Kichik raqamlar uchun xotirada ko'proq joy egallagan ma'lumotlar turidan foydalanish tavsiya etilmaydi. Masalan, 1 raqami uchun Bayt turini ishlatish kifoya. Bu, ayniqsa, zaif kompyuterlarda bajariladigan modulning ishlashiga ijobiy ta'sir qiladi. Ammo bu erda juda uzoqqa bormaslik muhimdir. Agar siz juda ixcham ma'lumotlar turidan foydalansangiz, katta o'lchamli qiymat unga mos kelmasligi mumkin.

Konstantalar va o'zgaruvchilarni e'lon qilish

Ma'lumotlar konteyneridan oldindan e'lon qilmasdan foydalanish qat'iyan tavsiya etilmaydi. Keyin bir qator muammolar paydo bo'lishi mumkin, buning oldini olish uchun o'zgaruvchilar yoki konstantalarni sanab o'tgan bir nechta kichik kod qatorlarini yozish kerak bo'ladi.

O'zgaruvchini e'lon qilish uchun Dim operatoridan foydalaniladi. Masalan, bu kabi:

O'zgaruvchi_nomini butun son sifatida xiralashtirish

Variable_Name - o'zgaruvchining nomi. Keyinchalik, ma'lumotlar turini ko'rsatuvchi As operatori yoziladi. “Variable_Name” va “Integer” qatorlari oʻrniga siz oʻz nomingiz va maʼlumotlar turini kiritishingiz mumkin.

Konstantalar ham e'lon qilinishi mumkin, lekin avvalo ularning qiymatini belgilashingiz kerak. Variantlardan biri:

Const iMaxCount = 5000

Rostini aytsam, ba'zi hollarda siz o'zgaruvchini e'lon qilmasdan qilishingiz mumkin, ammo bu holda ular avtomatik ravishda Variant turiga tayinlanadi. Biroq, bu quyidagi sabablarga ko'ra tavsiya etilmaydi:

  1. Variant juda sekinroq qayta ishlanadi va agar bunday o'zgaruvchilar ko'p bo'lsa, zaif kompyuterlarda ma'lumotlarni qayta ishlash sezilarli darajada sekinlashishi mumkin. Bu soniyalar hal qiladi shekilli? Ammo agar siz ko'p sonli kod satrlarini yozishingiz kerak bo'lsa va keyin uni zaif kompyuterlarda ham ishga tushirishingiz kerak bo'lsa (zamonaviy ofis to'plamlari juda ko'p RAM talab qilishini hisobga olsak, ular hali ham sotiladi), siz ishni butunlay to'xtatishingiz mumkin. Makroslarni noto'g'ri yozish kichik hajmdagi operativ xotiraga ega va murakkab vazifalarni bajarish uchun mo'ljallanmagan aqlli kitoblarni muzlatib qo'yishga olib kelgan holatlar mavjud. 
  2. Nomlardagi xatoliklarga yo'l qo'yiladi, buni Option Explicit bayonoti yordamida oldini olish mumkin, bu sizga e'lon qilinmagan o'zgaruvchini topish imkonini beradi, agar topilsa. Bu xatolarni aniqlashning oson usuli, chunki eng kichik xato tarjimon o'zgaruvchini aniqlay olmasligiga olib keladi. Va agar siz o'zgaruvchan deklaratsiya rejimini yoqsangiz, modul boshida e'lon qilinmagan ma'lumotlar konteynerlari topilsa, tarjimon shunchaki makroni ishga tushirishga ruxsat bermaydi.
  3. Ma'lumotlar turiga mos kelmaydigan o'zgaruvchan qiymatlar tufayli yuzaga keladigan xatolardan saqlaning. Odatda, butun o'zgaruvchiga matn qiymatini belgilash xatolikka olib keladi. Ha, bir tomondan, umumiy tur deklaratsiyasiz tayinlanadi, lekin agar ular oldindan e'lon qilingan bo'lsa, unda tasodifiy xatolardan qochish mumkin.

Shuning uchun, hamma narsaga qaramay, Excel makrolarida barcha o'zgaruvchilarni e'lon qilish tavsiya etiladi.

O'zgaruvchilarni e'lon qilishda yana bir narsani yodda tutish kerak. O'zgaruvchini e'lon qilishda unga hech qanday qiymat bermaslik mumkin, ammo bu holda u standart qiymatga ega bo'ladi. Masalan:

  1. Chiziqlar bo'sh qilingan.
  2. Raqamlar 0 qiymatini oladi.
  3. Boolean tipidagi o'zgaruvchilar dastlab yolg'on deb hisoblanadi.
  4. Standart sana 30 yil 1899 dekabr.

Misol uchun, agar ilgari hech qanday qiymat ko'rsatilmagan bo'lsa, siz butun o'zgaruvchiga 0 qiymatini belgilashingiz shart emas. U allaqachon bu raqamni o'z ichiga olgan.

Variantning aniq bayonoti

Ushbu bayonot VBA kodida ishlatiladigan barcha o'zgaruvchilarni e'lon qilish va kodni ishga tushirishdan oldin e'lon qilinmagan konteynerlar mavjudligini aniqlash imkonini beradi. Ushbu xususiyatdan foydalanish uchun so'l kodning eng yuqori qismida Option Explicit kod qatorini yozing.

Agar siz ushbu bayonotni har safar kodingizga kiritishingiz kerak bo'lsa, buni VBA muharriridagi maxsus sozlamadan foydalanib qilishingiz mumkin. Ushbu parametrni yoqish uchun sizga kerak:

  1. Yo'l bo'ylab ishlab chiqish muhitiga o'ting - Asboblar > Variantlar.
  2. Shundan so'ng ochilgan oynada Tahrirlovchi yorlig'ini oching.
  3. Va nihoyat, o'zgaruvchan deklaratsiyani talab qilish elementi yonidagi katakchani belgilang.

Ushbu amallarni bajarganingizdan so'ng, "OK" tugmasini bosing. 

Hammasi shunday, endi har bir yangi makrosni yozishda ushbu qator avtomatik ravishda kodning yuqori qismiga kiritiladi.

Konstantalar va o‘zgaruvchilar doirasi

Har bir o'zgaruvchi yoki doimiy faqat cheklangan doiraga ega. Buni qaerda e'lon qilishingizga bog'liq.

Bizda funksiya bor deylik Jami_xarajat(), va u o'zgaruvchidan foydalanadi sVAT_Rate. Moduldagi o'rniga qarab, u boshqa qamrovga ega bo'ladi:

Variant aniq

Yagona sVAT_Rateni xiralashtirish

Total_Cost() funksiyasi Double sifatida

.

.

.

End Function

Agar o'zgaruvchi modulning yuqori qismida e'lon qilingan bo'lsa, u butun modul bo'ylab tarqaladi. Ya'ni, uni har bir protsedura bilan o'qish mumkin.

Bundan tashqari, agar protseduralardan biri o'zgaruvchining qiymatini o'zgartirgan bo'lsa, keyingisi ham ushbu tuzatilgan qiymatni o'qiydi. Ammo boshqa modullarda bu o'zgaruvchi hali ham o'qilmaydi.

Variant aniq

Total_Cost() funksiyasi Double sifatida

Yagona sVAT_Rateni xiralashtirish

   .

   .

   .

End Function

Bunday holda, o'zgaruvchi protsedura ichida e'lon qilinadi va agar u boshqa protsedurada ishlatilsa, tarjimon xatoga yo'l qo'yadi.

Agar siz o'zgaruvchini boshqa modullar tomonidan o'qilishini istasangiz, Dim kalit so'zi o'rniga Public kalit so'zidan foydalanishingiz kerak. Xuddi shunday, siz Dim so'zi o'rniga yozilgan Public bayonotidan foydalanib, o'zgaruvchining doirasini faqat joriy modul bilan cheklashingiz mumkin.

Konstantalar doirasini ham xuddi shunday o'rnatishingiz mumkin, lekin bu erda kalit so'z Const operatori bilan birga yoziladi.

Bu doimiylar va o'zgaruvchilar bilan qanday ishlashiga yaxshi misol bo'lgan jadval.

Variant aniq

Umumiy sVAT_Rate yagona sifatida

Umumiy Const iMax_Count = 5000

Ushbu misolda siz o'zgaruvchini e'lon qilish uchun Public kalit so'zidan qanday foydalanilishini va umumiy konstantani e'lon qilish uchun Visual Basic muharririda nima yozishingiz kerakligini ko'rishingiz mumkin. Ushbu qiymat konteynerlarining ko'lami barcha modullarga tegishli.
Variant aniq

Shaxsiy sVAT_Rate Yagona

Shaxsiy Const iMax_Count = 5000

Bu erda o'zgaruvchilar va konstantalar Private kalit so'zi yordamida e'lon qilinadi. Bu shuni anglatadiki, ular faqat joriy modul ichida ko'rish mumkin va boshqa modullardagi protseduralar ulardan foydalana olmaydi.

Nima uchun doimiylar va o'zgaruvchilar kerak

Konstantalar va o'zgaruvchilardan foydalanish kodning tushunarlilik darajasini oshirishga imkon beradi. Va agar umuman yangi boshlanuvchilarda o'zgaruvchilar nima uchun kerakligi haqida savollar bo'lmasa, unda doimiylarga bo'lgan ehtiyoj bilan bog'liq ko'plab noaniqliklar mavjud. Va bu savol, birinchi qarashda, juda mantiqiy ko'rinadi. Axir, siz o'zgaruvchini bir marta e'lon qilishingiz mumkin va uni boshqa hech qachon o'zgartirmaysiz.

Javob xotirada katta joy egallagan ma'lumotlar turlaridan foydalanish bilan bir xil tekislikda bo'lib chiqadi. Agar biz juda ko'p sonli o'zgaruvchilar bilan ishlayotgan bo'lsak, biz tasodifan mavjud konteynerni o'zgartirishimiz mumkin. Agar foydalanuvchi ma'lum bir qiymat hech qachon o'zgarmasligini belgilasa, atrof-muhit buni avtomatik ravishda boshqaradi.

Bu, ayniqsa, so'l bir nechta dasturchilar tomonidan yozilganda juda muhimdir. Ba'zi o'zgaruvchilar o'zgarmasligini bilish mumkin. Va boshqasi yo'q. Agar siz Const operatorini ko'rsatsangiz, boshqa ishlab chiquvchi bu qiymat o'zgarmasligini bilib oladi.

Yoki bitta nomli doimiy bo'lsa va o'zgaruvchi boshqa, lekin o'xshash nomga ega bo'lsa. Ishlab chiquvchi ularni shunchaki chalkashtirib yuborishi mumkin. Masalan, o'zgartirish kerak bo'lmagan bir o'zgaruvchiga Variable11, tahrirlash mumkin bo'lgan boshqasi esa Variable1 deb ataladi. Biror kishi kod yozishda avtomatik ravishda qo'shimcha birlikni o'tkazib yuborishi va buni sezmasligi mumkin. Natijada, qiymatlar uchun konteyner o'zgartiriladi, unga tegmaslik kerak.

Yoki ishlab chiquvchining o'zi qaysi o'zgaruvchilarga tegishi va qaysilariga tegmasligini unutishi mumkin. Bu ko'pincha kod bir necha hafta davomida yozilganda sodir bo'ladi va uning hajmi katta bo'ladi. Bu vaqt ichida u yoki bu o'zgaruvchi nimani anglatishini ham unutish juda oson.

Ha, bu vaziyatda sharhlar bilan qilishingiz mumkin, lekin Const so'zini belgilash osonroq emasmi?

Xulosa

O'zgaruvchilar so'l dasturlashning muhim tarkibiy qismi bo'lib, hisob-kitoblardan tortib foydalanuvchini ma'lum hodisalar haqida xabardor qilish yoki elektron jadval hujayralarida ma'lum qiymatlarni belgilashgacha bo'lgan murakkab operatsiyalarni bajarishga imkon beradi.

Agar ishlab chiquvchi ushbu konteynerlarning tarkibi kelajakda o'zgarmasligini aniq bilsa, doimiylardan foydalanish kerak. Buning o'rniga o'zgaruvchilardan foydalanmaslik tavsiya etiladi, chunki tasodifan xato qilish mumkin.

Leave a Reply