Excel makrolarında dəyişənlərin və sabitlərin başa düşülməsi

Bu yazıda siz makrolarda sabitlərin və dəyişənlərin nə olduğunu, harada istifadə oluna biləcəyini və müxtəlif məlumat növləri arasında əsas fərqin nə olduğunu öyrənəcəksiniz. Bir dəyişən yaza bilsəniz və onu heç vaxt dəyişdirə bilməyəcəksinizsə, sabitlərin nə üçün lazım olduğu da açıqlanacaq.

Digər proqramlaşdırma dilləri kimi, məlumatlar dəyişənlərdə və ya sabitlərdə saxlanıla bilər (hər ikisi də tez-tez məlumat konteynerləri adlanır). Bu anlayışlar arasındakı əsas fərq budur. Birincisi proqramda baş verənlərdən asılı olaraq dəyişə bilər. Öz növbəsində, sabitlər bir dəfə təyin olunur və onların dəyərini dəyişmir.

Eyni böyük dəyəri bir neçə dəfə istifadə etməlisinizsə, sabitlər faydalı ola bilər. Nömrəni köçürmək əvəzinə, sadəcə olaraq sabitin adını yaza bilərsiniz. Məsələn, sabit dəyər olan Pi-ni saxlamaq üçün sabit “Pi” istifadə edə bilərsiniz. O, çox böyükdür və hər dəfə onu yazmaq və ya axtarıb köçürmək kifayət qədər çətindir. Və beləliklə, iki simvol yazmaq kifayətdir və mühit avtomatik olaraq istədiyiniz nömrədən istifadə edir.

Excel istifadəçisi dəyişənləri zaman-zaman onlarda saxlanılan dəyəri dəyişdirməli olduqda elan etməlidir. Məsələn, siz məhsul üçün cari ƏDV dərəcəsini saxlayacaq sVAT_Rate adlı dəyişən təyin edə bilərsiniz. Dəyişirsə, onu tez bir zamanda düzəldə bilərsiniz. Bu, xüsusilə ABŞ-da bizneslə məşğul olanlar üçün faydalıdır, burada bəzi mallar ümumiyyətlə ƏDV-yə cəlb olunmaya bilər (və bu vergi də ştatdan ştata dəyişir).

Məlumat növləri

Hər bir məlumat konteyneri bir neçə növdən biri ola bilər. Burada işlənmiş məlumatların standart növlərini təsvir edən cədvəl verilmişdir. Onların bir çoxu var və başlanğıcda onlar bir-birini təkrarladıqları kimi görünə bilər. Ancaq bu, illüziya hissidir. Doğru məlumat növünü göstərməyin niyə bu qədər vacib olduğunu öyrənmək üçün oxuyun.

Kiçik nömrələr üçün yaddaşda daha çox yer tutan məlumat növündən istifadə etmək tövsiyə edilmir. Məsələn, 1 nömrəsi üçün Bayt növündən istifadə etmək kifayətdir. Bu, xüsusilə zəif kompüterlərdə icra olunan modulun işinə müsbət təsir göstərəcək. Ancaq burada çox uzağa getməmək vacibdir. Çox yığcam məlumat növü istifadə etsəniz, böyük ölçülü dəyər ona uyğun olmaya bilər.

Sabitlərin və dəyişənlərin elan edilməsi

Əvvəlcədən elan etmədən məlumat konteynerindən istifadə etmək qəti şəkildə tövsiyə edilmir. Sonra bir sıra problemlər yarana bilər ki, bunun qarşısını almaq üçün dəyişənlərin və ya sabitlərin sadalanması ilə bir neçə kiçik kod sətirini yazmaq lazımdır.

Dəyişən elan etmək üçün Dim ifadəsindən istifadə olunur. Məsələn, bu kimi:

Dəyişən_Adını Tam Ədər Kimi Dim

Dəyişən_Adı dəyişənin adıdır. Sonra verilənlərin tipini göstərən As operatoru yazılır. “Dəyişən_Adı” və “Tam ədəd” sətirlərinin əvəzinə öz adınızı və məlumat növünüzü daxil edə bilərsiniz.

Sabitlər də elan edilə bilər, lakin əvvəlcə onların dəyərini göstərməlisiniz. Seçimlərdən biri belədir:

Const iMaxCount = 5000

Ədalət naminə, bəzi hallarda dəyişən elan etmədən edə bilərsiniz, lakin bu halda onlara avtomatik olaraq Variant növü təyin ediləcək. Ancaq bu, aşağıdakı səbəblərə görə tövsiyə edilmir:

  1. Variant çox yavaş işlənir və belə dəyişənlər çox olarsa, zəif kompüterlərdə məlumatın işlənməsi əhəmiyyətli dərəcədə yavaşlaya bilər. Deyəsən, o saniyələr qərar verəcək? Ancaq çoxlu sayda kod sətirləri yazmalı və sonra onu zəif kompüterlərdə işlətməli olsanız (müasir ofis paketlərinin çoxlu RAM tələb etdiyini nəzərə alsaq, hələ də satılır), işi tamamilə dayandıra bilərsiniz. Makroların düzgün düşünülməmiş yazılması az miqdarda operativ yaddaşa sahib olan və mürəkkəb tapşırıqları yerinə yetirmək üçün nəzərdə tutulmayan smartbukların donmasına səbəb olduğu hallar var. 
  2. Adlarda səhv çaplara icazə verilir, bunun qarşısını Option Explicit ifadəsindən istifadə etməklə almaq olar, hansı ki, aşkar olunarsa, elan edilməmiş dəyişəni tapmağa imkan verir. Bu, səhvləri aşkar etməyin asan yoludur, çünki ən kiçik yazı səhvi tərcüməçinin dəyişəni müəyyən edə bilməməsinə səbəb olur. Dəyişən bəyannamə rejimini yandırsanız, modulun ən əvvəlində elan edilməmiş məlumat konteynerləri aşkar edilərsə, tərcüməçi sadəcə makronu işə salmağa icazə verməyəcək.
  3. Məlumat növünə uyğun olmayan dəyişən dəyərlərin səbəb olduğu səhvlərdən çəkinin. Normalda tam dəyişənə mətn dəyərinin təyin edilməsi xətaya səbəb olur. Bəli, bir tərəfdən ümumi tip bəyannaməsiz təyin edilir, lakin onlar əvvəlcədən elan olunarsa, təsadüfi səhvlərdən qaçınmaq olar.

Buna görə də, hər şeyə baxmayaraq, Excel makrolarında bütün dəyişənləri elan etmək çox tövsiyə olunur.

Dəyişənləri elan edərkən nəzərə alınmalı olan daha bir şey var. Dəyişəni elan edərkən ona heç bir dəyər təyin etməmək mümkündür, lakin bu halda o, standart dəyər əldə edir. Misal üçün:

  1. Sətirlər boşdur.
  2. Rəqəmlər 0 qiymətini alır.
  3. Boolean tipli dəyişənlər əvvəlcə yanlış hesab olunur.
  4. Standart tarix 30 dekabr 1899-cu ildir.

Məsələn, əvvəllər heç bir dəyər göstərilməyibsə, tam dəyişənə 0 dəyərini təyin etmək lazım deyil. O, artıq bu nömrəni ehtiva edir.

Seçim Açıq Bəyanat

Bu ifadə sizə VBA kodunda istifadə olunan bütün dəyişənləri elan etməyə və kod işə salınmazdan əvvəl elan olunmamış konteynerlərin mövcudluğunu müəyyən etməyə imkan verir. Bu funksiyadan istifadə etmək üçün sadəcə olaraq makro kodun ən yuxarı hissəsində Seçim Açıq kodu sətrini yazın.

Bu ifadəni hər dəfə kodunuza daxil etməlisinizsə, bunu VBA redaktorunda xüsusi parametrdən istifadə edərək edə bilərsiniz. Bu seçimi aktivləşdirmək üçün sizə lazımdır:

  1. Yol boyunca inkişaf mühitinə gedin - Alətlər > Seçimlər.
  2. Bundan sonra açılan pəncərədə Redaktor sekmesini açın.
  3. Və nəhayət, Dəyişən Bəyannaməni tələb et maddəsinin yanındakı qutuyu işarələyin.

Bu addımları tamamladıqdan sonra “OK” düyməsini sıxın. 

Budur, indi hər yeni makro yazarkən bu sətir avtomatik olaraq kodun yuxarı hissəsinə daxil ediləcək.

Sabitlərin və dəyişənlərin əhatə dairəsi

Hər dəyişən və ya sabit yalnız məhdud əhatə dairəsinə malikdir. Harada bəyan etməyinizdən asılıdır.

Tutaq ki, bir funksiyamız var Ümumi_Xərc(), və dəyişəndən istifadə edir sVAT_Rate. Moduldakı mövqedən asılı olaraq, fərqli əhatə dairəsi olacaq:

Seçim Aydındır

Subay kimi sVAT_Rate

Total_Cost() funksiyası ikiqatdır

.

.

.

End Function

Əgər dəyişən modulun özünün yuxarı hissəsində elan edilirsə, o, həmin modul boyunca yayılır. Yəni hər prosedurla oxuna bilər.

Üstəlik, əgər prosedurlardan biri dəyişənin qiymətini dəyişibsə, növbətisi də bu düzəldilmiş dəyəri oxuyacaq. Lakin digər modullarda bu dəyişən hələ də oxunmayacaq.

Seçim Aydındır

Total_Cost() funksiyası ikiqatdır

Subay kimi sVAT_Rate

   .

   .

   .

End Function

Bu halda dəyişən prosedur daxilində elan edilir və tərcüməçi başqa prosedurda istifadə olunarsa xəta atacaq.

Əgər dəyişənin digər modullar tərəfindən oxunmasını istəyirsinizsə, Dim açar sözünün əvəzinə Public açar sözündən istifadə etməlisiniz. Eynilə, Dim sözünün əvəzinə yazılmış Public bəyanatından istifadə etməklə dəyişənin əhatə dairəsini yalnız cari modulla məhdudlaşdıra bilərsiniz.

Siz eyni şəkildə sabitlərin əhatə dairəsini təyin edə bilərsiniz, lakin burada açar söz Const operatoru ilə birlikdə yazılır.

Burada onun sabitlər və dəyişənlərlə necə işlədiyinə dair yaxşı nümunə olan bir cədvəl var.

Seçim Aydındır

Tək kimi ictimai sVAT_Rate

İctimai Const iMax_Count = 5000

Bu misalda siz dəyişəni elan etmək üçün Public açar sözünün necə istifadə edildiyini və ümumi sabiti elan etmək üçün Visual Basic redaktorunda nə yazmağınız lazım olduğunu görə bilərsiniz. Bu dəyər konteynerlərinin əhatə dairəsi bütün modullara aiddir.
Seçim Aydındır

Şəxsi sVAT_Rate Single

Şəxsi Const iMax_Count = 5000

Burada Private açar sözündən istifadə etməklə dəyişənlər və sabitlər elan edilir. Bu o deməkdir ki, onlar yalnız cari modul daxilində görünə bilər və digər modullardakı prosedurlar onlardan istifadə edə bilməz.

Niyə sabitlər və dəyişənlər lazımdır

Sabitlərin və dəyişənlərin istifadəsi kodun başa düşülmə dərəcəsini artırmağa imkan verir. Və ümumiyyətlə yeni başlayanların dəyişənlərin nə üçün lazım olduğuna dair sualları yoxdursa, sabitlərə ehtiyacla bağlı bir çox qeyri-müəyyənliklər var. Və bu sual, ilk baxışdan olduqca məntiqli görünür. Axı siz dəyişəni bir dəfə elan edə və onu bir daha dəyişdirə bilməzsiniz.

Cavab yaddaşda böyük yer tutan məlumat növlərinin istifadəsi ilə eyni müstəvidə bir yerdə olduğu ortaya çıxır. Çox sayda dəyişənlə məşğul olsaq, təsadüfən mövcud konteyneri dəyişə bilərik. İstifadəçi müəyyən bir dəyərin heç vaxt dəyişməyəcəyini təyin edərsə, ətraf mühit bunu avtomatik olaraq idarə edəcəkdir.

Bu, makro bir neçə proqramçı tərəfindən yazıldığında xüsusilə vacibdir. Bəzi dəyişənin dəyişməməsi lazım olduğunu bilə bilərsiniz. Digəri isə yox. Const operatorunu göstərsəniz, başqa bir tərtibatçı bu dəyərin dəyişmədiyini biləcək.

Və ya bir adlı sabit varsa və dəyişənin fərqli, lakin oxşar adı varsa. Tərtibatçı sadəcə onları çaşdıra bilər. Məsələn, dəyişdirilməsi lazım olmayan bir dəyişən Variable11, redaktə edilə bilən digəri isə Variable1 adlanır. Bir şəxs avtomatik olaraq kod yazarkən təsadüfən əlavə bir vahidi atlaya bilər və bunu fərq etməz. Nəticədə, dəyərlər üçün konteyner dəyişdiriləcək, ona toxunulmamalıdır.

Yaxud tərtibatçı özü hansı dəyişənlərə toxuna biləcəyini və hansı dəyişənlərə toxuna bilməyəcəyini unuda bilər. Bu, çox vaxt kod bir neçə həftə ərzində yazıldıqda baş verir və onun ölçüsü böyük olur. Bu müddət ərzində hətta bu və ya digər dəyişənin nə demək olduğunu unutmaq çox asandır.

Bəli, bu vəziyyətdə şərhlərlə edə bilərsiniz, lakin Const sözünü dəqiqləşdirmək daha asan deyilmi?

Nəticələr

Dəyişənlər, hesablamalardan tutmuş müəyyən hadisələr haqqında istifadəçiyə məlumat verməyə və ya elektron cədvəlin xanalarında xüsusi dəyərləri təyin etməyə qədər mürəkkəb əməliyyatları yerinə yetirməyə imkan verən makro proqramlaşdırmanın vacib komponentidir.

Tərtibatçı bu konteynerlərin məzmununun gələcəkdə dəyişməyəcəyini dəqiq bilirsə, sabitlərdən istifadə edilməlidir. Bunun əvəzinə dəyişənlərdən istifadə etməmək tövsiyə olunur, çünki təsadüfən səhv etmək mümkündür.

Cavab yaz