vba variables option explicit vba
Tento tutoriál vysvetľuje, ako deklarovať a používať premenné VBA. Dozviete sa tiež o explicitných možnostiach, variabilnom rozsahu, statických a konštantných premenných:
V počítači sú všetky hodnoty údajov uložené v pamäti alebo v pamäti počítača. Ak chcete získať prístup k týmto hodnotám, musíte určiť názov spojený s touto hodnotou, ktorý sa v programovacích jazykoch nazýva premenná.
V tomto výučbe sa naučíme deklarovať a definovať premennú spolu s rôznymi typmi rozsahov premenných a podrobne preskúmať aj statické a konštantné premenné.
=> Ak chcete vidieť A-Z výučbových kurzov VBA, kliknite sem
Čo sa dozviete:
Premenné VBA
Premenné sú ako zástupné symboly pre hodnoty v počítačovom úložisku. Premenné môžu obsahovať rôzne varianty hodnôt a tieto hodnoty sa môžu meniť počas vykonávania kódu.
Každá premenná bude mať názov, ktorý sa použije na prístup k hodnote. VBA má určité obmedzenia, pokiaľ ide o výber mien.
Nižšie je uvedený zoznam obmedzení:
- Názov vašej premennej nemôže mať viac ako 255 znakov.
- Názov premennej nemôže začínať číslom.
- Nemôžete začínať špeciálnymi znakmi ako!, @, &,., # Alebo nemôžete mať medzery.
- Kľúčové slová sa nepovažujú za názov premennej.
Ak porušíte tieto obmedzenia, kompilátor urobí chybu
Príklad:
Platné názvy premenných: varName, Result12, First_Number
Neplatné názvy premenných: 123abc, #number, Sub, abc.123
Prvé číslo (medzi slovami nie je povolená medzera)
Deklarovanie premennej VBA
Musíme použiť Žiadne kľúčové slovo deklarovať premennú. Pri deklarovaní premennej sú 2 sekcie. 1svje názov premennej a 2ndje typ hodnoty, ktorá sa má uložiť v premennej, ktorá sa nazýva dátový typ.
Syntax: Dim VariableName ako DataType
Príklad:
- Dim MyAge ako celé číslo
- Dim My_Percentage Double
- Stlmiť celé meno ako reťazec
Tu výslovne hovoríte kompilátoru, že moja premenná by mala ukladať iba tieto typy údajov a VBA sa postará o to, aby vyhodila chybu nesúladu typu kompilátora, keď hodnota definovaná pre premennú nezodpovedá dátovému typu.
Príklad:
Sub example1() Dim Total_Marks As Integer Total_Marks = “” MsgBox Total_Marks End Sub
Ak si však nie ste istí dátovým typom premennej, potom vám VBA umožní preskočiť dátový typ. Platná je aj nižšie uvedená syntax.
Stlmiť názov premennej
Ak nedeklarujete dátový typ premennej, VBA s ním zaobchádza ako s dátovým typom Variant a je povinný prijať akýkoľvek typ dátového celého čísla, ako je celé číslo, reťazec, zošit atď. V rovnakom programe variantné premenné môžu akceptovať aj hodnotu reťazca, celočíselnú hodnotu a akýkoľvek iný typ.
Sub VarientVariable() Dim Total_Marks Total_Marks = '' MsgBox Total_Marks Total_Marks = 544.33 MsgBox Total_Marks Total_Marks = 522 MsgBox Total_Marks End Sub
Pretože Total_Marks je variantná premenná, na rozdiel od predchádzajúceho kódu kompilátor nevyhodí žiadnu chybu, ako je uvedené nižšie.
Poznámka: Pamätajte, že VBA vám umožňuje používať premennú bez toho, aby ste ju skutočne deklarovali.
Nasledujúci príklad kódu tiež poskytuje správny výsledok. V takom prípade VBA automaticky zaobchádza s premennou ako s dátovým typom Variant. Toto sa nazýva implicitná deklarácia.
Sub VariantVariable() Total_Marks = 444 MsgBox Total_Marks End Sub
Výhody vyhlásenia premennej
- Jednoduché ladenie: Je dobrým zvykom deklarovať premennú pred jej použitím. Poskytuje nám skoršie pochopenie chýb, ako sú napríklad nezhoda typov a preklepy, čím sa znižuje riziko odchýlenia sa od logiky programu.
- Lepšia čitateľnosť: Ako tím sa na kód bude pozerať veľa ľudí a deklarovanie premennej pomôže každému s typom hodnôt, ktoré má premenná brať, a tiež pomôže používateľom zadať príslušné vstupné hodnoty počas vykonávania programu.
- Skladový priestor: Ak nedeklarujete premennú, VBA s ňou zaobchádza ako s dátovým typom Variant, ktorý v porovnaní s inými dátovými typmi zaberá najväčší priestor v pamäti (16 bajtov až 22 bajtov). Napríklad, ak používate premennú typu Byte, ktorá zaberá iba 1 bajt a ak nedeklarujete, VBA si nakoniec vyhradí priestor 16 bajtov, čím stratí pamäť.
Možnosť Explicit
Aby sme zaistili výslovné vyhlásenie všetkých premenných, musíme pred ich použitím použiť príkaz Option Explicit. Malo by sa použiť na začiatku akejkoľvek procedúry v danom module.
Pozrime sa na príklad, ktorý nepoužíva explicitné vyhlásenie o možnosti.
Sub example3() Dim First_name As String First_name = ' abs' MsgBox Firt_Name End Sub
Vykonajte kód (stlačte kláves F5 alebo tlačidlo spustenia na paneli nástrojov) a nakoniec dostanete prázdne pole pre správu.
Aj napriek tomu, že ste deklarovali premennú, skončili ste v prázdnom políčku s výsledkami kvôli preklepu v Msgbox Firt_Name. Možnosť Explicit nám pomôže pri odstraňovaní takýchto chýb.
Zopakujme rovnaký kód pomocou možnosti Explicit. Pred začatím postupu zadajte možnosť Explicit.
Option Explicit Sub VarientVariable() Dim First_name As String First_name = ' abs' MsgBox Firt_Name End Sub
Teraz, ak spustíte kód (na paneli nástrojov stlačte kláves F5 alebo Spustiť) a nakoniec sa zobrazí chyba kompilátora.
Môžete pridať VBA Možnosť Explicit automaticky.
V editore VB Prejdite do ponuky Nástroje -> Možnosti -> Vyberte možnosť „Vyžadovať vyhlásenie o premennej“.
Teraz Možnosť Explicit sa pridá automaticky zakaždým, keď vložíte nový modul alebo zaznamenáte nové makro.
Poznámka: Možnosť Explicit nebude pridaná k existujúcemu kódu VBA. V prípade potreby ho musíte pridať manuálne.
Priradenie hodnoty k premennej
Hodnoty je možné priradiť k premenným pomocou symbolu rovnosti (=). Ak odkazujete na bunku v programe Excel, musíte použiť funkcie rozsahu.
Prečítajte si kód uvedený nižšie.
Sub varValue() Dim var1 As Integer var1 = 10 Range('C1:C14').Value = var1 MsgBox var1 End Sub
Vo vyššie uvedenom príklade je var1 premenná, ktorá ukladá hodnotu 10 priamo pomocou (=) a funkcia Range pomôže zadať hodnotu var1, ktorá je 10 v bunke Excel C1 až C14.
Rozsah premennej
Každá premenná v programe bude mať definovaný rozsah. Tento rozsah hovorí programu o oblastiach, v ktorých je premenná viditeľná, t. J. Modul alebo funkcia, ktorá môže alebo nemôže premennú používať.
VBA má pre premennú definované 3 typy rozsahu.
- Rozsah na úrovni postupu
- Súkromný rozsah na úrovni modulu
- Rozsah verejného modulu
Rozsah na úrovni postupu
Premenné definované v postupe, t. J. V podponuke alebo funkcii, ich budú môcť iba použiť. Nie sú viditeľné pre žiadny iný postup.
Príklad:
Option Explicit Sub ProcScope() Dim msg As String vartext = 'Varible is visible only inside this Sub' MsgBox vartext End Sub Sub VarNotVisible() MsgBox vartext End Sub
Keď vykonáte vyššie uvedený kód, pre prvý Sub msgbox vráti správny výsledok, ale pre druhý Sub bude vyhodená chyba kompilátora. Pretože premenná vrcholu je viditeľná iba pre 1svsub a nie pre 2nd. Pretože sme použili možnosť Explicit, dostaneme chybu kompilátora pre nedefinovanie premenných v 2ndpodč.


Súkromný rozsah na úrovni modulu
Tieto premenné sú dostupné pre všetky procedúry v definovanom module. Štandardne sú premenné deklarované s Žiadne sú označené ako súkromné. Pre lepšiu čitateľnosť sa však odporúča pridať súkromné.
Uvažujme o rovnakom príklade, ale premennú budeme deklarovať mimo postupu.
Option Explicit Private vartext As String ‘ Dim vartext As String can also be used Sub PrivateScope() vartext = 'Varible is visible to all procedures' MsgBox vartext, ,”Result from Sub1” End Sub Sub VarIsVisible() MsgBox vartext, ,”Result from Sub2” End Sub
Po vykonaní uvidíte, že obidva postupy vrátia správne výsledky bez akejkoľvek chyby. Pre lepšie pochopenie sme do schránky msgboxov pridali správny názov.
Rozsah verejného modulu
Tieto typy premenných sú viditeľné pre všetky postupy a vo všetkých moduloch projektu. Vložte 2 moduly. (Kliknite pravým tlačidlom myši na hárok a vyberte Vložiť -> moduly).
Zadajte nižšie uvedený kód do jedného modulu.
Option Explicit Public vartext As String Sub PrivateScope() vartext = 'Varible is visible to all modules' MsgBoxvartext, , 'Result from Sub1' End Sub
Zadajte nižšie uvedený kód do 2. modulu.
Option Explicit Sub VarIsVisible() MsgBoxvartext, , 'Result from Sub2' End Sub
Výsledky sú uvedené nižšie
Uvažujme o praktickom príklade a lepšie pochopme celý rozsah.
V prílohe je referenčný súbor pre vyššie uvedený kód.
Statická premenná
Zvyčajne sa hodnota premennej zachová iba od volania procedúry do konca procedúry. Po ukončení procedúry nezachová hodnotu.
Napríklad , vo vyššie uvedenom kóde je hodnota firstNo a secondNo odstránená hneď po ukončení procedúry, pri ďalšom spustení kódu dostane firstNo a secondNo rovnakú hodnotu, ako je definované v kóde.
Ale statické premenné sú tie, ktoré si zachovajú hodnotu premennej aj po vykonaní. Statická premenná je povolená iba vo vnútri pod alebo vo funkcii.
Zvážte nasledujúci kód s nestatickou premennou.
Option Explicit Sub staticVariable() Dim count As Integer count = count + 1 Debug.Print count End Sub
Zakaždým, keď stlačíte kláves F5, dostanete vo výsledku iba 1.
Teraz deklarujme premennú ako statickú.
Option Explicit Sub staticVariable() Static count As Integer count = count + 1 Debug.Print count End Sub
Zakaždým, keď spustíte kód (F5), bude mať výsledok zvýšenú hodnotu pre počet ako 1,2,3 atď., Pretože statická premenná si zachovala svoju hodnotu.
Poznámka: Statická premenná udrží hodnotu, kým nestlačíte tlačidlo Reset na paneli nástrojov alebo nezavriete zošit.
Konštantná premenná
Ako naznačuje názov, hodnotu týchto premenných nie je možné počas vykonávania programu zmeniť. Po vyhlásení konštanty ju nie je možné upraviť ani jej priradiť novú hodnotu.
Deklaráciu konštanty je možné vykonať v rámci postupu alebo na úrovni modulu (predovšetkým postupy).
Option Explicit Sub constantVariable() Const SpeedLimitOfcar As String = '90kmph' Dim myCarSpeed As String myCarSpeed = '70kmph' If myCarSpeed > SpeedLimitOfcar Then MsgBox 'overspeed: Reduce the speed' Else MsgBox 'Within the limit: Always drive below : ' & SpeedLimitOfcar End If End Sub
Ak sa pokúsite zmeniť konštantnú hodnotu, bude vyvolaná chyba kompilácie.
Option Explicit Sub ChangeConstantVariable() Const SpeedLimitOfcar As Integer = 90 SpeedLimitOfcar = SpeedLimitOfcar + 10 MsgBox SpeedLimitOfcar End Sub
Časté otázky
Otázka č. 1) Ako nastaviť verejnú premennú vo VBA?
Odpoveď: Verejné premenné sa deklarujú pred začiatkom postupu. Pri deklarovaní premennej sa musí použiť verejné kľúčové slovo.
Verejné celkové značky ako celé číslo
Otázka 2) Aký typ premenných nemožno deklarovať mimo postupu?
Odpoveď: Statické premenné nie je možné deklarovať mimo postup vo VBA a zobrazí sa chyba kompilácie.
Otázka č. 3) Ako deklarovať premennú vo VBA?
Odpoveď: Dim kľúčové slovo sa používa na deklaráciu premennej. Dim znamená Dimension.
Dim variablename Dim as Datatype
Otázka č. 4) Ako priradiť hodnotu premennej bunke vo VBA?
Odpoveď: Môžete použiť funkciu Range.
var1 = 10
Rozsah („C1: C14“). Hodnota = var1
Otázka č. 5) Čo sú premenné vo VBA?
Odpoveď: Premenné sú ako zástupné symboly pre hodnoty v počítačovom úložisku. Premenné môžu obsahovať rôzne varianty hodnôt a tieto hodnoty sa môžu meniť počas vykonávania kódu. Každá premenná by mala mať názov, pomocou názvu premennej počítač načíta hodnotu priradenú tejto premennej.
Otázka č. 6) Musíte deklarovať premennú vo VBA?
Odpoveď: Vyhlásenie je vo VBA voliteľné. Ak nedeklarujete premennú a priamo ju použijete v postupe, nazýva sa to implicitná deklarácia. Aby sa zabránilo chybám v kóde a pre lepšiu čitateľnosť sa odporúča explicitne deklarovať premennú.
Otázka č. 7) Ako môžem deklarovať viac premenných vo VBA?
Odpoveď: V jednom vyhlásení môžete deklarovať viac premenných. Musíte len určiť názov premennej oddelenej čiarkami v jednej klauzule As.
java programovacie otázky a odpovede pre skúsených
Dim FirstNo, SecondNo As Integer
V jednom vyhlásení môžete tiež zadať rôzne premenné. Každá premenná bude mať za časťou názvu premennej údajový typ uvedený v klauzule As.
Dim a, b As Single, c, d As Double, e As Integer, f As String
Otázka č. 8) Kedy by vo VBA nebol rozdiel medzi dim a private?
Odpoveď: Ak deklarujete súkromný rozsah na úrovni modulu, potom nie je žiadny rozdiel medzi deklarovaním premennej ako slabej alebo súkromnej. Štandardne sú premenné deklarované s Žiadne sú označené ako súkromné. Pre lepšiu čitateľnosť sa však odporúča pridať súkromné.
Otázka č. 9) Čo je to premenná na úrovni modulu?
Odpoveď: Premenné na úrovni modulu môžu byť súkromné alebo verejné. Súkromné premenné sú k dispozícii pre všetky procedúry v danom module a nie sú viditeľné pre žiadny iný modul. Verejné premenné sú viditeľné pre všetky postupy vo všetkých moduloch v projekte.
Záver
Premenná je rozhodujúca v každom programovacom jazyku. V tomto tutoriáli sme videli, čo sú premenné, ako ich deklarovať a používať v programe. Preskúmali sme tiež metódu Option Explicit, ktorá si vynúti implementáciu explicitnej deklarácie.
Diskutovalo sa o rôznych druhoch rozsahu premenných, ktoré užívateľom pomáhajú určiť, ktoré časti kódu môžu premennú použiť. Naučili sme sa používať statické premenné, ktoré pomáhajú udržiavať hodnotu premennej, a konštantné premenné, ktoré pomáhajú udržiavať hodnotu premennej nezmenenú.
=> Navštívte tu a naučte sa VBA od nuly
Odporúčané čítanie
- Výukový program pre Excel VBA - Úvod do VBA v programe Excel
- Pole a metódy poľa VBA programu Excel s príkladmi
- Dátové typy VBA - číselné a nečíselné dátové typy vo VBA
- Premenné Pythonu
- Premenné v C ++
- Premenné Java a ich typy s príkladmi
- C # dátové typy a premenné s príkladmi
- Premenné VBScript: Ako deklarovať a používať premenné - VBScript Dim