BLACK FRIDAY! Slevy až 80 % jsou všude. Tak je nepropásni a přejdi do rostoucího IT oboru!
The real BF 2020

Lekce 2 - Datové typy ve VBA

V předchozí lekci, Úvod do VBA, jsme se seznámili s jazykem VBA, získali základní informace, definice a začali jsme s příklady.

Pokračujeme další porcí definic, abychom se seznámili se základními stavebními kameny jazyka. Vytvoříme nejjednodušší příkazy, procvičíme si počítání s čísly a budeme spojovat texty. Všude nás bude provázet definice datových typů, která zpřesní naše programy.

Definice

Výraz

Výraz je jeden nebo více prvků programu spojených operátory, které lze vyhodnotit, tedy vrátit hodnotu. Vyhodnocování probíhá podle stanovené priority.

Příkaz

Příkaz je nejmenší samostatná část programu popisující nějakou činnost, která má být provedena. Jde o proveditelný kód, prvkem nebo částí příkazu bývá většinou výraz. Více příkazů tvoří funkce, procedury a moduly.

Konstanta

Konstanta má vyhrazený název Const. Je to pojmenované místo v paměti, jeho hodnota je určena v deklaraci a nelze ji měnit. Deklarace konstanty musí být v programu provedena před jejím použitím.

Operátor

Operátor je znak nebo několik znaků, které spojují výrazy a představují funkci matematických nebo logických operací. Např. sčítání, dělení, nerovnost.

= - rovná se

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Znak, který má výsadní postavení. Ve VBA znamená přiřazení hodnoty proměnné stojící na levé straně od = vyhodnoceným výrazem nebo funkcí, která stojí od = vpravo. Např. zápis x = a + 5 znamená, že do proměnné x přiřadíme hodnotu proměnné a a k ní přičteme 5. Zápis x = x + 12 je ve VBA zcela legální, výsledkem je původní hodnota proměnné x zvětšená o 12.

Objekt

Je programový modul popisující a obsluhující určitou část aplikace MS Office. Příklady v aplikacích: v Excelu je to oblast buněk nebo sešit, ve Wordu je to odstavec nebo slovo, v Access třeba tabulka nebo formulář. Ve VBA má objekt poněkud jiný význam, než v objektově orientovaných jazycích. Podrobněji se objekty budeme zabývat v dalších částech a zejména u jednotlivých aplikací.

Datové typy

Data si program ukládá do paměti podle názvů proměnných, které jste jim přiřadili v deklaraci a jak je používáte v programu. Data ale nejsou hromada smetí, jsou ukládána podle přesných pravidel nazvaných typ a podle určeného typu s nimi program pracuje. Nelze násobit číslo a název firmy, nebo logickou hodnotu porovnávat s datumem. Výčet datových typů:

Datový typ Použití Popis
Boolean logická proměnná nabývá hodnot Pravda = True a Nepravda = False
Byte malé celé číslo rozsah 0 - 255
Currency měna Výpočty v pevné desetinné čárce s vysokou přesností
Date datum a čas Datum je v paměti uloženo jako číslo, v programu nebo výpisu má různé formy interpretace
Double reálné číslo dvojité přesnosti Rozsah (10 na 308), tedy jednička s 308 nulami, přesnost na třináct desetinných míst
Integer celočíselné hodnoty Rozsah -32 tisíc až +32 tisíc
Long celočíselné hodnoty dlouhé Rozsah -2,14 miliardy až +2,14 miliardy
Object odkaz na objekt bude upřesněno dále v kurzu
Single reálné číslo jednoduché přesnosti Rozsah (10 na 38), přesnost sedm cifer
String řetězec znaků Délka až 64000 B
Variant různý typ dat není-li deklarován typ dat, program jej sám určí a vnitřně provádí konverze typů, je to pomalejší a méně přesné, než určit datový typ v deklaraci

Operátory

Proměnné jsou pomocí operátorů spojeny do výrazů. Aritmetické operátory ve VBA jsou:

Operátor Název Příklad Výsledek
+ součet 4+11 15
- rozdíl 8-3 5
* násobení 4*2 8
/ dělení 16/2 8
\ celočíselné dělení 16\3 5
^ mocnina 3^2 9
Mod zbytek po celočíselném dělení 16 Mod 3 1
& sloučení řetězců "Ano nebo " & "Ne" "Ano nebo Ne"

Priorita operací

Nejjednodušším příkazem je přiřazení, například výsledek výpočtu součtu a součinu se uloží do proměnné y. Nejdříve se násobí, až následně sčítá.

y = 15 + 3 * 10    'Výsledek   y = 45

VBA zachovává prioritu operací podle aritmetiky. Pokud chceme pořadí operací ve výpočtu změnit, použijeme kulaté závorky - ().

y = (15 + 3) * 10   'Výsledek   y = 180

Přesnost deklarace datových typů

Jazyk VBA nemá přísnou typovou kontrolu proměnných. Lze toho s výhodou využít tak, že není třeba transformace typů, ale při nevhodném použití může dojít ke ztrátě přesnosti při operacích mezi čísly nebo k chybě při práci s jinými typy.

V následující proceduře sečteme reálné a celé číslo, výsledek se uloží do celého čísla a tím dojde automaticky k zaokrouhlení, program chybu nehlásí.

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

Spojování řetězců

Častým příkazem v rámci VBA je zpráva, která má standardní části textu a obsahuje například čísla, která se doplňují importem, čtením z tabulky Excelu, nebo z jiných zdrojů.

Jednoduchý příklad subTexty() je ukázkou spojování textového řetězce, čísla jsou ukládána jako řetězec.

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

Zde opět upozorňuji z jiného úhlu: Typová kontrola není striktní. Tam, kde je možný převod čísel a textu, program provede transformaci typů a nehlásí chybu. Je to z důvodu zpětné kompatibility k původním verzím jednoduchého jazyka Basic.

Následující procedura je obdobou předchozí subTexty(), ale jedna z částí textového řetězce je deklarována jako čí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í lekce u konce.

V příští lekci, Podmíněné příkazy ve VBA, budeme vytvářet podmíněné příkazy a větvit program na základě jejich výsledku.


 

Předchozí článek
Úvod do VBA
Všechny články v sekci
Základy Microsoft VBA
Článek pro vás napsal Luboš Marvan
Avatar
Jak se ti líbí článek?
1 hlasů
Snahou autora je žít podle svého
Aktivity (2)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!