Ievads
Šajā rakstā paskaidrots, kā izmantot mainīgos Microsoft Excel microsoft Visual Basic for Applications apakšprocesos.
Papildinformācija
Mainīgie apakšprocesā
Jaudīgs programmēšanas valodu līdzeklis ir iespēja kaut ko glabāt mainīgajā, lai mainīgā saturu vēlāk procedūrā varētu izmantot vai mainīt. Šajā dokumentā aplūkota šāda mainīgo izmantošana programmā Visual Basic:
-
Kā tiek deklarēti mainīgie.
-
Procedūras un projekti, kas var izmantot mainīgo.
-
Mainīgā darbības laiks.
Mainīgā deklarēīšana makro
Vienkāršākais veids, kā makro izmantot mainīgo, ir izmantot priekšrakstu Dim. Nākamajā rindiņā divi mainīgie tiek paziņoti kā veseli skaitļi:
Dim x As Integer, y As Integer
Ja kā veseli skaitļi ir norādīti x un y, jums jāliek pietikt ar atmiņas atiešanu no vesela skaitļa mainīgā (2 baiti x un y) un ka informācija Visual Basic, kas tiek glabāta x vai y, ir vesels skaitlis no -32768 līdz 32767.
PIEZĪME. Ja, izmantojot vienu priekšrakstu Dim, deklarējiet vairākus mainīgos, katram mainīgajam ir jānorāda datu tips.
Ja nav norādīts katra mainīgā datu tips, kā šajā Visual Basic kodā, tikai mainīgais y tiek iestatīts kā vesels skaitlis. Mainīgais x būs varianta tips:
Dim x, y As Integer
Papildinformāciju skatiet tālāk sadaļā Datu tips Variant.
Lai veiktu mainīgu pārbaudi, veiciet tālāk norādītās darbības.
-
Saglabājiet un aizveriet visas atvērtās darbgrāmatas un pēc tam atveriet jaunu darbgrāmatu.
-
Startējiet lietojumprogrammu Visual Basic (nospiediet taustiņu kombināciju ALT+F11).
-
Izvēlnē Ievietošana noklikšķiniet uz Modulis.
-
Ierakstiet šādu kodu:
Sub Variable_Test()
Dim x Kā vesels skaitlis, y kā vesels skaitlis
x = 10
y = 100
MsgBox "vērtība x ir " & x & _
Chr(13) & "y vērtība ir " & y
End Sub -
Palaidiet Variable_Test makro. Tiek parādīts šāds ziņojums:
the value of x is 10
the value of y is 100 -
Noklikšķiniet uz Labi.
-
Makro rindā Variable_Test šādu rindiņu:
x = 10 -
uz:
x = "error" -
Palaidiet Variable_Test makro.
Tiks parādīta izpildes laika kļūda, jo "kļūda" nav vesels skaitlis un jūs mēģināt piešķirt šo virknes vērtību vesela skaitļa mainīgajam x.
Datu tipu kopsavilkums
Šādi ir bieži lietoti mainīgo datu tipi:
Variantu datu tips
Ja nenorādāt datu tipu, kad deklarēat mainīgo vai vispār nedeklarēt mainīgo, Visual Basic automātiski tiek norādīts šī mainīgā datu tips variant. Tālāk ir to mainīgo priekšrocības, kas tiek deklarēti kā šis datu tips:
-
Mainīgajos var būt virknes, datuma, laika, Būla vai skaitliskas vērtības.
-
Mainīgie var automātiski konvertēt tajos ietvertās vērtības.
Trūkumi ir tāds, ka varianta mainīgajiem nepieciešami vismaz 16 baiti atmiņas. Lielu procedūru vai sarežģītu moduļu gadījumā atmiņas 16 baiti var būt nozīmīgi.
Lai uzzinātu, kā tas darbojas Variable_Test makro, rīkojieties šādi:
Mainiet makro kodu uz Variable_Test:
Sub Variable_Test()
Dim x, y
x = "string"
y = 1.23
MsgBox "the value of x is " & x & _
Chr(13) & "the value of y is " & y
End Sub
Palaidiet Variable_Test makro.
Kļūda netiks parādīta, jo varianta mainīgajiem x un y var piešķirt neko.
PIEZĪME. Varat arī iziet no šīs rindiņas, un makro joprojām darbosies, jo mainīgie x un y tiek uzskatīti par Variant datu tipiem:
Dim x, y
Mainīgā tvērums
Ja deklarējot mainīgo, tas var būt vai nebūt redzams citiem makro tajā pašā modulī, citos moduļos vai citos projektos. Šī mainīgā pieejamība moduļos tiek dēvēta par tvērumu. Trīs tvēruma veidi ir procedūras līmenis, privātais moduļa līmenis un publiskais moduļa līmenis. Tvērums ir atkarīgs no tā, kā un kur tiek paziņots mainīgais vai mainīgie.
Procedūras līmeņa tvērums
Mainīgais ar procedūras līmeņa tvērumu netiek skatīts ārpus procedūras, kurā tas tiek deklarēts. Ja iestatāt vērtību mainīgajam, kam ir procedūras līmeņa tvērums, šī mainīgā saturu neredzēs citi makro.
Lai pārbaudītu, vai mainīgais ar procedūras līmeņa tvērumu nav redzams ārpus procedūras, kurā tas tiek deklarēts, veiciet šādas darbības:
-
Ievietojiet jaunu moduli projektā.
-
Šajā modulī ierakstiet abus šos makro:
Sub Macro1() Dim x As Integer x = 10 MsgBox "x, as seen by Macro1 is " & x 'the next line runs Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, as seen by Macro2 is " & x End Sub -
Palaidiet Makro1, un tiks parādīts šāds ziņojums:
x, as seen by Macro1 is 10 -
Noklikšķiniet uzLabi, un tiks parādīts šāds
ziņojums:x, as seen by Macro2 is -
Noklikšķiniet uz Labi.
Makro2 nerāda mainīgā x vērtību, jo mainīgais x ir lokālais makro1.
Privātā un publiskā moduļa līmeņa tvērums
Varat definēt mainīgos moduļa deklarāciju sadaļā (moduļa augšā, virs visām apakšprocesiem) un iestatīt mainīgā tvērumu, izmantojot publisko priekšrakstu, lēma priekšrakstu vai priekšrakstu Privāts. Ja pirms mainīgā ievietosiet priekšrakstu Publisks, mainīgais būs pieejams visiem makro visos projekta moduļos. Ja pirms mainīgā ievietosiet priekšrakstu Dim vai private, mainīgais ir pieejams tikai makro modulī, kurā tiek deklarēts.
Lai skatītu atšķirību starp priekšrakstu Public un Dim priekšrakstu, veiciet tālāk norādītās darbības.
-
Saglabājiet un aizveriet visas atvērtās darbgrāmatas un pēc tam atveriet jaunu darbgrāmatu.
-
Startējiet Visual Basic redaktoru.
-
Ievietojiet moduli projektā.
-
Type the following code into this module: Public x As Integer Sub Macro_1a() x = 10 MsgBox x Macro_1b End Sub Sub Macro_1b() x = x * 2 MsgBox x Macro2 End Sub
-
Ievietojiet projektā citu moduli.
-
Šajā modulī ierakstiet šādu kodu:
Sub Macro2() x = x * 3
MsgBox x
End Sub -
Izpildiet Macro_1a makro pirmajā modulī.
-
Ar mainīgo x, kas deklarēts kā "Publisks x kā vesels skaitlis", visiem trim makro projektā ir piekļuve vērtībai x. Pirmajā ziņojuma lodziņā tiek rādīta vērtība 10. Otrajā ziņojuma lodziņā tiek rādīta vērtība 20 (jo x tiek reizināts ar 2 Macro_1b). Trešajā ziņojuma lodziņā tiek parādīta vērtība 60 (jo x vērtība tiek mainīta uz 20 šajā Macro_1b un pēc tam makro2 ir reizināta ar 3).
-
Mainiet deklarēšanas rindu pirmajā modulī no:
Public x As Integer
uz:
Dim x As Integer -
Palaidiet Macro_1a makro.
-
Ja mainīgais x ir deklarēts kā "Dim x Kā vesels skaitlis", tikai pirmā moduļa makro var piekļūt vērtībai x. Līdz ar to pirmajā ziņojuma lodziņā redzama vērtība 10, otrajā ziņojuma lodziņā redzama 20 vērtība (jo x tiek reizināts ar 2 Macro_1b) un trešajā ziņojuma lodziņā redzama vērtība 0 (jo Macro2 neredz x vērtību un neinicializētu nulles vērtību izmanto Makro 2).
-
Mainiet deklarēšanas rindu pirmajā modulī no:
Dim x As Integer
uz:
Private x As Integer -
Palaidiet Macro_1a makro.
-
Tie paši ziņojumu lodziņi tiek rādīti, izmantojot privāto priekšraksta tvērumu, jo tie izmantoja rādīšanu lādma priekšrakstā. Mainīgajam x ir tāds pats tvērums: privāts līdz modulim, kurā tas tiek deklarēts.
PIEZĪME. Ja vēlaties, lai jūsu mainīgā tvērums būtu ierobežots līdz modulim, kurā tas tiek deklarēts, izmantojiet privatestatement nevis dim priekšrakstu. Tie abi sasniedz vienu un to pašu efektu, bet tvērums ir skaidrāks, kad lasāt kodu, ja izmantojat privāto paziņojumu.
Mainīgā darbības laiks
Laiks, kad mainīgais saglabā vērtību, tiek dēvēts par tā darbības laiku. Mainīgā vērtība var mainīties tā darbības laikā, taču saglabās vērtību. Turklāt, ja mainīgais zaudē tvērumu, tam vairs nav vērtības.
Mainīgā vērtības inicializēšana
Izpildot makro, visi mainīgie tiek inicializēti uz vērtību. Skaitlisks mainīgais tiek inicializēts uz nulli, mainīgā garuma virkne tiek inicializēta uz nulles garuma virkni (""), un fiksēta garuma virkne tiek aizpildīta ar ASCII kodu 0. Varianta mainīgie tiek inicializēti uz Tukšs. Tukšs mainīgais skaitliskā kontekstā tiek attēlots ar nulli un nulles garuma virkni ("") virknes kontekstā.
Procedūras līmeņa mainīgie
Ja makro ir deklarēts mainīgais, izmantojot priekšrakstu Dim, mainīgais saglabā vērtību, kamēr makro darbojas. Ja šis makro izsauc citus makro, mainīgā vērtība tiek saglabāta (tomēr nav pieejama citiem makro), kamēr tiek palaisti arī šie citi makro.
Lai demonstrētu, kā darbojas procedūras līmeņa mainīgie, veiciet tālāk norādītās darbības.
-
Ievietojiet jaunu moduli projektā.
-
Šajā modulī ierakstiet abus šos makro:
Sub Macro1()
'set x as a procedure level variable
Dim x kā vesels skaitlis
MsgBox "inicializētā x vērtība ir " & x
x = 10
MsgBox "x ir " & x
'nākamā rindiņa izpilda Makro2
Makro2
MsgBox "x joprojām " & x
End Sub
Sub Macro2()
MsgBox "x, kā redzams Makro2 ir " & x
End Sub -
Palaidiet Makro1.
-
Tiek parādīts šāds ziņojums:
the initialized value of x is 0 -
Noklikšķiniet uzLabi un tiks parādīts ziņojums:
x is 10 -
Noklikšķiniet uzLabi , un tiks parādīts šāds
ziņojums:x, as seen by Macro2 is -
Noklikšķiniet uz Labi.
-
Makro2 nerāda mainīgā x vērtību, jo mainīgais x ir lokālais makro1. Tiek parādīts šāds ziņojums:
x is still 10 -
Noklikšķiniet uz Labi.
-
Palaidiet Makro1.
Jūs saņemat tos pašus ziņojumus, kas aprakstīti 3.–6. darbībā, jo, tiklīdz Macro1 pārtrauca darboties 6. darbībā, mainīgā x vērtība ir zaudēta. Tāpēc, vēlreiz izpildot Macro1 7. darbībā, pirmajā ziņojumā tiek rādīta vērtība x kā nulle (inicializētā vērtība).
Statisks atslēgvārds
Ja procedūras līmeņa mainīgais tiek deklarēts, izmantojot atslēgvārdu Statisks, mainīgais saglabā vērtību, līdz tiek atiestatīts jūsu projekts. Tāpēc, ja jums ir statisks mainīgais, nākamajā procedūras izsaukšanas reizē statiskais mainīgais tiek inicializēts līdz pēdējai vērtībai.
Lai uzzinātu, kā darbojas statiskais atslēgvārds, veiciet tālāk norādītās darbības.
-
Change the code in Macro1 to: Sub Macro1() 'set x as a procedure level variable Static x As Integer MsgBox "the initialized value of x is " & x x = x + 10 MsgBox "x is " & x End Sub
-
Palaidiet Makro1.
-
Jūs saņemsit šādu
ziņojumu:the initialized value of x is 0 -
Noklikšķiniet uzLabi un tiks parādīts šāds
ziņojums:x is 10 -
Noklikšķiniet uz Labi.
-
Palaidiet Makro1, un tiek parādīts šāds ziņojums:
the initialized value of x is 10 -
Noklikšķiniet uzLabi, un tiks parādīts šāds
ziņojums:x is 20 -
Noklikšķiniet uz Labi.
Ziņojumos parādītās vērtības atšķiras otrreiz, jo mainīgais x tiek deklarēts kā statisks mainīgais, un mainīgais saglabā vērtību pēc tam, kad pirmoreiz palaižat Macro1.
PIEZĪME. Ja jums ir moduļa līmeņa mainīgais, tā darbības ilgums ir tāds pats kā tad, ja tas būtu statiska procedūras līmeņa mainīgais.
Lai pārbaudītu moduļa līmeņa mainīgā darbības laiku, rīkojieties šādi:
-
Change the code in the module that contains Macro1 to the following: Dim x As Integer 'create a module-level variable Sub Macro1() MsgBox "the initialized value of x is " & x x = x + 10 MsgBox "x is " & x End Sub
-
Palaidiet Makro1, un tiks parādīts šāds ziņojums:
the initialized value of x is 0 -
Noklikšķiniet uz Labi, un tiks parādīts šāds
ziņojums:x is 10 -
Noklikšķiniet uz Labi
-
Palaidiet Makro1, un tiks parādīts šāds ziņojums:
the initialized value of x is 10 -
Noklikšķiniet uz Labi.
-
Tiek parādīts šāds ziņojums:
x is 20 -
Noklikšķiniet uz Labi.
Ziņojumos parādītās vērtības atšķiras otrreiz, jo mainīgais x tiek deklarēts kā statisks mainīgais un saglabā vērtību pēc tam, kad pirmoreiz palaižat Makro1.
Projekta atiestatīšana, lai atiestatītu mainīgos
Ja vēlaties atiestatīt statiska mainīgā vai moduļa līmeņa mainīgā vērtību, noklikšķiniet uz pogas Atiestatīt
Standarta rīkjosla vai izvēlnē Palaist noklikšķiniet uz Atiestatīt.
Ja makro1 projektam to darāt un pēc tam vēlreiz izpildāt Makro1,mainīgā x vērtība tiek inicializācijai atjaunota uz nulli, un tiek parādīts pirmais ziņojums:
the initialized value of x is 0