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ář
|