Newidynnau a chysonion yn VBA

Yn VBA, fel mewn unrhyw iaith raglennu arall, defnyddir newidynnau a chysonion i storio unrhyw werthoedd. Fel y mae'r enw'n awgrymu, gall newidynnau newid, tra bod cysonion yn storio gwerthoedd sefydlog.

Er enghraifft, cysonyn Pi yn storio'r gwerth 3,14159265… Ni fydd y rhif “Pi” yn newid yn ystod gweithrediad y rhaglen, ond mae'n dal yn fwy cyfleus storio gwerth o'r fath fel cysonyn.

Ar yr un pryd, gallwn ddefnyddio'r newidyn sVAT_Cyfradd i storio'r gyfradd TAW ar nwyddau a brynwyd. Gwerth amrywiol sVAT_Cyfradd Gall amrywio yn dibynnu ar y cynnyrch a brynwyd.

Mathau Data

Mae'r holl newidynnau a chysonion o fath penodol o ddata. Mae'r tabl isod yn rhestru'r mathau o ddata a ddefnyddir yn VBA gyda disgrifiad ac ystod o werthoedd posibl:

Math o ddata MaintDisgrifiadYstod o werthoedd
ByteBytes 1Cyfanrifau cadarnhaol; a ddefnyddir yn aml ar gyfer data deuaiddo 0 255 i
BooleBytes 2Gall fod naill ai'n Gwir neu'n AnwirCywir neu anghywir
CyfanrifBytes 2Rhifau cyfan (dim rhan ffracsiynol)o -32 i +768
HirBytes 4Cyfanrifau mawr (dim rhan ffracsiynol)от -2 147 483 648 до +2 147 483 647
senglBytes 4Rhif pwynt arnawf manwl gywir senglo -3.4e38 i +3.4e38
dwblBytes 8Rhif pwynt arnawf manwl gywir dwblo -1.8e308 i +1.8e308
Arian cyfredBytes 8Rhif pwynt arnawf, gyda nifer sefydlog o leoedd degolот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
dyddiadBytes 8Dyddiad ac amser – Data math Cynrychiolir dyddiad gan rif pwynt arnawf. Mae rhan gyfanrif y rhif hwn yn mynegi'r dyddiad, ac mae'r rhan ffracsiynol yn mynegi'r amser.rhwng Ionawr 1, 100 a Rhagfyr 31, 9999
GwrthrychBytes 4Cyfeirnod gwrthrychUnrhyw gyfeirnod gwrthrych
Llinynnauyn newidSet nodau. Gall y math Llinyn fod o hyd sefydlog neu amrywiol. Defnyddir yn fwy cyffredin gyda hyd amrywiolHyd sefydlog - hyd at tua 65 nod. Hyd amrywiol - hyd at tua 500 biliwn o nodau
Variantyn newidGall gynnwys dyddiad, fflôt, neu linyn nod. Defnyddir y math hwn mewn achosion lle nad yw'n hysbys ymlaen llaw pa fath o ddata fydd yn cael ei fewnbynnu.Rhif – Dwbl, llinyn – Llinyn

Yn amlwg, gan ddefnyddio'r tabl uchod a dewis y math cywir o ddata, gallwch ddefnyddio cof yn fwy darbodus (er enghraifft, dewiswch y math o ddata Cyfanrif yn lle hynny Hir or sengl yn lle hynny dwbl). Fodd bynnag, wrth ddefnyddio mathau mwy cryno o ddata, mae angen i chi fod yn ofalus nad yw'ch cod yn ceisio ffitio gwerthoedd anghymesur o fawr ynddynt.

Datgan Newidynnau a Cysonion

Nodyn y Cyfieithydd: Wrth siarad am newidynnau yn VBA, mae'n werth sôn am un pwynt pwysig iawn arall. Os byddwn yn datgan newidyn ond nad ydym yn aseinio unrhyw werth iddo, yna caiff ei gychwyn â gwerth rhagosodedig:

• mae llinynnau testun yn cael eu cychwyn gyda llinynnau gwag;

• rhifau — gwerth 0;

• newidynnau math Boole — Anwir;

• dyddiadau – Rhagfyr 30, 1899.

Cyn y gellir defnyddio newidyn neu gysonyn, rhaid ei ddatgan. I wneud hyn, ychwanegwch y llinell god syml ganlynol at y macro:

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

Yn y llinell god uchod Enw_newidiol yw enw'r newidyn a ddefnyddir yn y cod, a Data_Math yw un o'r mathau o ddata o'r tabl a roddwyd ychydig yn gynharach yn yr erthygl hon. Er enghraifft:

Dim sVAT_Rate Fel Sengl Dim i Fel Cyfanrif

Mae cysonion yn cael eu datgan yn yr un modd, ond wrth ddatgan cysonion, rhaid nodi eu gwerth ar unwaith. Er enghraifft, fel hyn:

Cons iMaxCount = 5000 Const iMaxScore = 100

Nid oes angen datgan newidynnau yn Excel. Yn ddiofyn, bydd gan bob newidyn a gofnodwyd ond heb ei ddatgan yn Excel y math Variant a bydd yn gallu derbyn gwerth rhifol a thestun.

Felly, gall y rhaglennydd ddefnyddio'r newidyn newydd ar unrhyw adeg (hyd yn oed os nad yw wedi'i ddatgan), a bydd Excel yn ei drin fel newidyn o fath Variant. Fodd bynnag, mae sawl rheswm pam na ddylid gwneud hyn:

  1. Defnydd cof a chyflymder cyfrifiannol. Os na fyddwch yn datgan newidyn gydag arwydd o'r math o ddata, yna yn ddiofyn bydd yn cael ei osod i'r math Variant. Mae'r math hwn o ddata yn defnyddio mwy o gof na mathau eraill o ddata. Efallai na fydd ychydig o beit ychwanegol fesul newidyn yn swnio fel llawer, ond yn ymarferol, gall fod gan raglenni filoedd o newidynnau (yn enwedig wrth weithio gydag araeau). Felly, mae'r cof ychwanegol a ddefnyddir gan newidynnau fel Variant, o'i gymharu â newidynnau o fath Cyfanrif or sengl, yn gallu adio i swm sylweddol. Yn ogystal, gweithrediadau gyda newidynnau o'r math Variant yn cael eu gweithredu yn llawer arafach na gyda newidynnau o fathau eraill, yn y drefn honno, mil ychwanegol o newidynnau o fath Variant yn gallu arafu cyfrifiadau yn sylweddol.
  2. Atal teipio mewn enwau amrywiol. Os datgenir yr holl newidynnau, yna gellir defnyddio'r datganiad VBA − Opsiwn Eglur (byddwn yn siarad amdano yn nes ymlaen) er mwyn nodi'r holl newidynnau heb eu datgan. Mae hyn yn dileu ymddangosiad gwall yn y rhaglen o ganlyniad i enw newidyn a ysgrifennwyd yn anghywir. Er enghraifft, defnyddio newidyn a enwir sVAT_Cyfradd, gallwch wneud teipio a, chan aseinio gwerth i'r newidyn hwn, ysgrifennu: “VATRate = 0,175”. Disgwylir y bydd y newidyn o hyn ymlaen sVAT_Cyfradd dylai gynnwys y gwerth 0,175 – ond wrth gwrs nid yw. Os yw'r modd datgan gorfodol o'r holl newidynnau a ddefnyddiwyd wedi'i alluogi, yna bydd y casglwr VBA yn nodi gwall ar unwaith, gan na fydd yn dod o hyd i'r newidyn Cyfradd TAW ymhlith y rhai a gyhoeddwyd.
  3. Amlygu gwerthoedd nad ydynt yn cyfateb i'r math datganedig o newidyn. Os byddwch yn datgan newidyn o fath penodol ac yn ceisio aseinio data o fath gwahanol iddo, fe gewch wall, a all, os na chaiff ei gywiro, achosi i'r rhaglen chwalu. Ar yr olwg gyntaf, gall hyn ymddangos fel rheswm da i beidio â datgan newidynnau, ond mewn gwirionedd, nag o'r blaen mae'n ymddangos bod un o'r newidynnau wedi derbyn y data anghywir yr oedd i fod i'w dderbyn - cymaint gorau oll! Fel arall, os bydd y rhaglen yn parhau i redeg, gall y canlyniadau fod yn anghywir ac yn annisgwyl, a bydd yn llawer anoddach dod o hyd i achos y gwallau. Mae hefyd yn bosibl y bydd y macro yn cael ei weithredu'n “llwyddiannus”. O ganlyniad, ni fydd y gwall yn cael ei sylwi a bydd gwaith yn parhau gyda data anghywir!

Yn hyn o beth, mae'n ddymunol canfod math o ddata anghywir a chywiro gwallau o'r fath yn y cod cyn gynted â phosibl. Am y rhesymau hyn, argymhellir eich bod yn datgan pob newidyn wrth ysgrifennu macro VBA.

Opsiwn Eglur

Gweithredwr Opsiwn Eglur yn achosi i'r holl newidynnau a ddefnyddir yn y cod VBA gael eu datgan, ac yn fflagio'r holl newidynnau sydd heb eu datgan fel gwallau wrth eu llunio (cyn i'r cod ddechrau). Nid yw'n anodd cymhwyso'r gweithredwr hwn - ysgrifennwch y llinell hon ar frig y ffeil VBA:

Option Explicit

Os ydych chi eisiau mewnosod bob amser Opsiwn Eglur i frig pob modiwl VBA newydd a grëwyd, gellir gwneud hyn yn awtomatig. I wneud hyn, mae angen i chi alluogi'r opsiwn Angen Datganiad Amrywiol yn y gosodiadau golygydd VBA.

Gwneir hyn fel hyn:

  • O ddewislen Golygydd Sylfaenol Gweledol, cliciwch offer > Dewisiadau
  • Yn yr ymgom sy'n ymddangos, agorwch y tab Golygydd
  • Gwiriwch y blwch Angen Datganiad Amrywiol ac yn y wasg OK

Pan gaiff ei alluogi, y llinyn Opsiwn Eglur yn cael ei fewnosod yn awtomatig ar ddechrau pob modiwl newydd a grëir.

Cwmpas y Newidynnau a'r Cysonion

Mae gan bob newidyn neu gysonyn datganedig ei gwmpas cyfyngedig ei hun, hynny yw, rhan gyfyngedig o'r rhaglen y mae'r newidyn hwn yn bodoli ynddi. Mae'r cwmpas yn dibynnu ar ble y datganwyd y newidyn neu'r cysonyn. Cymerwch, er enghraifft, y newidyn sVAT_Cyfradd, a ddefnyddir yn y swyddogaeth Cyfanswm_Cost. Mae'r tabl canlynol yn trafod dau opsiwn ar gyfer cwmpasu newidiol sVAT_Cyfradddatgan mewn dwy swydd wahanol yn y modiwl:

Opsiwn Penodol Dim sVAT_Cyfradd Fel Swyddogaeth Sengl Cyfanswm_Cost() Fel Dwbl ... Swyddogaeth Diwedd
Os yw'r newidyn sVAT_Cyfradd datgan ar ddechrau'r modiwl, yna cwmpas y newidyn hwn fydd y modiwl cyfan (hy y newidyn sVAT_Cyfradd yn cael ei gydnabod gan yr holl weithdrefnau yn y modiwl hwn).

Felly, os yn y swyddogaeth Cyfanswm_Cost amrywiol sVAT_Cyfradd yn cael rhywfaint o werth, yna bydd y swyddogaeth nesaf a weithredir o fewn yr un modiwl yn defnyddio'r newidyn sVAT_Cyfradd gyda'r un ystyr.

Fodd bynnag, os gelwir rhyw swyddogaeth sydd wedi'i lleoli mewn modiwl arall, yna'r newidyn ar ei gyfer sVAT_Cyfradd ni bydd yn hysbys.

Opsiwn Swyddogaeth Benodol Cyfanswm_Cost() Fel Dim Dwbl sVAT_Rate As Single ... End Function
Os yw'r newidyn sVAT_Cyfradd datgan ar ddechrau'r swyddogaeth Cyfanswm_Cost, yna bydd ei gwmpas yn gyfyngedig i'r swyddogaeth hon yn unig (hy o fewn y swyddogaeth Cyfanswm_Cost, gallwch ddefnyddio'r newidyn sVAT_Cyfradd, ond nid y tu allan).

Wrth geisio defnyddio sVAT_Cyfradd mewn gweithdrefn arall, bydd y casglwr VBA yn adrodd am wall oherwydd na chafodd y newidyn hwn ei ddatgan y tu allan i'r swyddogaeth Cyfanswm_Cost (ar yr amod bod y gweithredwr yn cael ei ddefnyddio Opsiwn Eglur).

Yn yr enghraifft a ddangosir uchod, mae'r newidyn yn cael ei ddatgan ar lefel y modiwl gyda'r allweddair Dim. Fodd bynnag, efallai y bydd angen defnyddio newidynnau datganedig mewn modiwlau eraill. Mewn achosion o'r fath, i ddatgan newidyn yn lle allweddair Dim rhaid defnyddio allweddair Cyhoeddus.

Gyda llaw, er mwyn datgan newidyn ar lefel modiwl, yn lle'r allweddair Dim gellir defnyddio allweddair Preifat, sy'n nodi bod y newidyn hwn wedi'i fwriadu i'w ddefnyddio yn y modiwl cyfredol yn unig.

Gallwch hefyd ddefnyddio geiriau allweddol i ddatgan cysonion. Cyhoeddus и Preifat, ond nid yn lle'r allweddair Const, ynghyd ag ef.

Mae'r enghreifftiau canlynol yn dangos y defnydd o eiriau allweddol Cyhoeddus и Preifat cymhwyso i newidynnau a chysonion.

Opsiwn sVAT_Cyfradd Cyhoeddus Penodol Fel Const Cyhoeddus Sengl iMax_Count = 5000 ...    
Yn yr enghraifft hon, yr allweddair Cyhoeddus a ddefnyddir i ddatgan newidyn sVAT_Cyfradd a chysonion iMax_Cyfrif. Cwmpas yr elfennau a ddatgenir fel hyn fydd y prosiect cyfredol cyfan.

Mae hyn yn golygu bod sVAT_Cyfradd и iMax_Cyfrif ar gael mewn unrhyw fodiwl prosiect.

Opsiwn Preifat Penodol sVAT_Rate Fel Const Preifat Sengl iMax_Count = 5000 ...    
Yn yr enghraifft hon, i ddatgan newidyn sVAT_Cyfradd a chysonion iMax_Cyfrif allweddair a ddefnyddir Preifat. Cwmpas yr elfennau hyn yw'r modiwl cyfredol.

Mae hyn yn golygu bod sVAT_Cyfradd и iMax_Cyfrif ar gael ym mhob un o weithdrefnau'r modiwl cyfredol, ond ni fydd ar gael i weithdrefnau mewn modiwlau eraill.

Gadael ymateb