Varyab ak konstan nan VBA

Nan VBA, tankou nan nenpòt lòt langaj pwogramasyon, varyab ak konstan yo itilize pou estoke nenpòt valè. Kòm non an implique, varyab yo ka chanje, pandan y ap konstan magazen valè fiks yo.

Pou egzanp, yon konstan Pi magazen valè 3,14159265... Nimewo "Pi" a pa pral chanje pandan ekzekisyon pwogram nan, men li toujou pi pratik pou estoke yon valè tankou yon konstan.

An menm tan an, nou ka itilize varyab la sVAT_Rate pou estoke to VAT sou machandiz achte yo. Valè varyab sVAT_Rate ka varye selon pwodwi a achte.

Kalite Done

Tout varyab ak konstan yo se yon kalite done patikilye. Tablo ki anba a bay lis kalite done yo itilize nan VBA ak yon deskripsyon ak yon seri valè posib:

Kalite done Kantite moun kiDeskripsyonRanje valè
Byte1 bytesNonb antye relatif pozitif; souvan itilize pou done binèsoti nan 0 255
Booleyen2 bytesKapab swa vre oswa foVrè ou fo
Nonb antye relatif2 bytesNimewo antye (pa gen okenn pati fraksyon)soti nan -32 a +768
Long4 bytesGwo nonm antye (pa gen okenn pati fraksyon)от -2 147 483 648 до +2 147 483 647
sèl4 bytesSingle presizyon nimewo k ap flote pwensoti nan -3.4e38 rive nan +3.4e38
Double8 bytesDoub presizyon nimewo k ap flote pwensoti nan -1.8e308 rive nan +1.8e308
Lajan8 bytesNimewo k ap flote pwen, ak yon kantite fiks kote desimalот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Dat8 bytesDat ak lè – Done ki kalite Dat reprezante pa yon nimewo k ap flote. Pati nonb antye relatif nan nimewo sa a eksprime dat la, ak pati nan fraksyon eksprime tan an.soti 1ye janvye 100 rive 31 desanm 9999
objè4 bytesReferans objèNenpòt referans objè
Kòdap chanjeseri karaktè. Kalite fisèl la ka nan longè fiks oswa varyab. Pi souvan itilize ak longè varyabLongè fiks - jiska apeprè 65 karaktè. Longè varyab - jiska apeprè 500 milya karaktè
Variantap chanjeKa genyen yon dat, yon flote, oswa yon kòd karaktè. Yo itilize kalite sa a nan ka kote yo pa konnen davans ki kalite done yo pral antre.Nimewo – Double, fisèl – Fisèl

Li evidan, lè l sèvi avèk tablo ki anwo a epi chwazi bon kalite done, ou ka itilize memwa plis ekonomikman (pa egzanp, chwazi kalite done a. Nonb antye relatif olye pou Long or sèl olye pou Double). Sepandan, lè w ap itilize plis kalite done kontra enfòmèl ant, ou bezwen fè atansyon pou kòd ou a pa eseye anfòm valè disproporsyonèlman gwo nan yo.

Deklarasyon varyab ak konstan

Nòt tradiktè a: Pale sou varyab nan VBA, li vo mansyone yon lòt pwen trè enpòtan. Si nou deklare yon varyab men nou pa bay okenn valè, Lè sa a, li inisyalize ak yon valè default:

• fisèl tèks yo inisyalize ak fisèl vid;

• nimewo - valè 0;

• kalite varyab Booleyen - Fo;

• dat – 30 desanm 1899.

Anvan yo ka itilize yon varyab oswa konstan, li dwe deklare. Pou fè sa, ajoute liy kòd senp sa a nan makro a:

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

Nan liy ki anwo a nan kòd Non_Varyab se non varyab ki pral itilize nan kòd la, epi Done_Type se youn nan kalite done ki soti nan tablo yo bay yon ti kras pi bonè nan atik sa a. Pa egzanp:

Dim sVAT_Rate As Single Dim i As Integer

Konstan yo deklare menm jan an, men lè yo deklare konstan, yo dwe endike valè yo imedyatman. Pou egzanp, tankou sa a:

Const iMaxCount = 5000 Const iMaxScore = 100

Li pa nesesè pou deklare varyab nan Excel. Pa default, tout varyab ki te antre men yo pa deklare nan Excel pral gen kalite a Variant epi yo pral kapab aksepte tou de valè nimerik ak tèks.

Kidonk, pwogramè a ka sèvi ak nouvo varyab la nenpòt ki lè (menm si li pa te deklare), epi Excel pral trete li kòm yon kalite varyab. Variant. Sepandan, gen plizyè rezon ki fè sa pa ta dwe fè:

  1. Itilizasyon memwa ak vitès enfòmatik. Si ou pa deklare yon varyab ak yon endikasyon de kalite done a, lè sa a pa default li pral mete sou kalite a. Variant. Kalite done sa a itilize plis memwa pase lòt kalite done. Yon kèk byte siplemantè pou chak varyab pa ka son tankou anpil, men nan pratik, pwogram yo ka gen dè milye de varyab (sitou lè w ap travay ak etalaj). Se poutèt sa, memwa siplemantè a itilize pa varyab tankou Variant, konpare ak varyab nan kalite Nonb antye relatif or sèl, ka ajoute jiska yon kantite siyifikatif. Anplis de sa, operasyon ak varyab nan kalite Variant yo egzekite pi dousman pase ak varyab nan lòt kalite, respektivman, yon siplemantè mil varyab nan kalite Variant ka siyifikativman ralanti kalkil yo.
  2. Prevansyon nan typo nan non varyab. Si tout varyab yo deklare, Lè sa a, deklarasyon VBA a ka itilize - Opsyon Eksplis (nou pral pale sou sa pita) pou yo ka idantifye tout varyab ki pa deklare. Sa a elimine aparans nan yon erè nan pwogram nan kòm yon rezilta nan yon non varyab ekri mal. Pou egzanp, lè l sèvi avèk yon varyab yo te rele sVAT_Rate, ou ka fè yon typo epi, bay yon valè nan varyab sa a, ekri: "VATRate = 0,175". Li espere ke depi koulye a, varyab la sVAT_Rate ta dwe gen valè a 0,175 - men nan kou li pa fè sa. Si mòd deklarasyon obligatwa tout varyab yo itilize yo aktive, lè sa a, du VBA a pral imedyatman endike yon erè, paske li pa pral jwenn varyab la. VATRate pami sa yo te anonse.
  3. Mete aksan sou valè ki pa matche ak kalite yon varyab deklare. Si ou deklare yon varyab nan yon sèten kalite epi eseye bay done nan yon kalite diferan nan li, ou pral jwenn yon erè, ki, si yo pa korije, ka lakòz pwogram nan aksidan. Nan premye gade, sa a ka sanble tankou yon bon rezon pa deklare varyab, men an reyalite, pase anvan li vire soti ke youn nan varyab yo te resevwa done yo mal ke li te sipoze resevwa - tèlman pi bon an! Sinon, si pwogram nan kontinye ap kouri, rezilta yo ka kòrèk ak inatandi, epi li pral pi difisil pou jwenn kòz erè yo. Li posib tou ke macro a pral "siksè" egzekite. Kòm yon rezilta, erè a pral pase inapèsi epi travay ap kontinye ak done ki pa kòrèk!

Nan sans sa a, li se dezirab detekte yon kalite done kòrèk epi korije erè sa yo nan kòd la pi bonè posib. Pou rezon sa yo, li rekòmande ke ou deklare tout varyab lè w ap ekri yon macro VBA.

Opsyon Eksplis

Operatè Opsyon Eksplis lakòz tout varyab ke yo pral itilize nan kòd VBA yo dwe deklare, ak drapo tout varyab ki pa deklare kòm erè pandan konpilasyon (anvan ekzekisyon kòd kòmanse). Aplike operatè sa a pa difisil - jis ekri liy sa a nan tèt la nan dosye VBA a:

Option Explicit

Si ou vle toujou insert Opsyon Eksplis nan tèt chak nouvo modil VBA kreye, sa ka fè otomatikman. Pou fè sa, ou bezwen aktive opsyon an Mande pou Deklarasyon Varyab nan paramèt editè VBA yo.

Sa fèt konsa:

  • Soti nan meni Visual Basic Editè a, klike sou zouti > Opsyon
  • Nan dyalòg ki parèt, louvri tab la Editè
  • Tcheke ti bwat la Mande pou Deklarasyon Varyab ak laprès OK

Lè pèmèt, fisèl la Opsyon Eksplis pral otomatikman antre nan kòmansman chak nouvo modil ki te kreye.

Dimansyon varyab ak konstan

Chak varyab oswa konstan deklare gen pwòp limit limite li yo, se sa ki, yon pati limite nan pwogram nan kote varyab sa a egziste. Dimansyon an depann de kote yo te fè deklarasyon varyab la oswa konstan an. Pran, pou egzanp, varyab la sVAT_Rate, ki itilize nan fonksyon an Pri_Total. Tablo ki anba la a diskite de opsyon pou delimitasyon varyab sVAT_Ratete deklare nan de pozisyon diferan nan modil la:

Opsyon Eksplis Dim sVAT_Rate Kòm Fonksyon Single Total_Cost () Kòm Double ... Fonksyon Fen
Si varyab la sVAT_Rate te deklare nan kòmansman an anpil nan modil la, Lè sa a, sijè ki abòde lan varyab sa a pral modil la tout antye (sa vle di varyab la sVAT_Rate pral rekonèt pa tout pwosedi nan modil sa a).

Se poutèt sa, si nan fonksyon an Pri_Total varyab sVAT_Rate yo pral bay kèk valè, Lè sa a, pwochen fonksyon an egzekite nan menm modil la pral sèvi ak varyab la sVAT_Rate ak menm siyifikasyon an.

Sepandan, si gen kèk fonksyon ki sitiye nan yon lòt modil rele, Lè sa a, pou li varyab la sVAT_Rate pa pral konnen.

Opsyon Eksplis Fonksyon Total_Cost() Kòm Double Dim sVAT_Rate Kòm Single ... Fen Fonksyon
Si varyab la sVAT_Rate te deklare nan kòmansman fonksyon an Pri_Total, Lè sa a, dimansyon li yo pral limite sèlman nan fonksyon sa a (sa vle di nan fonksyon an Pri_Total, ou ka itilize varyab la sVAT_Rate, men pa deyò).

Lè w ap eseye itilize sVAT_Rate nan yon lòt pwosedi, du VBA a pral rapòte yon erè paske varyab sa a pa te deklare andeyò fonksyon an Pri_Total (si yo itilize operatè a Opsyon Eksplis).

Nan egzanp ki montre pi wo a, varyab la deklare nan nivo modil la ak mo kle a Dim. Sepandan, li ka nesesè pou yo te deklare varyab yo ka itilize nan lòt modil. Nan ka sa yo, yo deklare yon varyab olye de yon mo kle Dim mo kle dwe itilize Piblik.

By wout la, yo nan lòd yo deklare yon varyab nan nivo modil la, olye pou yo mo kle a Dim mo kle ka itilize Prive, ki endike ke varyab sa a fèt pou itilize sèlman nan modil aktyèl la.

Ou kapab tou itilize mo kle pou deklare konstan. Piblik и Prive, men se pa olye de mo kle a Konst, ansanm ak li.

Egzanp sa yo montre itilizasyon mo kle yo Piblik и Prive aplike nan varyab ak konstan.

Opsyon Eksplis Piblik sVAT_Rate Kòm Single Public Const iMax_Count = 5000 ...    
Nan egzanp sa a, mo kle a Piblik itilize pou deklare yon varyab sVAT_Rate ak konstan iMax_Count. Dimansyon eleman yo te deklare nan fason sa a pral tout pwojè aktyèl la.

Sa vle di ke sVAT_Rate и iMax_Count ap disponib nan nenpòt modil pwojè.

Opsyon Prive eksplisit sVAT_Rate Kòm Single Private Const iMax_Count = 5000 ...    
Nan egzanp sa a, pou deklare yon varyab sVAT_Rate ak konstan iMax_Count mo kle yo itilize Prive. Dimansyon eleman sa yo se modil aktyèl la.

Sa vle di ke sVAT_Rate и iMax_Count yo pral disponib nan tout pwosedi nan modil aktyèl la, men yo pa pral disponib nan pwosedi nan lòt modil.

Kite yon Reply