2. diel - Dátové typy vo VBA
V predchádzajúcej lekcii, Úvod do VBA , sme sa zoznámili s jazykom VBA, získali základné informácie, definície a začali sme s príkladmi.
Pokračujeme ďalšie porcií definícií, aby sme sa zoznámili so základnými stavebnými kameňmi jazyka. Vytvoríme najjednoduchšie príkazy, precvičíme si počítanie s číslami a budeme spájať texty. Všade nás bude sprevádzať definície dátových typov, ktorá spresní naše programy.
Definícia
Výraz
Výraz je jeden alebo viac prvkov programu spojených operátormi, ktoré možno vyhodnotiť, teda vrátiť hodnotu. Vyhodnocovanie prebieha podľa stanovené priority.
Príkaz
Príkaz je najmenšia samostatná časť programu popisujúcu nejakú činnosť, ktorá má byť vykonaná. Ide o uskutočniteľný kód, prvkom alebo častí príkazu býva väčšinou výraz. Viac príkazov tvorí funkcie, procedúry a moduly.
Konštanta
Konštanta má vyhradený názov Const
. Je to pomenované miesto
v pamäti, jeho hodnota je určená v deklarácii a nemožno ju meniť.
Deklarácia konštanty musia byť v programe vykonaná pred jej použitím.
Operátor
Operátor je znak alebo niekoľko znakov, ktoré spájajú výrazy a predstavujú funkciu matematických alebo logických operácií. Napr. sčítanie, delenie, nerovnosť.
=
- rovná sa
Znak, ktorý má výsadné postavenie. Vo VBA znamená priradenie hodnoty
premennej stojaci na ľavej strane od =
usudzuje
na výrazom alebo funkciou, ktorá stojí od =
vpravo. Napr. zápis x = a + 5
znamená, že do
premennej x
priradíme hodnotu premennej a
ak nej
pripočítame 5
. Zápis x = x + 12
je vo VBA úplne
legálne, výsledkom je pôvodná hodnota premennej x
zväčšená
o 12
.
Objekt
Je programový modul popisujúce a obsluhujúci určitú časť aplikácie MS Office. Príklady v aplikáciách: v Exceli je to oblasť buniek alebo zošit, vo Worde je to odsek alebo slovo, v Access napríklad tabuľka alebo formulár. Vo VBA má objekt trochu iný význam, než v objektovo orientovaných jazykoch. Podrobnejšie sa objekty budeme zaoberať v ďalších častiach a najmä pri jednotlivých aplikácií.
Dátové typy
Dáta si program ukladá do pamäte podľa názvov premenných, ktoré ste im priradili v deklarácii a ako ich používate v programe. Dáta ale nie sú hromada smeti, sú ukladané podľa presných pravidiel nazvaných typ a podľa určeného typu s nimi program pracuje. Nemožno násobiť číslo a názov firmy, alebo logickú hodnotu porovnávať s dátumom. Výpočet dátových typov:
dátový typ | použitie | popis |
---|---|---|
Boolean | logická premenná | nadobúda hodnôt Pravda = True a Nepravda =
False |
byte | malé celé číslo | rozsah 0 - 255 |
Currency | mena | Výpočty v pevnej desatinnej čiarke s vysokou presnosťou |
date | dátum a čas | Dátum je v pamäti uložené ako číslo, v programe alebo výpisu má rôzne formy interpretácie |
double | reálne číslo dvojité presnosti | Rozsah (10 na 308 ), teda jednička s
308 nulami, presnosť na trinásť desatinných miest |
integer | celočíselné hodnoty | Rozsah -32 tisíc až +32 tisíc |
long | celočíselné hodnoty dlhé | Rozsah -2,14 miliardy až +2,14 miliardy |
object | odkaz na objekt | bude upresnené ďalej v kurze |
single | reálne číslo jednoduchej presnosti | Rozsah (10 na 38 ), presnosť sedem cifier |
string | reťazec znakov | Dĺžka až 64000 B |
variant | rôzny typ dát | ak nie je deklarovaný typ dát, program ho sám určí a vnútorne vykonáva konverzie typov, je to pomalší a menej presné, než určiť typ údajov v deklarácii |
Premenné sú pomocou operátorov spojené do výrazov. Aritmetické operátory vo VBA sú:
operátor | Názov | Príklad | výsledok |
+ |
súčet | 4 + 11 |
15 |
- |
rozdiel | 8 - 3 |
5 |
* |
násobenie | 4 * 2 |
8 |
/ |
delenie | 16 / 2 |
8 |
\ |
celočíselné delenie | 16 \ 3 |
5 |
^ |
mocnina | 3 ^ 2 |
9 |
Mod |
zvyšok po delení | 16 Mod 3 |
1 |
& |
zlúčenie reťazcov | "Áno alebo" & "Nie" |
"Áno alebo Nie" |
Najjednoduchším príkazom je priradenie, napríklad
výsledok výpočtu súčtu a súčinu sa uloží do premennej y
.
Najskôr sa násobí, až následne sčíta.
y = 15 + 3 * 10 'Výsledek y = 45
VBA zachováva prioritu operácií podľa aritmetiky. Ak chceme poradie operácií vo výpočte zmeniť, použijeme okrúhle zátvorky - ().
y = (15 + 3) * 10 'Výsledek y = 180
Presnosť deklarácie dátových typov
Jazyk VBA nemá prísnu typovú kontrolu premenných. Možno toho s výhodou využiť tak, že nie je potrebné transformácie typov, ale pri nevhodnom použití môže dôjsť k strate presnosti pri operáciách medzi číslami alebo k chybe pri práci s inými typmi.
V nasledujúcej procedúre sčítame reálne a celé číslo, výsledok sa uloží do celého čísla a tým dôjde automaticky k zaokrúhlenie, program chybu nehlási.
Public Sub subCisla() 'ukázka chybné deklarace typu výsledku 'program chybu nehlásí, reálné číslo zaokrouhlí na celé '----------------------------- 'deklarace proměnných Dim y As Integer 'chyba, výsledek musí být také Single Dim a As Single Dim b As Integer 'naplnění proměnných /i v českém Excelu je ve VBA nutno používat desetinnou tečku/ a = 4.5337 b = 6 'výpočetní příkaz y = a + b 'zobrazení výsledku v okně Immediate y=11 Debug.Print y End Sub
Spájanie reťazcov
Častým príkazom v rámci VBA je správa, ktorá má štandardnú časti textu a obsahuje napríklad čísla, ktoré sa dopĺňajú importom, čítaním z tabuľky Excelu, alebo z iných zdrojov.
Jednoduchý príklad subTexty()
je ukážkou spájanie
textového reťazca, čísla sú ukladané ako reťazec.
Public Sub subTexty() 'spojování textu '------------------------------ 'Deklarujeme si části textu jako konstanty Const c1 = "Na hřišti bylo " Const c2 = " dospělých a " Const c3 = " dětí" 'deklarujeme si proměnné, které lze libovolně naplnit Dim vTxt1 As String Dim vTxt2 As String Dim napis As String 'naplníme proměnné, jsou typu řetězec znaů vTxt1 = "5" vTxt2 = "37" 'sestavíme výsledek napis = c1 & vTxt1 & c2 & vTxt2 & c3 'zobrazení výsledku v okně Immediate; "Na hřišti bylo 5 dospělých a 37 dětí" Debug.Print napis End Sub
Tu opäť upozorňujem z iného uhla: Typová kontrola nie je striktné. Tam, kde je možný prevod čísel a textu, program vykoná transformáciu typov a nehlási chybu. Je to z dôvodu spätnej kompatibility k pôvodným verziám jednoduchého jazyka Basic.
Nasledujúce procedúra je obdobou predchádzajúca subTexty()
,
ale jedna z častí textového reťazca je deklarovaná ako číslo.
Public Sub subTextyJinak() '---> změna typů a správný výsledek proti subTexty <--- '------------------------------------------------------ Const c1 = "Na hřišti bylo " Const c2 = " dospělých a " Const c3 = " dětí" Dim vInt1 As Integer 'pozor, zde je změna Dim vTxt2 As String Dim napis As String vInt1 = 5 'naplňujeme jako číslo, ne řetězec vTxt2 = "37" napis = c1 & vInt1 & c2 & vTxt2 & c3 'vInt1 jsme použili jako řetězec bez typové změny 'napis = "Na hřišti bylo 5 dospělých a 37 dětí" Debug.Print napis End Sub
Tým je dnešná lekcia u konca.
V budúcej lekcii, Podmienené príkazy vo VBA , budeme vytvárať podmienené príkazy a vetviť program na základe ich výsledku.