Način korištenja varijabli u potprocedurama programa Excel u jeziku Visual Basic for Applications

Uvod

U ovom se članku opisuje kako koristiti varijable u podprocedurama programa Microsoft Excel u jeziku Microsoft Visual Basic for Applications.

Dodatne informacije

Variables in a sub procedure

Moćna značajka programskih jezika je mogućnost pohranjivanja nečega u varijablu tako da se sadržaj varijable može koristiti ili promijeniti kasnije u postupku. U ovom se dokumentu objašnjava sljedeća upotreba varijabli u jeziku Visual Basic:

  • Kako se deklariraju varijable.
  • Postupci i projekti koji koriste varijablu.
  • Vijek trajanja varijable.

Deklariranje varijable u makronaredbi

Najjednostavniji način deklariranja varijable u makronaredbi jest naredba Dim. Sljedeći redak deklarira dvije varijable kao cijele brojeve:

    Dim x As Integer, y As Integer

Ako su znakovi x i y navedeni kao cijeli brojevi, programu Visual Basic naređujete da odvoji dovoljno memorije za cjelobrojnu varijablu (po dva bajta za x i y) te da su informacije pohranjene u obliku x ili y cijeli brojevi između -32768 i 32767.

NAPOMENA: Ako deklarirate više varijabli pomoću jedne Dim naredbe, morate navesti vrstu podataka za svaku varijablu.

Ako ne navedete vrstu podataka za svaku varijablu, kao u sljedećem kodu jezika Visual Basic, samo je varijabla y postavljena kao cjelobrojna varijabla. Varijabla x bit će vrste varijante:

    Dim x, y As Integer

Dodatne informacije potražite u vrsti podataka Variant u nastavku.
 

Da biste testirali varijable, slijedite ove korake:

  1. Spremite i zatvorite sve otvorene radne knjige, a zatim otvorite novu radnu knjigu.

  2. Pokretanje modula Visual Basic Editor (pritisnite ALT+F11).

  3. Na izborniku Umetanje kliknite Moduli.

  4. Upišite sljedeći kod:

    Sub Variable_Test()
        Dim x Kao cijeli broj, y kao cijeli broj
        x = 10
        y = 100
        MsgBox "vrijednost x je " & x & _
        Chr(13) & "vrijednost y je " & y
    End Sub

  5. Pokrenite makronaredbu Variable_Test . Prikazat će vam se sljedeća poruka:

    the value of x is 10
    the value of y is 100

  6. Kliknite U redu.

  7. U makronaredbi Variable_Test promijenite sljedeći redak:

    x = 10

  8. Primatelji:

    x = "error"

  9. Pokrenite makronaredbu Variable_Test .

Prikazat će vam se pogreška pri izvođenju jer "pogreška" nije cijeli broj, a pokušavate dodijeliti ovu vrijednost niza cjelobrojnoj varijabli x.
 

Sažetak vrste podataka

Ovo su uobičajene vrste podataka varijabli:

Vrste podataka uobičajene varijable

vrsta podatka Variant

Ako pri deklariranju varijable ne navedete vrstu podataka ili je uopće ne deklarirate, Visual Basic automatski navodi vrstu podataka variant za tu varijablu. Prednosti varijabli koje su deklarirane kao ova vrsta podataka navedene su u nastavku:

  • Varijable mogu sadržavati vrijednosti niza, datum, vrijeme, Booleove vrijednosti ili brojčane vrijednosti.
  • Varijable mogu automatski pretvoriti vrijednosti koje sadrže.

Nedostatak je što varijable varijable zahtijevaju najmanje 16 bajtova memorije. 16 bajtova memorije može biti značajno u velikim postupcima ili u složenim modulima.

Da biste vidjeli kako to funkcionira u makronaredbi Variable_Test, slijedite ove korake:

Promijenite kod u makronaredbi Variable_Test u:


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

Pokrenite makronaredbu Variable_Test .

Nećete primiti pogrešku jer varijable variant x i y možete dodijeliti bilo što.

NAPOMENA: Možete i izostaviti sljedeći redak, pa će makronaredba i dalje funkcionirati jer se varijable x i y tretiraju kao vrste podataka Variant:

    Dim x, y

Opseg varijable

Kada deklarirate varijablu, ona se može ili ne mora vidjeti u drugim makronaredbama u istom modulu, u drugim modulima ili u drugim projektima. Ta raspoloživost varijable u modulima naziva se opseg. Tri vrste područja primjene su na razini postupka, privatni modul i javni modul. Opseg ovisi o tome kako i gdje deklarirate varijablu ili varijable.

Djelokrug na razini postupka

Varijabla s djelokrugom na razini postupka ne vidi se izvan postupka u kojem je deklarirana. Ako postavite vrijednost varijable s djelokrugom na razini procedure, ostale makronaredbe neće vidjeti sadržaj te varijable.

Da biste provjerili ne vidi li se varijabla s djelokrugom na razini procedure izvan procedure u kojoj je deklarirana, slijedite ove korake:

  1. Umetnite novi modul u projekt.

  2. U modul upišite obje sljedeće makronaredbe:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, kao što vidi Macro1 je " & x 'sljedeći redak prolazi Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, as seen by Macro2 is " & x End Sub

  3. Pokrenite makronaredbu1 i prikazat će se sljedeća poruka:

    x, as seen by Macro1 is 10

  4. Kliknite U redu i prikazat će vam se sljedeća poruka:

    x, as seen by Macro2 is

  5. Kliknite U redu.

Makronaredba2 ne prikazuje vrijednost za varijablu x jer je varijabla x lokalna za Makronaredbu1.

Privatni i javni opseg na razini modula

U odjeljku s deklaracijama u modulu možete definirati varijable (pri vrhu modula, prije svih podprocedura) te postaviti opseg varijable pomoću izjave Javno, Dim naredbe ili Privatne naredbe. Ako ispred varijable postavite javnu izjavu, ona će biti dostupna svim makronaredbama u svim modulima projekta. Ako ispred varijable postavite naredbu Dim ili Private naredbu, varijabla je dostupna samo makronaredbama u modulu u kojem se deklarira.

Da biste vidjeli razliku između izjave Javno i Dim izjave, slijedite ove korake:

  1. Spremite i zatvorite sve otvorene radne knjige, a zatim otvorite novu radnu knjigu.

  2. Pokrenite Visual Basic Editor.

  3. Umetnite modul u projekt.

  4. 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
    
  5. Umetnite još jedan modul u projekt.

  6. U taj modul upišite sljedeći kod:
    Sub Macro2()
        x = x * 3
        MsgBox x
    End Sub

  7. Pokrenite makronaredbu Macro_1a prvom modulu.

  8. Ako je varijabla x deklarirana kao "Javni x Kao cijeli broj", sve tri makronaredbe u projektu imaju pristup vrijednosti x. U prvom okviru poruke prikazuje se vrijednost 10. U drugom okviru poruke prikazuje se vrijednost 20 (jer se x množi s 2 u Macro_1b). Treći okvir poruke prikazuje vrijednost 60 (jer je vrijednost x promijenjena u 20 u Macro_1b, a zatim je pomnožena s 3 u makronaredbi2).

  9. Promijenite redak deklaracije u prvom modulu iz:

       Public x As Integer

    Primatelji:

       Dim x As Integer

  10. Pokrenite makronaredbu Macro_1a .

  11. Uz varijablu x deklariranu kao "Dim x As Integer" samo makronaredbe u prvom modulu imaju pristup vrijednosti x. Dakle, u prvom okviru poruke prikazuje se vrijednost 10, u drugom se prikazuje vrijednost 20 (jer se x množi s 2 u Macro_1b), a u trećem okviru poruke prikazuje se vrijednost 0 (jer makronaredba 2 ne vidi vrijednost x, a makronaredba 2 koristi neinicijaliziranu vrijednost nula).

  12. Promijenite redak deklaracije u prvom modulu iz:

      Dim x As Integer

    Primatelji:

        Private x As Integer

  13. Pokrenite makronaredbu Macro_1a .

  14. Pomoću opsega izjave Private isti će se okviri s porukama prikazivati kao i pri korištenju naredbe Dim. Varijabla x ima isti opseg, privatno za modul u kojem je deklarirana.

NAPOMENA: Ako želite opseg varijable ograničiti na modul u kojem je deklarirana, koristite naredbu Privatestatement umjesto naredbe Dim. Obje postižu isti učinak, ali opseg je jasniji kada pročitate kod ako koristite naredbu Private.
 

Vijek trajanja varijable

Vrijeme tijekom kojeg varijabla zadržava svoju vrijednost naziva se njezinim vijekom trajanja. Vrijednost varijable može se promijeniti tijekom svog životnog ciklusa, ali će zadržati vrijednost. Također, kada varijabla izgubi opseg, ona više nema vrijednost.
 

Inicijalizacija vrijednosti varijable

Kada pokrenete makronaredbu, sve se varijable inicijaliziraju u vrijednost. Numerička varijabla inicijalizira se na nulu, niz promjenjive duljine inicijalizira se na niz nulte duljine (""), a niz fiksne duljine ispunjava se ASCII kodom 0. Varijable variant inicijaliziraju se u Empty. Prazna varijabla predstavljena je nulom u brojčanom kontekstu i nizom nulte duljine ("") u kontekstu niza.

Varijable na razini procedure

Ako postoji varijabla koja je deklarirana u makronaredbi pomoću naredbe Dim, varijabla zadržava svoju vrijednost dok se makronaredba izvodi. Ako makronaredba poziva druge makronaredbe, vrijednost varijable se zadržava (ali nije dostupna drugim makronaredbama) sve dok se i te makronaredbe izvode.

Da biste pokazali kako funkcioniraju varijable na razini procedure, slijedite ove korake:

  1. Umetnite novi modul u projekt.

  2. U modul upišite obje sljedeće makronaredbe:

    Sub Macro1()
        'set x as a procedure level variable
       Dim x As Integer
       MsgBox "inicijalizirana vrijednost x je" & x
       x = 10
        MsgBox "x je " & x
        'Sljedeći redak pokreće Makronaredba2
        Makronaredba2
        MsgBox "x je i dalje " & x
    End Sub
    Sub Macro2()
        MsgBox "x, kao što vidi Makronaredba2 je " & x
    End Sub

  3. Pokretanje makronaredbe1.

  4. Prikazat će vam se sljedeća poruka:

        the initialized value of x is 0

  5. Kliknite U redu i prikazat će vam se sljedeća poruka:

     x is 10

  6. Kliknite U redu i prikazat će vam se sljedeća poruka:

    x, as seen by Macro2 is

  7. Kliknite U redu.

  8. Makronaredba2 ne prikazuje vrijednost za varijablu x jer je varijabla x lokalna za Makronaredbu1. Prikazat će vam se sljedeća poruka:

    x is still 10

  9. Kliknite U redu.

  10. Pokretanje makronaredbe1.

Primit ćete poruke iste kao i u koracima od 3 do 6 jer čim se makronaredba1 prestala pokretati u 6. koraku, vrijednost varijable x je izgubljena. Zato kada ponovno pokrenete makronaredbu1 u sedmom koraku, prva poruka prikazuje vrijednost x kao nulu (inicijaliziranu vrijednost).

Statična ključna riječ

Ako je varijabla na razini procedure deklarirana pomoću ključne riječi Statički, varijabla zadržava svoju vrijednost sve dok se projekt ne vrati na zadane postavke. Dakle, ako imate statičnu varijablu, kada sljedeći put pozovete proceduru, statička varijabla će se inicijalizirati na svoju posljednju vrijednost.

Da biste vidjeli kako funkcionira ključna riječ Statički, slijedite ove korake:

1.

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
  1. Pokretanje makronaredbe1.

  2. Prikazat će vam se poruka:

    the initialized value of x is 0

  3. Kliknite U redu i prikazat će vam se sljedeća poruka:

    x is 10

  4. Kliknite U redu.

  5. Pokrenite makronaredbu1 i prikazat će se sljedeća poruka:

    the initialized value of x is 10

  6. Kliknite U redu i prikazat će vam se sljedeća poruka:

    x is 20

  7. Kliknite U redu.

Vrijednosti koje se pojavljuju u porukama drugi su put drugačije jer je varijabla x deklarirana kao statična varijabla i zadržava svoju vrijednost nakon prvog pokretanja makronaredbe1.

NAPOMENA: Ako imate varijablu na razini modula, njezin je vijek trajanja jednak da se radi o statičkoj varijabli na razini procedure.

Da biste provjerili vijek trajanja varijable na razini modula, slijedite ove korake:

1.

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
  1. Pokrenite makronaredbu1 i prikazat će se sljedeća poruka:

    the initialized value of x is 0

  2. Kliknite U redu i prikazat će se sljedeća poruka:

    x is 10

  3. Kliknite U redu,

  4. Pokrenite makronaredbu1 i prikazat će se sljedeća poruka:

    the initialized value of x is 10

  5. Kliknite U redu.

  6. Prikazat će vam se sljedeća poruka:

    x is 20

  7. Kliknite U redu.

Vrijednosti koje se pojavljuju u porukama drugi su put drugačije jer je varijabla x deklarirana kao statična varijabla i zadržava svoju vrijednost nakon prvog pokretanja makronaredbe1 .
 

Ponovno pokretanje projekta radi ponovnog postavljanja varijabli

Ako želite ponovno postaviti vrijednost za statičku varijablu ili varijablu na razini modula, kliknite gumb Ponovno postavi na
Standard alatnu traku ili kliknite Ponovno postavi na izborniku Pokreni.

Ako to učinite za makronaredbu1 , a zatim ponovno pokrenete makronaredbu1, vrijednost varijable x inicijalizira se natrag na nulu i primate prvu poruku:

    the initialized value of x is 0