VBA-da dəyişənlər və sabitlər

VBA-da, hər hansı digər proqramlaşdırma dillərində olduğu kimi, dəyişənlər və sabitlər istənilən dəyəri saxlamaq üçün istifadə olunur. Adından göründüyü kimi, dəyişənlər dəyişə bilər, sabitlər isə sabit dəyərləri saxlayır.

Məsələn, sabit Pi 3,14159265 dəyərini saxlayır... Proqramın icrası zamanı “Pi” rəqəmi dəyişməyəcək, lakin belə bir dəyəri sabit kimi saxlamaq daha rahatdır.

Eyni zamanda dəyişəndən də istifadə edə bilərik sVAT_Rate alınmış mallar üzrə ƏDV dərəcəsini saxlamaq. Dəyişən dəyər sVAT_Rate alınan məhsuldan asılı olaraq dəyişə bilər.

Məlumat növləri

Bütün dəyişənlər və sabitlər müəyyən bir məlumat növüdür. Aşağıdakı cədvəldə VBA-da istifadə olunan məlumat növləri təsviri və mümkün dəyərlər diapazonu ilə verilmişdir:

Məlumat növü boytəsvirDəyərlər üçündür
Byte1 bytesMüsbət tam ədədlər; tez-tez binar verilənlər üçün istifadə olunur0 olan 255 üçün
Boolean2 bytesDoğru və ya Yanlış ola bilərDoğru və ya yanlış
Tam2 bytesTam ədədlər (kəsr hissəsi yoxdur)-32 ilə +768 arasında
Uzun4 bytesBöyük tam ədədlər (kəsir hissə yoxdur)от -2 147 483 648 до +2 147 483 647
vahid4 bytesTək dəqiqlikli üzən nöqtə nömrəsi-3.4e38 ilə +3.4e38 arasında
Cüt8 bytesİkiqat dəqiqlikli üzən nöqtə nömrəsi-1.8e308 ilə +1.8e308 arasında
Valyuta8 bytesSabit sayda onluq yerlərlə üzən nöqtə sayıот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
tarix8 bytesTarix və vaxt – Tarix tipli məlumatlar üzən nöqtə nömrəsi ilə təmsil olunur. Bu ədədin tam hissəsi tarixi, kəsr hissəsi isə vaxtı ifadə edir.1-cü il yanvarın 100-dən 31-cu il dekabrın 9999-dək
Obyekt4 bytesObyekt istinadıİstənilən obyekt istinadı
SimdəyişirXarakter dəsti. String növü sabit və ya dəyişən uzunluqda ola bilər. Dəyişən uzunluqda daha çox istifadə olunurSabit uzunluq - təxminən 65 simvola qədər. Dəyişən uzunluq - təxminən 500 milyard simvola qədər
VariantdəyişirTarix, float və ya simvol sətri ola bilər. Bu tip məlumatların hansı növə daxil ediləcəyi əvvəlcədən məlum olmayan hallarda istifadə olunur.Nömrə – İkiqat, simli – Simli

Aydındır ki, yuxarıdakı cədvəldən istifadə edərək və düzgün məlumat növünü seçməklə siz yaddaşdan daha qənaətlə istifadə edə bilərsiniz (məsələn, məlumat növünü seçin) Tam yerinə Uzun or vahid yerinə Cüt). Bununla belə, daha yığcam məlumat növlərindən istifadə edərkən diqqətli olmalısınız ki, kodunuz onlara qeyri-mütənasib böyük dəyərləri sığdırmağa çalışmasın.

Dəyişənlərin və sabitlərin elan edilməsi

Tərcüməçinin qeydi: VBA-da dəyişənlərdən danışarkən daha bir çox vacib məqamı qeyd etmək yerinə düşər. Əgər dəyişəni elan etsək, lakin ona heç bir dəyər təyin etməsək, o, standart dəyərlə işə salınır:

• mətn sətirləri boş sətirlərlə inisiallaşdırılır;

• ədədlər — qiymət 0;

• dəyişənlərin növü Boolean - Yalan;

• tarixlər – 30 dekabr 1899-cu il.

Dəyişən və ya sabitdən istifadə edilməzdən əvvəl o elan edilməlidir. Bunu etmək üçün makroya aşağıdakı sadə kod sətrini əlavə edin:

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

Yuxarıdakı kod sətirində Dəyişən_ad kodda istifadə olunacaq dəyişənin adıdır və Data_Növü bu məqalədə bir az əvvəl verilmiş cədvəldəki məlumat növlərindən biridir. Misal üçün:

Dim sVAT_Rate Single Dim i As Integer

Sabitlər eyni şəkildə elan edilir, lakin sabitləri elan edərkən onların dəyəri dərhal göstərilməlidir. Məsələn, bu kimi:

Const iMaxCount = 5000 Const iMaxScore = 100

Excel-də dəyişənləri elan etmək lazım deyil. Varsayılan olaraq, Excel-də daxil edilmiş, lakin elan edilməmiş bütün dəyişənlər tipə malik olacaq Variant və həm ədədi, həm də mətn dəyərini qəbul edə biləcək.

Beləliklə, proqramçı istənilən vaxt yeni dəyişəndən istifadə edə bilər (hətta elan edilməmiş olsa belə) və Excel onu tipli dəyişən kimi qəbul edəcək. Variant. Ancaq bunun edilməməsinin bir neçə səbəbi var:

  1. Yaddaşdan istifadə və hesablama sürəti. Əgər məlumat növünün göstəricisi ilə dəyişəni elan etməsəniz, o, standart olaraq tipə təyin ediləcək. Variant. Bu məlumat növü digər məlumat növləri ilə müqayisədə daha çox yaddaş istifadə edir. Dəyişən üçün bir neçə əlavə bayt çox səslənməyə bilər, lakin praktikada proqramlarda minlərlə dəyişən ola bilər (xüsusilə massivlərlə işləyərkən). Bu səbəbdən əlavə yaddaş kimi dəyişənlər tərəfindən istifadə edilir Variant, tipli dəyişənlərlə müqayisədə Tam or vahid, əhəmiyyətli məbləğə qədər əlavə edə bilər. Bundan əlavə, tipli dəyişənlərlə əməliyyatlar Variant digər növ dəyişənlərə nisbətən daha yavaş icra olunur, müvafiq olaraq əlavə min tip dəyişənlər Variant hesablamaları əhəmiyyətli dərəcədə ləngidə bilər.
  2. Dəyişən adlarında səhvlərin qarşısının alınması. Bütün dəyişənlər elan edilibsə, onda VBA ifadəsindən istifadə etmək olar - Seçim Aydındır (bu barədə daha sonra danışacağıq) bütün elan edilməmiş dəyişənləri müəyyən etmək üçün. Bu, dəyişən adının səhv yazılması nəticəsində proqramda xətanın görünüşünü aradan qaldırır. Məsələn, adlı dəyişəndən istifadə etməklə sVAT_Rate, siz yazı səhvi edə bilərsiniz və bu dəyişənə dəyər təyin edərək yaza bilərsiniz: “VATRate = 0,175”. Bundan sonra dəyişən olması gözlənilir sVAT_Rate 0,175 dəyərini ehtiva etməlidir - lakin əlbəttə ki, yoxdur. Bütün istifadə olunan dəyişənlərin məcburi elan edilməsi rejimi aktivdirsə, VBA tərtibçisi dəyişəni tapa bilməyəcəyi üçün dərhal səhv göstərəcək. ƏDV dərəcəsi elan edilənlər arasındadır.
  3. Bir dəyişənin elan edilmiş növünə uyğun gəlməyən dəyərləri vurğulamaq. Müəyyən bir növ dəyişəni elan etsəniz və ona başqa tipli məlumatları təyin etməyə çalışsanız, səhv alacaqsınız və bu, düzəldilməzsə, proqramın çökməsinə səbəb ola bilər. İlk baxışdan bu, dəyişənləri elan etməmək üçün yaxşı bir səbəb kimi görünə bilər, amma əslində dəyişənlərdən birinin qəbul etməli olduğu səhv məlumatları aldığı məlum oldu - daha yaxşıdır! Əks halda, proqram işləməyə davam edərsə, nəticələr səhv və gözlənilməz ola bilər və səhvlərin səbəbini tapmaq çox daha çətin olacaq. Makronun “uğurla” icra olunması da mümkündür. Nəticədə, səhv diqqətdən kənarda qalacaq və səhv məlumatlarla iş davam edəcək!

Bununla əlaqədar olaraq, səhv məlumat növünü aşkar etmək və koddakı bu cür səhvləri mümkün qədər tez düzəltmək arzu edilir. Bu səbəblərə görə VBA makrosunu yazarkən bütün dəyişənləri elan etməyiniz tövsiyə olunur.

Seçim Aydındır

Operator Seçim Aydındır VBA kodunda istifadə olunacaq bütün dəyişənlərin elan edilməsinə səbəb olur və tərtib zamanı (kod icrası başlamazdan əvvəl) bütün elan edilməmiş dəyişənləri xəta kimi qeyd edir. Bu operatoru tətbiq etmək çətin deyil – sadəcə VBA faylının ən yuxarı hissəsində bu sətri yazın:

Option Explicit

Həmişə daxil etmək istəyirsinizsə Seçim Aydındır yaradılan hər yeni VBA modulunun yuxarı hissəsində bu avtomatik olaraq edilə bilər. Bunu etmək üçün seçimi aktivləşdirməlisiniz Dəyişən Bəyannaməni tələb edin VBA redaktoru parametrlərində.

Bu belə edilir:

  • Visual Basic Redaktor menyusundan, klikləyin alətləri > Nizamlamalar
  • Görünən dialoqda nişanı açın Redaktor
  • Qutunu yoxlayın Dəyişən Bəyannaməni tələb edin və mətbuat OK

Aktivləşdirildikdə, sətir Seçim Aydındır yaradılan hər yeni modulun əvvəlində avtomatik olaraq daxil ediləcək.

Dəyişənlərin və sabitlərin əhatə dairəsi

Hər elan edilmiş dəyişənin və ya sabitin öz məhdud əhatə dairəsi, yəni bu dəyişənin mövcud olduğu proqramın məhdud hissəsi var. Əhatə dairəsi dəyişənin və ya sabitin elanının harada edildiyindən asılıdır. Məsələn, dəyişəni götürək sVAT_Rate, funksiyasında istifadə olunur Ümumi_Xərc. Aşağıdakı cədvəldə dəyişən əhatə dairəsi üçün iki variant müzakirə olunur sVAT_Ratemodulda iki fərqli mövqedə elan edilmişdir:

Seçim Aydın Dim sVAT_Rate Tək Funksiya kimi Total_Cost() Cüt ... Son Funksiya
Əgər dəyişən sVAT_Rate modulun ən əvvəlində elan edilirsə, onda bu dəyişənin əhatə dairəsi bütün modul olacaq (yəni dəyişən sVAT_Rate bu moduldakı bütün prosedurlar tərəfindən tanınacaq).

Buna görə də, əgər funksiyada Ümumi_Xərc dəyişən sVAT_Rate müəyyən dəyər təyin olunacaq, sonra eyni modul daxilində yerinə yetirilən növbəti funksiya dəyişəni istifadə edəcək sVAT_Rate eyni məna ilə.

Bununla belə, başqa modulda yerləşən hansısa funksiya çağırılırsa, o zaman onun üçün dəyişən sVAT_Rate bilinməyəcək.

Seçim Açıq Funksiya Total_Cost() İkiqat Dim sVAT_Rate kimi tək ... Son funksiya
Əgər dəyişən sVAT_Rate funksiyanın əvvəlində elan edilir Ümumi_Xərc, onda onun əhatə dairəsi yalnız bu funksiya ilə məhdudlaşacaq (yəni funksiya daxilində Ümumi_Xərc, dəyişəndən istifadə edə bilərsiniz sVAT_Rate, lakin kənarda deyil).

İstifadə etməyə çalışarkən sVAT_Rate başqa prosedurda VBA tərtibçisi xəta barədə məlumat verəcək, çünki bu dəyişən funksiyadan kənarda elan olunmayıb. Ümumi_Xərc (operatordan istifadə etmək şərti ilə Seçim Aydındır).

Yuxarıda göstərilən nümunədə dəyişən açar sözlə modul səviyyəsində elan edilir Dim. Bununla belə, elan edilmiş dəyişənlərin digər modullarda istifadə edilməsi lazım ola bilər. Belə hallarda açar söz əvəzinə dəyişən elan etmək Dim açar sözdən istifadə edilməlidir Ictimai.

Yeri gəlmişkən, açar söz əvəzinə modul səviyyəsində dəyişən elan etmək üçün Dim açar sözdən istifadə etmək olar Xüsusi, bu dəyişənin yalnız cari modulda istifadə üçün nəzərdə tutulduğunu göstərir.

Siz həmçinin sabitləri elan etmək üçün açar sözlərdən istifadə edə bilərsiniz. Ictimai и Xüsusi, lakin açar söz əvəzinə deyil Const, onunla birlikdə.

Aşağıdakı nümunələr açar sözlərdən istifadəni göstərir Ictimai и Xüsusi dəyişənlərə və sabitlərə tətbiq edilir.

Seçim Açıq İctimai sVAT_Rate Vahid İctimai Const iMax_Count = 5000 ...    
Bu nümunədə açar söz Ictimai dəyişəni elan etmək üçün istifadə olunur sVAT_Rate və sabitlər iMax_Count. Bu şəkildə elan edilən elementlərin əhatə dairəsi bütün cari layihə olacaq.

Bu o deməkdir ki, sVAT_Rate и iMax_Count istənilən layihə modulunda mövcud olacaq.

Seçim Açıq Şəxsi sVAT_Rate Tək Şəxsi Davam iMax_Count = 5000 ...    
Bu nümunədə dəyişəni elan etmək üçün sVAT_Rate və sabitlər iMax_Count istifadə olunan açar söz Xüsusi. Bu elementlərin əhatə dairəsi cari moduldur.

Bu o deməkdir ki, sVAT_Rate и iMax_Count cari modulun bütün prosedurlarında mövcud olacaq, lakin digər modullardakı prosedurlar üçün mövcud olmayacaq.

Cavab yaz