Vigezo na mara kwa mara katika VBA

Katika VBA, kama ilivyo katika lugha nyingine yoyote ya programu, vigezo na vidhibiti hutumiwa kuhifadhi maadili yoyote. Kama jina linamaanisha, vijiti vinaweza kubadilika, wakati viboreshaji huhifadhi maadili yaliyowekwa.

Kwa mfano, mara kwa mara Pi huhifadhi thamani 3,14159265… Nambari "Pi" haitabadilika wakati wa utekelezaji wa programu, lakini bado ni rahisi zaidi kuhifadhi thamani kama hiyo mara kwa mara.

Wakati huo huo, tunaweza kutumia kutofautiana sVAT_Kiwango kuhifadhi kiwango cha VAT kwenye bidhaa zilizonunuliwa. Thamani inayobadilika sVAT_Kiwango inaweza kutofautiana kulingana na bidhaa iliyonunuliwa.

Aina za data

Vigezo vyote na vidhibiti ni vya aina fulani ya data. Jedwali hapa chini linaorodhesha aina za data zinazotumiwa katika VBA na maelezo na anuwai ya maadili yanayowezekana:

Aina ya data ukubwaMaelezoAina ya maadili
Tote1 kaNambari kamili; mara nyingi hutumika kwa data ya binarykutoka kwa 0 255
Boolean2 kaInaweza kuwa Kweli au Si kweliKweli au Uongo
Integer2 kaNambari nzima (hakuna sehemu ya sehemu)kutoka -32 hadi +768
Muda mrefu4 kaNambari kamili (hazina sehemu ndogo)от -2 147 483 648 до +2 147 483 647
moja4 kaNambari ya uhakika moja ya uhakika ya kueleakutoka -3.4e38 hadi +3.4e38
Mara mbili8 kaNambari ya uhakika ya kuelea maradufukutoka -1.8e308 hadi +1.8e308
Sarafu8 kaNambari ya sehemu inayoelea, yenye idadi isiyobadilika ya nafasi za desimaliот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
tarehe8 kaTarehe na wakati - Data ya aina Tarehe inawakilishwa na nambari ya sehemu inayoelea. Sehemu kamili ya nambari hii inaonyesha tarehe, na sehemu ya sehemu inaonyesha wakati.kutoka Januari 1, 100 hadi Desemba 31, 9999
Object4 kaRejeleo la kituRejeleo la kitu chochote
KambainabadilikaSeti ya wahusika. Aina ya Kamba inaweza kuwa ya kudumu au urefu wa kutofautiana. Inatumika zaidi na urefu tofautiUrefu usiobadilika - hadi takriban herufi 65. Urefu unaobadilika - hadi takriban vibambo bilioni 500
VariantinabadilikaHuenda ikawa na tarehe, kuelea, au mfuatano wa herufi. Aina hii hutumiwa katika hali ambapo haijulikani mapema ni aina gani ya data itaingizwa.Nambari - Mbili, kamba - Kamba

Ni wazi, kwa kutumia jedwali hapo juu na kuchagua aina sahihi ya data, unaweza kutumia kumbukumbu kiuchumi zaidi (kwa mfano, chagua aina ya data). Integer badala Muda mrefu or moja badala Mara mbili) Walakini, unapotumia aina zaidi za data, unahitaji kuwa mwangalifu kwamba nambari yako haijaribu kutoshea maadili makubwa ndani yao.

Kutangaza Vigezo na Mara kwa mara

Ujumbe wa Mtafsiri: Kuzungumza juu ya anuwai katika VBA, inafaa kutaja jambo moja muhimu sana. Ikiwa tutatangaza kutofautisha lakini hatuikabidhi thamani yoyote, basi inaanzishwa na thamani chaguo-msingi:

• mifuatano ya maandishi huanzishwa kwa mifuatano tupu;

• nambari - thamani 0;

• aina vigeuzo Boolean - Uongo;

• tarehe - Desemba 30, 1899.

Kabla ya kutofautiana au mara kwa mara inaweza kutumika, lazima itangazwe. Ili kufanya hivyo, ongeza laini ifuatayo ya nambari kwa jumla:

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

Katika mstari wa juu wa kanuni Jina_linalobadilika ni jina la kutofautisha litakalotumika katika msimbo, na Aina_ya_Data ni mojawapo ya aina za data kutoka kwa jedwali zilizotolewa mapema kidogo katika makala hii. Kwa mfano:

Punguza sVAT_Rate Kama Dim Moja na Kama Nambari kamili

Mara kwa mara hutangazwa sawa, lakini wakati wa kutangaza mara kwa mara, thamani yao lazima ionyeshwa mara moja. Kwa mfano, kama hii:

Const iMaxCount = 5000 Const iMaxScore = 100

Sio lazima kutangaza vigezo katika Excel. Kwa chaguo-msingi, vigezo vyote vilivyoingizwa lakini visivyotangazwa katika Excel vitakuwa na aina Variant na itaweza kukubali thamani ya nambari na maandishi.

Kwa hivyo, mpangaji programu anaweza kutumia kibadilishaji kipya wakati wowote (hata kama hakijatangazwa), na Excel kitaichukulia kama aina ya aina. Variant. Walakini, kuna sababu kadhaa kwa nini hii haipaswi kufanywa:

  1. Matumizi ya kumbukumbu na kasi ya kukokotoa. Ikiwa hutatangaza kutofautiana na dalili ya aina ya data, basi kwa chaguo-msingi itawekwa kwa aina Variant. Aina hii ya data hutumia kumbukumbu zaidi kuliko aina zingine za data. Baiti chache za ziada kwa kila utofauti zinaweza zisisikike kama nyingi, lakini kwa mazoezi, programu zinaweza kuwa na maelfu ya vigeuzo (haswa wakati wa kufanya kazi na safu). Kwa hiyo, kumbukumbu ya ziada inayotumiwa na vigezo kama Variant, ikilinganishwa na vigezo vya aina Integer or moja, inaweza kuongeza hadi kiasi kikubwa. Aidha, shughuli na vigezo vya aina Variant hutekelezwa polepole zaidi kuliko na vigeu vya aina nyingine, mtawalia, aina elfu za ziada za aina Variant inaweza kupunguza kasi ya mahesabu.
  2. Kuzuia makosa ya makosa katika majina tofauti. Ikiwa vigezo vyote vimetangazwa, basi taarifa ya VBA inaweza kutumika - Chaguo Wazi (tutazungumza juu yake baadaye) ili kutambua vigezo vyote ambavyo havijatangazwa. Hii huondoa kuonekana kwa kosa katika programu kama matokeo ya jina la kutofautisha lililoandikwa vibaya. Kwa mfano, kwa kutumia variable inayoitwa sVAT_Kiwango, unaweza kufanya typo na, ukitoa thamani kwa variable hii, andika: "VATRate = 0,175". Inatarajiwa kwamba kuanzia sasa, kutofautiana sVAT_Kiwango inapaswa kuwa na thamani 0,175 - lakini bila shaka haina. Ikiwa hali ya tamko la lazima la vigezo vyote vilivyotumiwa imewezeshwa, basi mkusanyaji wa VBA ataonyesha kosa mara moja, kwani haitapata kutofautisha. Kodi ya VAT miongoni mwa waliotangazwa.
  3. Kuangazia thamani ambazo hazilingani na aina iliyotangazwa ya kigezo. Ikiwa unatangaza kutofautiana kwa aina fulani na kujaribu kugawa data ya aina tofauti kwake, utapata hitilafu, ambayo, ikiwa imesalia bila kurekebishwa, inaweza kusababisha programu kuanguka. Kwa mtazamo wa kwanza, hii inaweza kuonekana kuwa sababu nzuri ya kutotangaza vigezo, lakini kwa kweli, kuliko kabla ya kugeuka kuwa moja ya vigezo vilipokea data isiyo sahihi ambayo ilipaswa kupokea - bora zaidi! Vinginevyo, ikiwa programu inaendelea kukimbia, matokeo yanaweza kuwa sahihi na yasiyotarajiwa, na itakuwa vigumu zaidi kupata sababu ya makosa. Inawezekana pia kwamba jumla itatekelezwa "kwa mafanikio". Matokeo yake, kosa litaenda bila kutambuliwa na kazi itaendelea na data isiyo sahihi!

Katika suala hili, ni kuhitajika kuchunguza aina ya data isiyo sahihi na kurekebisha makosa hayo katika kanuni mapema iwezekanavyo. Kwa sababu hizi, inashauriwa kutangaza vigezo vyote wakati wa kuandika macro ya VBA.

Chaguo Wazi

Opereta Chaguo Wazi husababisha viambajengo vyote ambavyo vitatumika katika msimbo wa VBA kutangazwa, na huweka alama alama zote ambazo hazijatangazwa kama makosa wakati wa utungaji (kabla ya utekelezaji wa nambari kuanza). Kutuma opereta huyu sio ngumu - andika tu laini hii juu kabisa ya faili ya VBA:

Option Explicit

Ikiwa unataka kuingiza kila wakati Chaguo Wazi hadi juu ya kila moduli mpya ya VBA iliyoundwa, hii inaweza kufanywa kiotomatiki. Ili kufanya hivyo, unahitaji kuwezesha chaguo Inahitaji Azimio Linalobadilika katika mipangilio ya mhariri wa VBA.

Hii imefanywa kama hii:

  • Kutoka kwa menyu ya Mhariri wa Visual Basic, bofya zana > Chaguzi
  • Katika kidirisha kinachoonekana, fungua kichupo Mhariri
  • Angalia kisanduku Inahitaji Azimio Linalobadilika na vyombo vya habari OK

Inapowashwa, mfuatano Chaguo Wazi itaingizwa kiotomatiki mwanzoni mwa kila moduli mpya iliyoundwa.

Upeo wa Vigezo na Mara kwa mara

Kila kigeugeu kilichotangazwa au kisichobadilika kina upeo wake mdogo, yaani, sehemu ndogo ya programu ambayo kigeu hiki kipo. Upeo hutegemea mahali ambapo tamko la kutofautiana au mara kwa mara lilifanywa. Chukua, kwa mfano, kutofautiana sVAT_Kiwango, ambayo hutumiwa katika kazi Jumla_Gharama. Jedwali lifuatalo linajadili chaguzi mbili za upeo tofauti sVAT_Kiwangoimetangazwa katika nafasi mbili tofauti katika moduli:

Chaguo Fifisha Kiwango cha sVAT_Kama Kazi Moja Total_Cost() Kama Mbili ... Maliza Kazi
Ikiwa kutofautiana sVAT_Kiwango iliyotangazwa mwanzoni kabisa mwa moduli, basi wigo wa utaftaji huu utakuwa moduli nzima (yaani kutofautisha sVAT_Kiwango itatambuliwa na taratibu zote katika moduli hii).

Kwa hiyo, ikiwa katika kazi Jumla_Gharama variable sVAT_Kiwango itapewa thamani fulani, kisha kazi inayofuata kutekelezwa ndani ya moduli hiyo hiyo itatumia kutofautisha sVAT_Kiwango yenye maana sawa.

Walakini, ikiwa kazi fulani iko kwenye moduli nyingine inaitwa, basi kwa hiyo kutofautisha sVAT_Kiwango haitajulikana.

Chaguo la Utendakazi Wazi Total_Cost() Kama Kiwango cha Dim Double sVAT_Rate Kama Moja ... Maliza Kazi
Ikiwa kutofautiana sVAT_Kiwango iliyotangazwa mwanzoni mwa shughuli Jumla_Gharama, basi wigo wake utakuwa mdogo tu kwa kazi hii (yaani ndani ya chaguo la kukokotoa Jumla_Gharama, unaweza kutumia kutofautisha sVAT_Kiwango, lakini sio nje).

Wakati wa kujaribu kutumia sVAT_Kiwango katika utaratibu mwingine, mkusanyaji wa VBA ataripoti hitilafu kwa sababu utofauti huu haukutangazwa nje ya chaguo za kukokotoa Jumla_Gharama (mradi opereta anatumiwa Chaguo Wazi).

Katika mfano ulioonyeshwa hapo juu, kutofautisha kunatangazwa kwenye kiwango cha moduli na neno kuu Punguza. Hata hivyo, inaweza kuwa muhimu kwamba vigezo vilivyotangazwa vinaweza kutumika katika moduli nyingine. Katika hali kama hizi, kutangaza kutofautisha badala ya neno kuu Punguza neno muhimu lazima litumike Umma.

Kwa njia, ili kutangaza kutofautiana kwa kiwango cha moduli, badala ya neno kuu Punguza neno kuu linaweza kutumika Binafsi, ambayo inaonyesha kuwa utaftaji huu unakusudiwa kutumika tu katika moduli ya sasa.

Unaweza pia kutumia maneno muhimu kutangaza viunga. Umma и Binafsi, lakini sio badala ya neno kuu Const, pamoja nayo.

Mifano ifuatayo inaonyesha matumizi ya maneno muhimu Umma и Binafsi kutumika kwa vigezo na constants.

Chaguo Hadharani sVAT_Rate Kama Single Public Const iMax_Count = 5000 ...    
Katika mfano huu, neno kuu Umma kutumika kutangaza kutofautiana sVAT_Kiwango na mara kwa mara iMax_Count. Upeo wa vipengele vilivyotangazwa kwa njia hii utakuwa mradi mzima wa sasa.

Hii ina maana kwamba sVAT_Kiwango и iMax_Count itapatikana katika moduli yoyote ya mradi.

Chaguo Dhahiri sVAT_Rate ya Binafsi Kama Single Private Const iMax_Count = 5000 ...    
Katika mfano huu, kutangaza kutofautiana sVAT_Kiwango na mara kwa mara iMax_Count neno kuu lililotumika Binafsi. Upeo wa vipengele hivi ni moduli ya sasa.

Hii ina maana kwamba sVAT_Kiwango и iMax_Count itapatikana katika taratibu zote za moduli ya sasa, lakini haitapatikana kwa taratibu katika moduli nyingine.

Acha Reply