VBA-дағы айнымалылар мен тұрақтылар

VBA-да, кез келген басқа бағдарламалау тілінде сияқты, айнымалылар мен тұрақтылар кез келген мәндерді сақтау үшін қолданылады. Аты айтып тұрғандай, айнымалылар өзгеруі мүмкін, ал тұрақтылар тұрақты мәндерді сақтайды.

Мысалы, тұрақты Pi 3,14159265 мәнін сақтайды... «Pi» саны бағдарламаны орындау барысында өзгермейді, бірақ мұндай мәнді тұрақты ретінде сақтау әлі де ыңғайлырақ.

Сонымен бірге біз айнымалыны пайдалана аламыз sVAT_Rate сатып алынған тауарларға ҚҚС ставкасын сақтауға. Айнымалы мән sVAT_Rate сатып алынған өнімге байланысты өзгеруі мүмкін.

Мәліметтер түрлері

Барлық айнымалылар мен тұрақтылар белгілі бір деректер түріне жатады. Төмендегі кестеде мүмкін мәндердің сипаттамасы мен ауқымы бар VBA жүйесінде пайдаланылатын деректер түрлері берілген:

Деректер түрі ӨлшемсипаттамасыМәндер ауқымы
Байт1 байтОң бүтін сандар; екілік деректер үшін жиі қолданылады0 бастап 255 үшін
Бульдік2 байтTrue немесе False болуы мүмкінШын немесе жалған
бүтін2 байтБүтін сандар (бөлшек бөлігі жоқ)-32 -тан +768 дейін
ұзақ4 байтҮлкен бүтін сандар (бөлшек бөлігі жоқ)от -2 147 483 648 до +2 147 483 647
Жалғыз4 байтБір дәлдіктегі өзгермелі нүкте саны-3.4e38-ден +3.4e38-ге дейін
қос8 байтҚос дәлдіктегі өзгермелі нүкте саны-1.8e308-ден +1.8e308-ге дейін
валюта8 байтТұрақты ондық таңбалары бар өзгермелі нүкте саныот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
дата8 байтКүн және уақыт – Күн түріндегі деректер өзгермелі нүкте санымен көрсетіледі. Бұл санның бүтін бөлігі күнді, ал бөлшек бөлігі уақытты білдіреді.1 жылдың 100 қаңтарынан 31 жылдың 9999 желтоқсанына дейін
зат4 байтНысан сілтемесіКез келген нысан сілтемесі
StringөзгерудеТаңбалар жинағы. Жол түрі тұрақты немесе айнымалы ұзындықта болуы мүмкін. Айнымалы ұзындықпен жиі пайдаланыладыБекітілген ұзындық – шамамен 65 таңбаға дейін. Айнымалы ұзындық – шамамен 500 миллиард таңбаға дейін
НұсқаөзгерудеКүн, қалқымалы мән немесе таңбалар жолы болуы мүмкін. Бұл тип деректердің қандай түрі енгізілетіні алдын ала белгісіз жағдайларда қолданылады.Сан – Double, string – String

Жоғарыдағы кестені пайдаланып және дұрыс деректер түрін таңдай отырып, жадты үнемді пайдалануға болады (мысалы, деректер түрін таңдаңыз) бүтін орнына ұзақ or Жалғыз орнына қос). Дегенмен, ықшам деректер түрлерін пайдаланған кезде, сіздің кодыңыз оларға пропорционалды емес үлкен мәндерді сыйғызбау үшін абай болуыңыз керек.

Айнымалылар мен тұрақтыларды жариялау

Аудармашының ескертуі: VBA-дағы айнымалылар туралы айтатын болсақ, тағы бір маңызды мәселені атап өткен жөн. Егер айнымалыны жарияласақ, бірақ оған ешқандай мән бермесек, онда ол әдепкі мәнмен инициализацияланады:

• мәтін жолдары бос жолдармен инициализацияланады;

• сандар — 0 мәні;

• айнымалылар түрі Бульдік — жалған;

• күндері – 30 желтоқсан 1899 ж.

Айнымалы немесе тұрақты мәнді пайдаланбас бұрын оны жариялау керек. Ол үшін макросқа келесі қарапайым код жолын қосыңыз:

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

Жоғарыдағы код жолында Айнымалы_атауы кодта қолданылатын айнымалының аты және Деректер_түрі осы мақалада сәл бұрын берілген кестедегі деректер түрлерінің бірі болып табылады. Мысалға:

Dim sVAT_Rate ретінде жалғыз күңгірт i бүтін сан ретінде

Тұрақтылар да осылай жарияланады, бірақ тұрақтыларды жариялағанда олардың мәні бірден көрсетілуі керек. Мысалы, келесідей:

Const iMaxCount = 5000 Const iMaxScore = 100

Excel бағдарламасында айнымалы мәндерді жариялау қажет емес. Әдепкі бойынша, барлық енгізілген, бірақ Excel бағдарламасында жарияланбаған айнымалылардың түрі болады Нұсқа және сандық және мәтіндік мәнді қабылдай алады.

Осылайша, бағдарламашы жаңа айнымалыны кез келген уақытта пайдалана алады (тіпті ол жарияланбаған болса да) және Excel оны түрдегі айнымалы ретінде қарастырады. Нұсқа. Дегенмен, мұны жасамаудың бірнеше себептері бар:

  1. Жадты пайдалану және есептеу жылдамдығы. Деректер түрін көрсететін айнымалы мәнді жарияламасаңыз, әдепкі бойынша ол түрге орнатылады. Нұсқа. Бұл деректер түрі басқа деректер түрлеріне қарағанда көбірек жадты пайдаланады. Бір айнымалыға бірнеше қосымша байт көп естілмейтін шығар, бірақ іс жүзінде бағдарламаларда мыңдаған айнымалылар болуы мүмкін (әсіресе массивтермен жұмыс істегенде). Сондықтан, сияқты айнымалылар пайдаланатын қосымша жад Нұсқа, түріндегі айнымалылармен салыстырғанда бүтін or Жалғыз, айтарлықтай сомаға дейін қосуы мүмкін. Сонымен қатар түрдегі айнымалылармен операциялар Нұсқа басқа түрдегі айнымалыларға қарағанда әлдеқайда баяу орындалады, сәйкесінше қосымша мың түрдегі айнымалылар Нұсқа есептеулерді айтарлықтай баяулатуы мүмкін.
  2. Айнымалы атаулардағы қателердің алдын алу. Егер барлық айнымалылар жарияланған болса, онда VBA операторын қолдануға болады - Опция Ашық (бұл туралы кейінірек айтатын боламыз) барлық жарияланбаған айнымалыларды анықтау үшін. Бұл қате жазылған айнымалы атының нәтижесінде бағдарламада қатенің пайда болуын жояды. Мысалы, аталған айнымалыны пайдалану sVAT_Rate, сіз теру қатесін жасай аласыз және осы айнымалыға мән бере отырып, мынаны жаза аласыз: “VATRate = 0,175”. Бұдан былай айнымалы болады деп күтілуде sVAT_Rate 0,175 мәнін қамтуы керек – бірақ, әрине, жоқ. Егер барлық пайдаланылған айнымалы мәндерді міндетті түрде жариялау режимі қосылса, онда VBA компиляторы қатені дереу көрсетеді, өйткені ол айнымалы мәнді таба алмайды. VATRбағасы жарияланғандардың қатарында.
  3. Айнымалының жарияланған түріне сәйкес келмейтін мәндерді бөлектеу. Белгілі бір түрдегі айнымалыны жариялап, оған басқа типтегі деректерді тағайындауға әрекеттенсеңіз, қате пайда болады, ол түзетілмесе, бағдарламаның бұзылуына әкелуі мүмкін. Бір қарағанда, бұл айнымалы мәндерді жарияламаудың жақсы себебі болып көрінуі мүмкін, бірақ шын мәнінде, айнымалылардың бірі қабылдауға тиіс қате деректерді алғаны белгілі болды - соғұрлым жақсы! Әйтпесе, егер бағдарлама жұмысын жалғастырса, нәтижелер дұрыс емес және күтпеген болуы мүмкін және қателердің себебін табу әлдеқайда қиын болады. Сондай-ақ, макростың «сәтті» орындалуы мүмкін. Нәтижесінде қате байқалмай қалады және дұрыс емес деректермен жұмыс жалғасады!

Осыған байланысты қате деректер түрін анықтап, кодтағы мұндай қателерді мүмкіндігінше ертерек түзеткен жөн. Осы себептерге байланысты VBA макросын жазу кезінде барлық айнымалы мәндерді жариялау ұсынылады.

Опция Ашық

Оператор Опция Ашық VBA кодында қолданылатын барлық айнымалы мәндердің жариялануын тудырады және барлық жарияланбаған айнымалы мәндерді компиляция кезінде қателер ретінде белгілейді (кодты орындау басталғанға дейін). Бұл операторды қолдану қиын емес – VBA файлының ең жоғарғы жағына мына жолды жазыңыз:

Option Explicit

Әрқашан енгізгіңіз келсе Опция Ашық жасалған әрбір жаңа VBA модулінің жоғарғы жағында, мұны автоматты түрде жасауға болады. Мұны істеу үшін опцияны қосу керек Айнымалы декларацияны талап ету VBA редакторының параметрлерінде.

Бұл келесідей орындалады:

  • Visual Basic өңдегіші мәзірінен түймешігін басыңыз құралдары > Опциялар
  • Пайда болған диалогтық терезеде қойындыны ашыңыз редактор
  • Құсбелгіні қойыңыз Айнымалы декларацияны талап ету және баспасөз OK

Қосылған кезде, жол Опция Ашық жасалған әрбір жаңа модульдің басында автоматты түрде енгізіледі.

Айнымалылар мен тұрақтылардың қолданылу аясы

Әрбір жарияланған айнымалының немесе тұрақтының өзінің шектеулі ауқымы бар, яғни бұл айнымалы бар бағдарламаның шектеулі бөлігі. Ауқым айнымалының немесе тұрақтының мәлімдемесі қай жерде жасалғанына байланысты. Мысалы, айнымалыны алайық sVAT_Rate, ол функцияда қолданылады Жалпы баға. Келесі кестеде айнымалы ауқымды анықтаудың екі нұсқасы талқыланады sVAT_Rateмодульде екі түрлі позицияда жарияланған:

Опция айқын күңгірттенген sVAT_Rate бір функция ретінде Total_Cost() қосарлы ... Соңғы функция
Айнымалы болса sVAT_Rate модульдің ең басында жарияланған болса, онда бұл айнымалының ауқымы барлық модуль болады (яғни айнымалы sVAT_Rate осы модульдегі барлық процедуралар арқылы танылады).

Сондықтан функцияда болса Жалпы баға айнымалы sVAT_Rate белгілі бір мән тағайындалады, содан кейін сол модульде орындалатын келесі функция айнымалыны пайдаланады sVAT_Rate бірдей мағынамен.

Алайда, егер басқа модульде орналасқан қандай да бір функция шақырылса, онда ол үшін айнымалы sVAT_Rate белгілі болмайды.

Опция айқын функция Total_Cost() Double Dim sVAT_Rate ретінде Жалғыз ... Соңғы функция
Айнымалы болса sVAT_Rate функцияның басында жарияланған Жалпы баға, онда оның ауқымы тек осы функциямен шектеледі (яғни функция ішінде Жалпы баға, айнымалыны пайдалануға болады sVAT_Rate, бірақ сыртында емес).

Қолдануға тырысқанда sVAT_Rate басқа процедурада VBA компиляторы қате туралы хабарлайды, себебі бұл айнымалы функциядан тыс жарияланбаған. Жалпы баға (оператор пайдаланылған жағдайда Опция Ашық).

Жоғарыда көрсетілген мысалда айнымалы кілт сөзбен модуль деңгейінде жарияланған Өлшем. Дегенмен, жарияланған айнымалы мәндерді басқа модульдерде пайдалану қажет болуы мүмкін. Мұндай жағдайларда кілт сөздің орнына айнымалыны жариялау үшін Өлшем кілт сөзді қолдану керек қоғамдық.

Айтпақшы, кілт сөздің орнына айнымалыны модуль деңгейінде жариялау үшін Өлшем кілт сөзді қолдануға болады жеке, бұл айнымалы мән тек ағымдағы модульде пайдалануға арналғанын көрсетеді.

Сондай-ақ тұрақты мәндерді жариялау үшін кілт сөздерді пайдалануға болады. қоғамдық и жеке, бірақ кілт сөздің орнына емес Const, онымен бірге.

Келесі мысалдар кілт сөздердің қолданылуын көрсетеді қоғамдық и жеке айнымалылар мен тұрақтыларға қолданылады.

Опция Ашық Қоғамдық sVAT_Rate Бірыңғай жалпы конст iMax_Count = 5000 ...    
Бұл мысалда кілт сөз қоғамдық айнымалыны жариялау үшін қолданылады sVAT_Rate және тұрақтылар iMax_Count. Осылайша жарияланған элементтердің ауқымы бүкіл ағымдағы жоба болады.

Бұл дегеніміз sVAT_Rate и iMax_Count кез келген жоба модулінде қолжетімді болады.

Опция Айқын Жеке sVAT_Rate ретінде Жалғыз Жеке Const iMax_Count = 5000 ...    
Бұл мысалда айнымалыны жариялау үшін sVAT_Rate және тұрақтылар iMax_Count қолданылатын кілт сөз жеке. Бұл элементтердің ауқымы ағымдағы модуль болып табылады.

Бұл дегеніміз sVAT_Rate и iMax_Count ағымдағы модульдің барлық процедураларында қолжетімді болады, бірақ басқа модульдердегі процедуралар үшін қол жетімді болмайды.

пікір қалдыру