Фаҳмидани тағирёбандаҳо ва доимӣ дар макросҳои Excel

Дар ин мақола шумо мефаҳмед, ки константаҳо ва тағирёбандаҳо дар макросҳо чӣ гунаанд, онҳоро дар куҷо истифода бурдан мумкин аст ва фарқи асосии байни намудҳои гуногуни додаҳо чист. Инчунин ошкор карда мешавад, ки чаро константаҳо лозиманд, агар шумо танҳо тағирёбанда нависед ва ҳеҷ гоҳ онро тағир надиҳед.

Мисли дигар забонҳои барномасозӣ, маълумотро дар тағирёбандаҳо ё доимӣ нигоҳ доштан мумкин аст (ҳардуи онҳо аксар вақт контейнерҳои додаҳо номида мешаванд). Ин фарқи асосии байни ин мафҳумҳост. Аввалин метавонад вобаста ба он чизе, ки дар барнома рӯй медиҳад, тағир ёбад. Дар навбати худ, константаҳо як маротиба муқаррар карда мешаванд ва арзиши худро тағир намедиҳанд.

Константҳо метавонанд муфид бошанд, агар ба шумо лозим аст, ки як арзиши калонро чанд маротиба истифода баред. Ба ҷои нусхабардории рақам, шумо метавонед танҳо номи доимиро нависед. Масалан, шумо метавонед доимии "Pi" -ро барои нигоҳ доштани Pi, ки арзиши доимӣ аст, истифода баред. Ин хеле калон аст ва ҳар дафъа навиштани он ё ҷустуҷӯ ва нусхабардории он хеле душвор аст. Ҳамин тавр, навиштани ду аломат кифоя аст ва муҳити атроф рақами дилхоҳро ба таври худкор истифода мебарад.

Истифодабарандаи Excel бояд тағирёбандаҳоро эълон кунад, агар ба ӯ лозим ояд, ки вақт аз вақт арзиши дар онҳо нигоҳ дошташударо тағир диҳад. Масалан, шумо метавонед як тағирёбандаеро бо номи sVAT_Rate таъин кунед, ки меъёри ААИ ҷорӣро барои маҳсулот нигоҳ медорад. Агар он тағир ёбад, шумо метавонед онро зуд ислоҳ кунед. Ин махсусан барои онҳое, ки дар Иёлоти Муттаҳида тиҷорат мекунанд, муфид аст, ки дар он ҷо баъзе молҳо метавонанд умуман андоз аз арзиши иловашуда набошанд (ва ин андоз низ аз иёлот ба иёлот фарқ мекунад).

Намудҳои маълумот

Ҳар як контейнери маълумот метавонад яке аз якчанд намуд бошад. Дар ин ҷо ҷадвале оварда шудааст, ки намудҳои стандартии иттилооти коркардшударо тавсиф мекунад. Бисёре аз онҳо ҳастанд ва шояд дар аввал ба як наврас чунин менамояд, ки онҳо якдигарро такрор мекунанд. Аммо ин як эҳсоси фиребанда аст. Барои фаҳмидани он ки чаро муайян кардани навъи дурусти додаҳо ин қадар муҳим аст, хонед.

Тавсия дода намешавад, ки навъи маълумотеро, ки дар хотира барои рақамҳои хурд ҷой мегирад, истифода барад. Масалан, барои рақами 1 истифодаи навъи байт кифоя аст. Ин ба кори модули иҷрошаванда, махсусан дар компютерҳои заиф таъсири мусбат мерасонад. Аммо дар ин чо дур нарафтани мухим аст. Агар шумо навъи маълумотеро истифода баред, ки хеле зич аст, арзиши аз ҳад калон метавонад ба он мувофиқат накунад.

Эълони константҳо ва тағирёбандаҳо

Истифодаи контейнери маълумот бидуни эълони аввал қатъиян манъ аст. Он гоҳ як қатор мушкилоте ба миён омада метавонанд, ки барои пешгирӣ кардани онҳо якчанд сатри хурди кодро бо номбар кардани тағирёбандаҳо ё доимӣ навиштан лозим аст.

Барои эълон кардани тағирёбанда, изҳороти Dim истифода мешавад. Масалан, ба ин монанд:

Dim Variable_Name ҳамчун бутун

Variable_Name номи тағирёбанда аст. Баъдан, оператори As навишта мешавад, ки намуди маълумотро нишон медиҳад. Ба ҷои сатрҳои "Тағйирёбанда_Номи" ва "Бумин" шумо метавонед ном ва навъи додаҳои худро ворид кунед.

Константаҳоро низ эълон кардан мумкин аст, аммо шумо бояд аввал арзиши онҳоро муайян кунед. Яке аз вариантҳо ин аст:

Const iMaxCount = 5000

Аз рӯи адолат, дар баъзе мавридҳо шумо метавонед бидуни эълони тағирёбанда кор кунед, аммо дар ин ҳолат онҳо ба таври худкор навъи Variant таъин карда мешаванд. Аммо, ин бо сабабҳои зерин тавсия дода намешавад:

  1. Вариант хеле сусттар коркард мешавад ва агар ин гуна тағирёбандаҳо зиёд бошанд, коркарди информатсияро дар компютерҳои заиф хеле суст кардан мумкин аст. Чунин ба назар мерасад, ки ин сонияҳо ҳал хоҳанд кард? Аммо агар шумо бояд шумораи зиёди сатрҳои кодро нависед ва сипас онро дар компютерҳои заиф иҷро кунед (бо назардошти он ки сюитаҳои офиси муосир миқдори зиёди RAM талаб мекунанд), шумо метавонед корро комилан қатъ кунед. Ҳолатҳое ҳастанд, ки навиштани нодурусти макросҳо боиси ях кардани китобҳои смарт, ки миқдори ками хотираи оперативӣ доранд ва барои иҷрои вазифаҳои мураккаб пешбинӣ нашудаанд. 
  2. Ба иштибоҳ дар номҳо иҷозат дода мешавад, ки онро бо истифода аз изҳороти Option Explicit пешгирӣ кардан мумкин аст, ки ба шумо имкон медиҳад, ки тағирёбандаи эълоннашуда, агар пайдо шавад, пайдо кунед. Ин роҳи осони ошкор кардани хатогиҳост, зеро хурдтарин хатои хаттӣ боиси он мегардад, ки тарҷумон тағирёбандаро муайян карда наметавонад. Ва агар шумо режими эъломияи тағирёбандаро фаъол созед, тарҷумон ба шумо имкон намедиҳад, ки макросро иҷро кунед, агар контейнерҳои маълумоте, ки дар ибтидои модул эълон нашудаанд, пайдо шаванд.
  3. Аз хатогиҳое, ки дар натиҷаи арзишҳои тағирёбанда ба намуди додаҳо мувофиқ нестанд, пешгирӣ кунед. Одатан, таъин кардани арзиши матн ба тағирёбандаи бутун хато мекунад. Бале, аз як тараф, навъи умумӣ бидуни эъломия таъин карда мешавад, аммо агар онҳо пешакӣ эълон карда шаванд, пас аз хатогиҳои тасодуфӣ пешгирӣ кардан мумкин аст.

Аз ин рӯ, сарфи назар аз ҳама, тавсия дода мешавад, ки ҳама тағирёбандаҳоро дар макросҳои Excel эълон кунед.

Ҳангоми эълони тағирёбандаҳо як чизи дигарро бояд дар хотир дошт. Ҳангоми эълон кардани тағирёбанда ягон арзиш таъин кардан мумкин нест, аммо дар ин ҳолат он арзиши пешфарзро ба даст меорад. Барои намуна:

  1. Хатҳо холӣ карда мешаванд.
  2. Рақамҳо арзиши 0-ро мегиранд.
  3. Тағйирёбандаҳои навъи Boolean дар аввал бардурӯғ ҳисобида мешаванд.
  4. Санаи пешфарз 30 декабри соли 1899 мебошад.

Масалан, ба шумо лозим нест, ки арзиши 0-ро ба тағирёбандаи бутун таъин кунед, агар қаблан ягон арзиш муайян карда нашуда бошад. Вай аллакай ин рақамро дар бар мегирад.

Изҳороти возеҳ вариант

Ин изҳорот ба шумо имкон медиҳад, ки ҳамаи тағирёбандаҳоеро, ки дар коди VBA истифода мешаванд, эълон кунед ва мавҷудияти ҳама гуна контейнерҳои эълоннашударо пеш аз иҷро кардани код муайян кунед. Барои истифодаи ин хусусият, танҳо дар болои рамзи макрос як сатри рамзи Option Explicit -ро нависед.

Агар ба шумо лозим ояд, ки ҳар дафъа ин изҳоротро ба рамзи худ дохил кунед, шумо метавонед онро бо истифода аз танзимоти махсус дар муҳаррири VBA иҷро кунед. Барои фаъол кардани ин хосият, шумо бояд:

  1. Ба муҳити рушд қад-қади роҳ равед - Асбобҳо > Интихобҳо.
  2. Дар равзанаи пас аз ин кушодашуда, ҷадвали Муҳаррирро кушоед.
  3. Ва ниҳоят, қуттии назди банди Эъломияи тағирёбандаро тафтиш кунед.

Пас аз анҷоми ин қадамҳо, тугмаи "OK" -ро клик кунед. 

Ҳамин аст, ҳоло ҳангоми навиштани ҳар як макроси нав, ин сатр ба таври худкор дар болои код ворид карда мешавад.

Доираи константаҳо ва тағирёбандаҳо

Ҳар як тағирёбанда ё доимӣ танҳо доираи маҳдуд дорад. Ин аз он вобаста аст, ки шумо онро эълон мекунед.

Фарз мекунем, ки мо функсия дорем Маҷмӯи_арзиш(), ва он тағирёбандаро истифода мебарад sVAT_Rate. Вобаста аз мавқеъ дар модул, он доираи дигар дорад:

Опсияи равшан

sVAT_Rate ҳамчун ягона

Функсияи Total_Cost () ҳамчун дучандон

.

.

.

Функсияҳои охирин

Агар тағирёбанда дар болои худи модул эълон карда шавад, он дар тамоми ин модул паҳн мешавад. Яъне, онро бо ҳар як тартиб хондан мумкин аст.

Гузашта аз ин, агар яке аз расмиёт арзиши тағирёбандаро тағир дода бошад, пас дигаре низ ин арзиши ислоҳшударо мехонад. Аммо дар дигар модулҳо ин тағирёбанда то ҳол хонда намешавад.

Опсияи равшан

Функсияи Total_Cost () ҳамчун дучандон

sVAT_Rate ҳамчун ягона

   .

   .

   .

Функсияҳои охирин

Дар ин ҳолат, тағирёбанда дар дохили процедура эълон карда мешавад ва агар он дар тартиби дигар истифода шавад, тарҷумон хато мекунад.

Агар шумо хоҳед, ки тағирёбанда аз ҷониби дигар модулҳо хонда шавад, шумо бояд ба ҷои калимаи Dim калимаи калидии Public -ро истифода баред. Ба ҳамин монанд, шумо метавонед бо истифода аз изҳороти Public, ки ба ҷои калимаи Dim навишта шудааст, доираи тағирёбандаро танҳо бо модули ҷорӣ маҳдуд кунед.

Шумо метавонед доираи константаҳоро бо ҳамин тарз муқаррар кунед, аммо калимаи калидӣ дар ин ҷо якҷоя бо оператори Const навишта мешавад.

Дар ин ҷо ҷадвал бо намунаи хуби он, ки чӣ тавр он бо доимӣ ва тағирёбандаҳо кор мекунад.

Опсияи равшан

sVAT_Rate ҷамъиятӣ ҳамчун ягона

Const Public iMax_Count = 5000

Дар ин мисол, шумо метавонед бубинед, ки чӣ гуна калимаи калидии Public барои эълони тағирёбанда истифода мешавад ва барои эълон кардани константи оммавӣ дар муҳаррири Visual Basic чи бояд нависад. Доираи ин контейнерҳои арзишӣ ба ҳамаи модулҳо дахл дорад.
Опсияи равшан

sVAT_Rate хусусӣ ҳамчун ягона

Const Private iMax_Count = 5000

Дар ин ҷо тағирёбандаҳо ва доимӣ бо истифода аз калимаи Private эълон карда мешаванд. Ин маънои онро дорад, ки онҳоро танҳо дар дохили модули ҷорӣ дидан мумкин аст ва расмиёти модулҳои дигар онҳоро истифода бурда наметавонанд.

Чаро константаҳо ва тағирёбандаҳо лозиманд

Истифодаи константаҳо ва тағирёбандаҳо ба шумо имкон медиҳад, ки дараҷаи фаҳмиши кодро баланд бардоред. Ва агар умуман шурӯъкунандагон дар бораи он ки чаро тағирёбандаҳо лозиманд савол надошта бошанд, пас дар бораи зарурати доимӣ норавшаниҳои зиёде мавҷуданд. Ва ин савол дар назари аввал комилан мантиқӣ менамояд. Дар ниҳоят, шумо метавонед як тағирёбандаро як маротиба эълон кунед ва дигар ҳеҷ гоҳ тағир надиҳед.

Ҷавоб маълум мешавад, ки дар ҳамон як сатҳ дар мавриди истифодаи намудҳои додаҳо, ки дар хотира фазои калонро ишғол мекунанд, ҷой дорад. Агар мо бо шумораи зиёди тағирёбандаҳо кор кунем, мо метавонем тасодуфан як контейнери мавҷударо тағир диҳем. Агар корбар муқаррар кунад, ки арзиши муайян ҳеҷ гоҳ тағир наёбад, муҳит ба таври худкор инро назорат мекунад.

Ин махсусан муҳим аст, вақте ки макрос аз ҷониби якчанд барномасоз навишта шудааст. Яке метавонад бидонад, ки баъзе тағирёбанда набояд тағир ёбад. Ва дигараш не. Агар шумо оператори Const-ро муайян кунед, таҳиягари дигар медонад, ки ин арзиш тағир намеёбад.

Ё, агар як доимӣ бо як ном мавҷуд бошад ва тағирёбанда номи дигар, вале шабеҳ дошта бошад. Таҳиягар метавонад онҳоро танҳо омехта кунад. Масалан, як тағирёбандае, ки тағир додан лозим нест, Variable11 ва дигареро, ки таҳрир кардан мумкин аст, Variable1 меноманд. Шахсе метавонад ба таври худкор ҳангоми навиштани код тасодуфан як воҳиди изофӣ гузарад ва онро пайхас накунад. Дар натиҷа, контейнер барои арзишҳо тағир дода мешавад, ки набояд ба онҳо даст расонад.

Ё худи таҳиякунанда метавонад фаромӯш кунад, ки кадом тағирёбандаҳоро ламс карда метавонад ва ба кадоме наметавонад. Ин аксар вақт вақте рӯй медиҳад, ки код барои якчанд ҳафта навишта мешавад ва андозаи он калон мешавад. Дар ин муддат ҳатто фаромӯш кардан хеле осон аст, ки ин ё он тағирёбанда чӣ маъно дорад.

Бале, шумо метавонед бо шарҳҳо дар ин вазъият кор кунед, аммо муайян кардани калимаи Const осонтар нест?

Хулоса

Тағирёбандаҳо ҷузъи муҳими барномасозии макро мебошанд, ки ба шумо имкон медиҳанд, ки амалиёти мураккабро аз ҳисобҳо то огоҳ кардани корбар дар бораи рӯйдодҳои муайян ё муайян кардани арзишҳои мушаххас дар ячейкаҳои ҷадвали электронӣ иҷро кунед.

Константҳо бояд истифода шаванд, агар таҳиякунанда аниқ донад, ки мундариҷаи ин контейнерҳо дар оянда тағир намеёбад. Тавсия дода мешавад, ки ба ҷои тағйирёбандаҳоро истифода набаред, зеро тасодуфан хато кардан мумкин аст.

Дин ва мазҳаб