zpět

Hlavní stránka

Poslední aktualizace: 29.07.2004

VBA - Deklarace

 

Ve Visual Basicu máme několik prvků:

 

Objekty, a jejich vlastnosti

Proměnné a jejich datové typy          

Události                                           

Akce                                            zatím se připravuje

 

Objekty další sekce Objekty >> Proměnné  Události  Akce    nahoru  dolů

 

Mezi objekty patří:

Application Aplikace
Workbook Sešit xls
Sheets List xls
Range Buňka v listu, nebo oblast buněk
Cells Buňka v listu, nebo oblast buněk jiný formát zápisu
UserForm Formulář ve VBA
Další prvky v VBa jsou:
Module Modul ve VBA
Class Module Modul třídy ve VBA
 

Všechny objekty mají své Vlastnosti, na které se lze odkazovat.
Je to zpravidla poslední slovo v řadě definice objektu (pokud to není příkaz).

Application.Name tzn.: Aplication je objekt - aplikace, Name je její vlastnost - Jméno
Application.Close tzn.: Aplication je objekt - aplikace, Close je příkaz - Zavřít

Některé vlastnosti ovládacích prvků na formuláři uvádím zde.

Okno_PropertiesApplication - Aplikace

Funkce MsgBox - Okno se správou v kódu
MsgBox Application.Name     'vrátí okno: "Mikrosoft Excel"

Workbook - Sešit xls

Workbooks("cogs.xls").Open     'otevře sešit se jménem "cogs.xls"

Sheets - List xls

Sheets("List1").Select    'vybere - dá fokus na list "List1"

Range - Buňka

Range("B3") = "Pondělí"     'do buňky "B3" bude přiřazena hodnota "Pondělí"
existuje taky možnost  
Range("B3:B10").Select        'vybere buňky B3 až B10

Zvláštností v listu Excelu je, že lze buňce (nebo skupině buněk) definovat Název buňky,
název musí být bez mezer, a nejlépe i bez diakritiky (s češtinou je problém)
a to způsobem - v rozhranní Excelu volba menu:

Vložit / Název / Definovat
napíšete název do pole: Názvy v sešitu
a pomocí RefEdit tlačítka zadáte adresu.

Nebo:
myší označíte buňku (nebo oblast),
do pole adresa buňky napíšete vhodný název (pole adresa buňky - vlevo od řádku vzorců)
a potvrdíme klávesou Enter

např. vybrat "A1" a definovat jí název "prvni_bunka" a potvrdit Enter.

Odkazy na takto definované buňky nikdy neztratí referenci.
Když v Excelu napíšete odkaz na buňku "A3", kde bude vzorec ...
Excel neustále sleduje tento vzorec, i když třeba vložíte řádky

Ale Visual basic tyto změny referencí nesleduje,
proto odkazujete-li se na adresu, je výhodnější odkaz ve formátu
Range("prvni_bunka") než Range("A1") 

v Excelu pak zápis = prvni_bunka je shodný s =$A$1
kdy znak dolaru říká Excelu, že při kopírování buněk se odkaz nemění - tzv. absolutní odkaz.

=$A$1 nemění se název sloupce, ani číslo řádku
=$A1   nemění se název sloupce, mění číslo řádku
=A$1   mění se název sloupce, nemění se číslo řádku
=A1     mění se název sloupce, i číslo řádku

Příklad na práci s buňkami, načítání hodnoty buňky do formuláře,
ukládání hodnoty z formuláře do buňky,
kontrola platnosti zadané hodnoty ...

Cells - Buňka

Cells(3, 2).Select     adresa buňky definovaná logikou Cells(řádek_číslo, sloupec_číslo).Select

jinak adresa Cells(3, 2) je shodná s adresou Range("B3") avšak v případě Cells se dá také napsat:

Dim A,B As Integer 'definice proměnné A a B jako čísla
A = 3
B = 2
Cells(A,B).Select    'Vybere buňku "B3"

jak si ukážeme později definice Cells(A,B) ... je velký pomocník,
obvzlášť pro cyklus For - Next (funkce)

Userform - Formulář

UserForm1.Show       'zobrazí formulář UserForm1

Module - Modul a Class Module - Modul třídy"

Na tyto prvky pokud vím se nelze odkazovat,
ale jsou v nich uloženy

Makra:
Sub Najdi ()
....
End sub

Funkce:
Function Zaokrouhli (Cislo as Integer)
....
End Function

Příklady později.


Proměnné další sekce Objekty << Proměnné >> Události  Akce     nahoru  dolů

Proměnné a jejich datové typy

Co je to proměnná? Proměnná je název ke kterému se přiřazuje určitá hodnota.
Proměnná se deklaruje tak, že se definuje zápisem:

Dim nazev_promenne As Integer

kde Dim označuje začátek deklarace .... 
a As Integer přiřazuje proměnné formát Číslo - neboli datový typ.

Pokud je více proměnných jednoho datového typu, mohou se deklarovat takto:

Dim nazev_promenne1, nazev_promenne2, nazev_promenne3 As Integer

Kód:

Dim sirka, vyska, plocha As Integer

sirka = 3
vyska = 4
plocha = sirka *  vyska 

'funkce MsgBox pak hodí hlášku "Velikost plochy je 12 mm!"

MsgBox "Velikost plochy je " & plocha  & " mm!"

Datový typ - co to je?
Jako v Excelu existují vlastnosti buněk (pravé tlačítko myši / Formát buněk / karta Číslo),
kde je definovaný formát buňky jako např. Obecný, Text, Číslo, Datum
tak stejně je třeba definovat ve VBA formát - Datový typ pro proměné a jiné prvky.

Zde je tabulka některých datových typů.

Datový typ Počet použitých bajtů Rozsah hodnot
Byte 1 bajt 0 až 255
Boolean 2 bajty True nebo False (Pravda / Nepravda)
Integer 2 bajty -32 768 až 32 767
Long 4 bajty - 2 147 483 648 až 2 147 483 647
Date 8 bajtů 1. leden 0100 až 31. prosinec 9999
Object 4 bajty libovolný objekt
String 10 bajtů + délka řetězce 0 až přibližně 2 miliardy
Variant (s čísly) 16 bajtů Libovolná číselná hodnota
Variant (se znaky) 22 bajtů + délka řetězce 0 až přibližně 2 miliardy
Uživatelsky definovaný Různý Podle typu
Range ? definuje proměnnou jako buňku

Srovnání Datového typu s Formátem buňky v Excelu
tak jak deklarace používám já.

Visual Basic Excel
Byte (nemá)
Boolean (nemá)
Integer Číslo
Long Číslo
Date Datum
Object (nemá)
String Text
Variant  Obecný

Proč definovat datový typ?
Protože VBA pracuje tak rychle jak velký je Datový typ, to znamená že je lepší text definovat jako
String než třeba jako Variant, nebo ho nedefinovat vůbec ( Dim nazev_promenne bez As ...).


Události další sekce Objekty  Proměnné << Události >> Akce     nahoru  dolů

Co je to událost? Událost je akce, která se stane v sešitu, listu, na formuláři, s prvkem formuláře ...
například kliknutí myši, stisknutí klávesy, uvolnění klávesy, aktivace - výběr prvku ...
Sešit s ukázkami událostí si můžete stáhnout zde.

Tady je přehled několika událostí

Název události Popis provede akci ...
Activate při aktivaci provede akci ...  např. výběru listu
BeforeClose před zavřením provede akci ... zavřením sešitu ...
BeforePrint před tiskem provede akci ...
BeforeRightClick při stisku pravého tlačítka provede akci ...
BeforeSave před uložením provede akci ...
Change při změně provede akci ...
Deactivate při deaktivaci provede akci ... odchodu z listu, prvku
NewSheet při vložení nového listu ... nastaví (zkopíruje) formát 
Open při otevření provede akci ...

Všeobecně pokud ve VBA vyberete v okně Project, List nebo Tento sešit nebo Formulář,
tak v hlavním okně jsou vidět dvě pole se seznamem.
V levém si vyberete Objekt a v pravém si vyberete Událost
to znamená, že ke každému Objektu Vám VBA nabídne seznam platných událostí.

Těžko by jste chtěli provádět událost

Private Sub UserForm_BeforePrint(Cancel As Boolean)
protože to je nesmysl, nelze tisknout formulář
End Sub

Pokud má událost definici : (Cancel As Boolean), 
tak to znamená, že lze tuto událost zrušit, nebo zakázat.

Příklad:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'toto makro patří do sektoru "Tento sešit" neboli "Thisworkbook"
'Tady se používají makra která se provádějí před tiskem listu nebo sešitu

Cancel = True

If Cancel = True Then
Msg = "Je zakázáno tisknout tento sešit !!!"
Odpoved = MsgBox(Msg, vbCritical + vbOKOnly)
Else
'proběhne tisk
End If

End Sub

Další příklady pro Objekt Tento sešit:

Private Sub Workbook_Open()
'toto makro patří do sektoru "Tento sešit" neboli "Thisworkbook"
'Tady se používají makra která se provádějí po otevření sešitu

'většinou tady umístňuji příkazy jako

UserForm1.Show (vbModeless)
'frm je zobrazen, i když manipulujete v sešitu

'nebo
'UserForm1.Show (vbModal)
'pokud neravřete form, nemůžete sáhnout do sešitu


End Sub

Další příklad pro Objekt Tento sešit:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'toto makro patří do sektoru "Tento sešit" neboli "Thisworkbook"
'Tady se používají makra která se provádějí před zavřením sešitu

'většinou tady umístňuji příkazy jako

If Not Me.Saved Then 'začátek "Když"
Msg = "Chcete uložit změny v sešitu " & Me.Name & " ?"
Odpoved = MsgBox(Msg, vbQuestion + vbYesNoCancel)

Select Case Odpoved 'na základě stisku tlačítka "Vyber" výsledek
Case vbYes 'tlačítko ANO
Me.Save
Case vbNo 'tlačítko NE
Me.Saved = True
Case vbCancel 'tlačítko ZRUŠIT
Cancel = True
Exit Sub 'opusť program - kód
End Select 'konec "Vyber"
End If 'konec "Když"

End Sub

Další příklad pro Objekt Tento sešit:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'toto makro patří do sektoru "Tento sešit" neboli "Thisworkbook"
'Tady se používají makra která se provádějí před tiskem listu nebo sešitu

'já v práci používám pro identifikaci z jaké složky a kdo tiskl zakázku kód:

Dim Label, Zpracoval As String

Zpracoval = Application.UserName
Popisek = ThisWorkbook.FullName & " Zpracoval: " & Zpracoval

For Each sht In ThisWorkbook.Sheets
sht.PageSetup.LeftFooter = Popisek

Next sht
End Sub

Příklad pro Objekt List:

Private Sub Worksheet_Activate()
'toto makro patří do sektoru "List1 ... List99"
'Tady se používají makra která se provádějí před tiskem listu nebo sešitu

MsgBox "Vybrali jste list: " & Me.Name
End Sub

Formulář má jednu z nejdůležitějších událostí a to je:

Private Sub UserForm_Initialize()
'V této sekci se zapisují kódy pro nastavení formuláře a jeho prvků
'událost vzniká při aktivaci - otevření formuláře
End Sub

Příklad pro Objekt Formulář:

Private Sub UserForm_Initialize()

img_label.Top = 48
img_label.Left = 180
img_label.Visible = False

img_textbox.Top = 84
img_textbox.Left = 180
img_textbox.Visible = False

End Sub

Další příklad pro Objekt Formulář:

Private Sub ob_checkbox_Click()

Call Vychozi_hodnoty 'volá makro s názvem "Vychozi_hodnoty"
img_CheckBox.Top = 10
img_CheckBox.Left = 180
img_CheckBox.Visible = True

End Sub


Akce
další sekce Objekty  Proměnné  Události  << Akce   nahoru  dolů

Většina objektů a prvků má kromě vlastností také další možnosti.
Akce je další možnost. Seznam všech akcí je dostupný v menu, stejně jako vlastnosti.
Takže když napíšete v kódu VBA:

ob_pole_se_seznamem.     tak napsáním tečky se zobrazí menu všech vlastností a akcí,
které lze s tímto prvkem udělat.

Na základě Vašeho psaní se seznam filtruje, a nabízí danou volbu,
aby jste jí nemuseli vypisovat, můžete ji vybrat:

- myší
- šipkami nahoru, dolů
-psaním (filtrem)

Potvrdit výběr lze:

- myší
- mezerníkem (slovo se doplní a kurzor zůstane na daném řádku)
- Enterem (slovo se doplní a kurzor odskočí na další řádek)

Tady jsou některé možnosti:

Akce Popis Prvek Syntaxe
AddComment vlož komentář buňka Range("B20").AddComment
Clear vymaž obsah i formát buňka Range("B20").Clear
ClearComments vymaž komentář buňka Range("B20").ClearComments
ClearContents vymaž obsah buňka Range("B20").ClearContents
ClearFormats vymaž formát buňka Range("B20").ClearFormats
Copy kopíruj buňka Range("B20").Copy
Cut vyjmi buňka Range("B20").Cut
Delete odstraň buňku buňka Range("B20").Delete
Find najdi buňka Range("B20").Find
Formula vlož vzorec buňka Range("B20").Formula
Paste vlož obsah schránky buňka Range("B20").Paste
Select vyber buňka Range("B20").Select
Sort seřaď buňka Range("B20:B25").Sort
SetFocus přejdi na tento prvek ComboBox ComboBox1.SetFocus
Show zobraz (form) UserForm1 UserForm1.Show


Nyní můžeme pokračovat na další stranu a to je stránka VBA - Formulář