VBA da o'zgaruvchilar va konstantalar

VBA-da, boshqa dasturlash tillarida bo'lgani kabi, har qanday qiymatlarni saqlash uchun o'zgaruvchilar va konstantalar ishlatiladi. Nomidan ko'rinib turibdiki, o'zgaruvchilar o'zgarishi mumkin, konstantalar esa sobit qiymatlarni saqlaydi.

Masalan, doimiy Pi 3,14159265 qiymatini saqlaydi... “Pi” soni dasturni bajarish jarayonida o'zgarmaydi, ammo bunday qiymatni doimiy sifatida saqlash qulayroq.

Shu bilan birga, biz o'zgaruvchidan foydalanishimiz mumkin sVAT_Rate sotib olingan tovarlarga QQS stavkasini saqlash. O'zgaruvchan qiymat sVAT_Rate sotib olingan mahsulotga qarab farq qilishi mumkin.

Ma'lumot turlari

Barcha o'zgaruvchilar va konstantalar ma'lum bir turdagi ma'lumotlarga ega. Quyidagi jadvalda VBA-da foydalaniladigan ma'lumotlar turlari tavsifi va mumkin bo'lgan qiymatlar oralig'i keltirilgan:

Ma'lumot turi O'lchamTavsifQiymatlar diapazoni
Bayt1 baytMusbat butun sonlar; ko'pincha ikkilik ma'lumotlar uchun ishlatiladi0 dan 255 uchun
Boolean2 baytTo'g'ri yoki noto'g'ri bo'lishi mumkinTo'g'ri yoki noto'g'ri
Integer2 baytButun sonlar (kasrsiz)-32 dan +768 gacha
uzun4 baytKatta butun sonlar (kasrsiz)от -2 147 483 648 до +2 147 483 647
yakka4 baytYagona aniqlikdagi suzuvchi nuqta raqami-3.4e38 dan +3.4e38 gacha
ikki hissa8 baytIkki marta aniqlikdagi suzuvchi nuqta raqami-1.8e308 dan +1.8e308 gacha
Valyutalar8 baytQattiq o'nli kasrlar soni bilan suzuvchi nuqta raqamiот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
sana8 baytSana va vaqt - Sana turidagi ma'lumotlar suzuvchi nuqta raqami bilan ifodalanadi. Bu sonning butun qismi sanani, kasr qismi esa vaqtni ifodalaydi.1 yil 100 yanvardan 31 yil 9999 dekabrgacha
ob'ekt4 baytOb'ektga havolaHar qanday ob'ektga havola
Stringo'zgarib bormoqdaBelgilar to'plami. String turi qat'iy yoki o'zgaruvchan uzunlikda bo'lishi mumkin. O'zgaruvchan uzunlik bilan ko'proq ishlatiladiRuxsat etilgan uzunlik - taxminan 65 belgigacha. O'zgaruvchan uzunlik - taxminan 500 milliard belgigacha
Varianto'zgarib bormoqdaSana, float yoki belgilar qatorini o'z ichiga olishi mumkin. Ushbu turdagi ma'lumotlarning qaysi turi kiritilishi oldindan ma'lum bo'lmagan hollarda qo'llaniladi.Raqam - Ikki, string - String

Shubhasiz, yuqoridagi jadvaldan foydalanib va ​​to'g'ri ma'lumot turini tanlab, siz xotiradan tejamkorroq foydalanishingiz mumkin (masalan, ma'lumotlar turini tanlang. Integer Buning o'rniga uzun or yakka Buning o'rniga ikki hissa). Biroq, ixchamroq ma'lumotlar turlaridan foydalanganda, sizning kodingiz ularga nomutanosib ravishda katta qiymatlarni sig'dirmasligi uchun ehtiyot bo'lishingiz kerak.

O'zgaruvchilar va konstantalarni e'lon qilish

Tarjimonning eslatmasi: VBA-dagi o'zgaruvchilar haqida gapirganda, yana bir muhim narsani eslatib o'tish kerak. Agar biz o'zgaruvchini e'lon qilsak, lekin unga hech qanday qiymat bermasak, u standart qiymat bilan ishga tushiriladi:

• matn satrlari bo'sh satrlar bilan inisializatsiya qilinadi;

• raqamlar — qiymat 0;

• o'zgaruvchilar turi Boolean - yolg'on;

• sanalar - 30 yil 1899 dekabr.

O'zgaruvchi yoki doimiydan foydalanishdan oldin uni e'lon qilish kerak. Buning uchun makroga quyidagi oddiy kod qatorini qo'shing:

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

Yuqoridagi kod qatorida Argumentlar nomi kodda ishlatiladigan o'zgaruvchining nomi va Ma'lumotlar_turi ushbu maqolada biroz oldinroq berilgan jadvaldagi ma'lumotlar turlaridan biridir. Masalan:

Dim sVAT_Rate Single Dim i As Integer

Konstantalar xuddi shunday e'lon qilinadi, lekin doimiylarni e'lon qilishda ularning qiymati darhol ko'rsatilishi kerak. Masalan, bu kabi:

Const iMaxCount = 5000 Const iMaxScore = 100

Excelda o'zgaruvchilarni e'lon qilish shart emas. Odatiy bo'lib, Excelga kiritilgan, ammo e'lon qilinmagan barcha o'zgaruvchilar turiga ega bo'ladi Variant va raqamli va matn qiymatini qabul qila oladi.

Shunday qilib, dasturchi istalgan vaqtda yangi o'zgaruvchidan foydalanishi mumkin (hatto u e'lon qilinmagan bo'lsa ham) va Excel uni turdagi o'zgaruvchi sifatida ko'rib chiqadi. Variant. Biroq, buni qilmaslikning bir necha sabablari bor:

  1. Xotiradan foydalanish va hisoblash tezligi. Agar siz ma'lumotlar turini ko'rsatuvchi o'zgaruvchini e'lon qilmasangiz, u holda sukut bo'yicha u turga o'rnatiladi. Variant. Ushbu turdagi ma'lumotlar boshqa ma'lumotlar turlariga qaraganda ko'proq xotiradan foydalanadi. Har bir o'zgaruvchiga bir necha qo'shimcha bayt unchalik ko'p eshitilmasligi mumkin, ammo amalda dasturlarda minglab o'zgaruvchilar bo'lishi mumkin (ayniqsa massivlar bilan ishlashda). Shuning uchun, kabi o'zgaruvchilar tomonidan ishlatiladigan qo'shimcha xotira Variant, turdagi o'zgaruvchilar bilan solishtirganda Integer or yakka, sezilarli miqdorga qo'shilishi mumkin. Bundan tashqari, turdagi o'zgaruvchilar bilan operatsiyalar Variant boshqa turdagi o'zgaruvchilarga qaraganda ancha sekinroq bajariladi, mos ravishda qo'shimcha ming turdagi o'zgaruvchilar Variant hisob-kitoblarni sezilarli darajada sekinlashtirishi mumkin.
  2. O'zgaruvchilar nomlarida xatolarning oldini olish. Agar barcha o'zgaruvchilar e'lon qilingan bo'lsa, VBA bayonotidan foydalanish mumkin - Variant aniq barcha e'lon qilinmagan o'zgaruvchilarni aniqlash uchun (bu haqda keyinroq gaplashamiz). Bu o'zgaruvchining noto'g'ri yozilishi natijasida dasturda xatolik paydo bo'lishini yo'q qiladi. Masalan, nomli o'zgaruvchidan foydalanish sVAT_Rate, siz matn terish xatosiga yo'l qo'yishingiz va ushbu o'zgaruvchiga qiymat belgilashingiz mumkin: "VATRate = 0,175". Bundan buyon o'zgaruvchi kutilmoqda sVAT_Rate 0,175 qiymatini o'z ichiga olishi kerak - lekin, albatta, unday emas. Agar barcha foydalanilgan o'zgaruvchilarni majburiy deklaratsiya qilish rejimi yoqilgan bo'lsa, VBA kompilyatori darhol xatoni ko'rsatadi, chunki u o'zgaruvchini topa olmaydi. VATR tarifi e'lon qilinganlar orasida.
  3. O'zgaruvchining e'lon qilingan turiga mos kelmaydigan qiymatlarni ajratib ko'rsatish. Agar siz ma'lum bir turdagi o'zgaruvchini e'lon qilsangiz va unga boshqa turdagi ma'lumotlarni belgilashga harakat qilsangiz, siz xatoga yo'l qo'yasiz, agar bu xato tuzatilmasa, dastur ishdan chiqishiga olib kelishi mumkin. Bir qarashda, bu o'zgaruvchilarni e'lon qilmaslik uchun yaxshi sabab bo'lib tuyulishi mumkin, lekin aslida o'zgaruvchilardan biri qabul qilinishi kerak bo'lgan noto'g'ri ma'lumotlarni olgani ma'lum bo'ldi - shunchalik yaxshi! Aks holda, agar dastur ishlashda davom etsa, natijalar noto'g'ri va kutilmagan bo'lishi mumkin va xatolarning sababini topish ancha qiyin bo'ladi. Bundan tashqari, so'l "muvaffaqiyatli" bajarilishi mumkin. Natijada, xato e'tiborga olinmaydi va noto'g'ri ma'lumotlar bilan ishlash davom etadi!

Shu munosabat bilan, noto'g'ri ma'lumotlar turini aniqlash va koddagi bunday xatolarni imkon qadar tezroq tuzatish tavsiya etiladi. Shu sabablarga ko'ra, VBA makrosini yozishda barcha o'zgaruvchilarni e'lon qilish tavsiya etiladi.

Variant aniq

Operator Variant aniq VBA kodida ishlatiladigan barcha o'zgaruvchilar e'lon qilinishiga olib keladi va barcha e'lon qilinmagan o'zgaruvchilarni kompilyatsiya paytida xato deb belgilaydi (kodni bajarish boshlanishidan oldin). Ushbu operatorni qo'llash qiyin emas - VBA faylining eng yuqori qismiga ushbu qatorni yozing:

Option Explicit

Agar siz doimo kiritmoqchi bo'lsangiz Variant aniq yaratilgan har bir yangi VBA modulining yuqori qismiga, bu avtomatik ravishda amalga oshirilishi mumkin. Buning uchun siz variantni yoqishingiz kerak O'zgaruvchan deklaratsiyani talab qilish VBA muharriri sozlamalarida.

Bu shunday amalga oshiriladi:

  • Visual Basic Editor menyusidan ni bosing vositalari > Options
  • Ko'rsatilgan muloqot oynasida yorliqni oching muharrir
  • Katakchani belgilang O'zgaruvchan deklaratsiyani talab qilish va matbuot OK

Yoqilganda, string Variant aniq yaratilgan har bir yangi modul boshida avtomatik ravishda kiritiladi.

O'zgaruvchilar va konstantalar doirasi

Har bir e'lon qilingan o'zgaruvchi yoki doimiy o'zining cheklangan doirasiga, ya'ni ushbu o'zgaruvchi mavjud bo'lgan dasturning cheklangan qismiga ega. Qo'llanish doirasi o'zgaruvchi yoki doimiyni e'lon qilish joyiga bog'liq. Masalan, o'zgaruvchini olaylik sVAT_Rate, bu funksiyada ishlatiladi Jami_xarajat. Quyidagi jadvalda o'zgaruvchilarni aniqlashning ikkita varianti ko'rib chiqiladi sVAT_Ratemodulda ikki xil pozitsiyada e'lon qilingan:

Variant Aniq Dim sVAT_Rate Yagona Funksiya sifatida Total_Cost() Ikki barobar ... End Funktsiya
Agar o'zgaruvchi bo'lsa sVAT_Rate modulning eng boshida e'lon qilingan bo'lsa, bu o'zgaruvchining doirasi butun modul bo'ladi (ya'ni o'zgaruvchi sVAT_Rate Ushbu moduldagi barcha protseduralar tomonidan tan olinadi).

Shuning uchun, agar funktsiyada bo'lsa Jami_xarajat o'zgaruvchan sVAT_Rate ga qandaydir qiymat beriladi, keyin bir xil modul ichida bajariladigan keyingi funksiya o'zgaruvchidan foydalanadi sVAT_Rate bir xil ma'no bilan.

Biroq, agar boshqa modulda joylashgan ba'zi funksiya chaqirilsa, u uchun o'zgaruvchi sVAT_Rate ma'lum bo'lmaydi.

Variant aniq funksiyasi Total_Cost() Double Dim sVAT_Rate as Single... End Function
Agar o'zgaruvchi bo'lsa sVAT_Rate funktsiyaning boshida e'lon qilingan Jami_xarajat, u holda uning doirasi faqat ushbu funktsiya bilan chegaralanadi (ya'ni funktsiya doirasida Jami_xarajat, o'zgaruvchidan foydalanishingiz mumkin sVAT_Rate, lekin tashqarida emas).

Foydalanishga harakat qilganda sVAT_Rate boshqa protsedurada VBA kompilyatori xato haqida xabar beradi, chunki bu o'zgaruvchi funktsiyadan tashqarida e'lon qilinmagan Jami_xarajat (agar operator ishlatilsa). Variant aniq).

Yuqorida ko'rsatilgan misolda o'zgaruvchi modul darajasida kalit so'z bilan e'lon qilingan Xiralashgan. Biroq, e'lon qilingan o'zgaruvchilardan boshqa modullarda foydalanish kerak bo'lishi mumkin. Bunday hollarda kalit so'z o'rniga o'zgaruvchini e'lon qilish Xiralashgan kalit so'zdan foydalanish kerak ijtimoiy.

Aytgancha, kalit so'z o'rniga modul darajasida o'zgaruvchini e'lon qilish uchun Xiralashgan kalit so'zdan foydalanish mumkin shaxsiy, bu o'zgaruvchining faqat joriy modulda foydalanish uchun mo'ljallanganligini ko'rsatadi.

Konstantalarni e'lon qilish uchun kalit so'zlardan ham foydalanishingiz mumkin. ijtimoiy и shaxsiy, lekin kalit so'z o'rniga emas Konst, u bilan birga.

Quyidagi misollar kalit so'zlardan foydalanishni ko'rsatadi ijtimoiy и shaxsiy o'zgaruvchilar va konstantalarga nisbatan qo'llaniladi.

Variant ochiq ommaviy sVAT_Rate Yagona umumiy konst iMax_Count = 5000 ...    
Ushbu misolda kalit so'z ijtimoiy o'zgaruvchini e'lon qilish uchun ishlatiladi sVAT_Rate va konstantalar iMax_Count. Shu tarzda e'lon qilingan elementlarning ko'lami butun joriy loyiha bo'ladi.

Bu degani sVAT_Rate и iMax_Count har qanday loyiha modulida mavjud bo'ladi.

Variant Aniq Xususiy sVAT_Rate Yagona Shaxsiy Const iMax_Count = 5000 ...    
Ushbu misolda o'zgaruvchini e'lon qilish uchun sVAT_Rate va konstantalar iMax_Count ishlatiladigan kalit so'z shaxsiy. Ushbu elementlarning doirasi joriy moduldir.

Bu degani sVAT_Rate и iMax_Count joriy modulning barcha protseduralarida mavjud bo'ladi, lekin boshqa modullardagi protseduralar uchun mavjud bo'lmaydi.

Leave a Reply