Visual Basic for Applications 17.9.2018 VBA
Makra použití: automatické provádění často se opakujících akcí posloupnost příkazů, kterou lze automaticky a opakovaně vykonávat v aplikacích MS Office (Word, Excel, PowerPoint, Access) použití: automatické provádění často se opakujících akcí vytváření: nahrání zápis v jazyce Visual Basic kombinace obou způsobů 17.9.2018 VBA
Nahrávání makra po spuštění nahrávání až do jeho ukončení je každá akce (myší i z klávesnice) zaznamenána celou posloupnost akcí je pak možné přehrát tipy pro nahrávání: použití panelu nástrojů VB sledování nahraných akcí v okně editoru VB před začátkem nahrávání makra označení objektů relativní x absolutní odkaz absolutní odkaz => zaznamenávají se absolutní adresy buněk (např. A5, B3) relativní odkaz => zaznamenávají se pohyby vzhledem k počáteční pozici (posun – Offset (počet řádků, počet sloupců)) přepnout lze kdykoliv během nahrávání 17.9.2018 VBA
Spouštění makra automaticky: po otevření sešitu (makro Auto_Open), po uzavření sešitu (makro Auto_Close) zadanou klávesovou zkratkou vytvořenou položkou nebo tlačítkem v menu (Zobrazit / Panely nástrojů / Vlastní -> Příkazy -> Makra -> Vlastní položka nabídky resp. Vlastní tlačítko + přetažení do menu) kliknutím na grafický objekt: vytvoření objektu kliknutí pravým tlačítkem myši => Přiřadit makro 17.9.2018 VBA
Zápis makra v editoru VBA podprogramy kód podprogramu obvykle v modulech proměnné: platnost v podprogramu – dim nebo static + deklarace v podprogramu platnost v modulu – dim + globální deklarace platnost v celém projektu (tj. ve všech modulech) – public + globální deklarace procedury: makra = procedury bez parametrů lze nahrát a upravovat mezi klíčová slova Sub a End lze spustit ze seznamu maker (není-li deklarována jako Private) funkce: nelze nahrát mezi klíčová slova Function a End Function množství předdefinovaných funkcí lze vložit do buňky příkazem Vložit / Funkce / Vlastní (není-li deklarována jako Private) 17.9.2018 VBA
Předdefinované funkce matematické (Abs, Rnd, Sqr, Sin, …) pro práci s řetězci (&, Len, Mid, Ucase, Trim, …) pro převod na daný typ (Cdate, Cbool, …) pro datum a čas (Date, Time, Now, …) test na typ proměnné (IsDate, IsEmpty, …) nutno použít anglické názvy funkcí (např. CountA pro vrácení počtu neprázdných buněk v oblasti místo Počet2) např.: Application.WorkSheetFunction.Min(Range (“A1:C3“)) ‘vrátí minimální hodnotu z oblasti A1:C3 17.9.2018 VBA
Objekty ve VBA vlastnosti (~ proměnné), metody (~ procedury a funkce) přístup pomocí tečkové notace některé objekty jsou kontejnery: např.: Application.WorkBook.WorkSheet.Cell odkaz na výběr – Selection (je-li vybráno před spuštěním makra) struktura With: pro úsporu místa při zápisu např.: With Selection.Font .Name = “Arial Black“ .Size = 10 .ColorIndex = 3 End With ‘ nastaví ve vybrané oblasti žluté písmo Arial Black o velikosti 10 klíčové slovo Set uvozuje přiřazovací příkaz proměnných typu objekt Set oblast = Range (“A1:B3“) 17.9.2018 VBA
Kolekce kolekce = soubor objektů stejného typu název kolekce shodný s objektem + s přístup k prvkům kolekce: indexem WorkSheets(2).Name = “Druhý list“ jménem WorkSheets(“List2“).Name = “Druhý list“ ‘ přejmenování druhého listu v sešitě metoda Count – počet prvků kolekce (nelze nastavit, jen číst) metoda Add – přidá položku do kolekce metoda Delete – odebere položku z kolekce příkaz For Each Dim list As WorkSheet For Each list In WorkSheets … Next list 17.9.2018 VBA
Nejdůležitější objekty ve VBA I. Application – reprezentuje celou aplikaci Excelu vlastnosti: ActiveWindow (aktuální okno), ActiveWorkBook (aktuální sešit) ThisWorkBook (sešit, ve kterém je zapsán právě prováděný příkaz makra) Windows (kolekce všech otevřených oken v aplikaci) WorkBooks (kolekce všech otevřených sešitů) metody: Calculate (vyvolá přepočítání vzorců ve všech sešitech) Quit (ukončí aplikaci Excelu) Run (spuštění makra z jiného sešitu) Wait (pozastaví spuštěný podprogram na určitou dobu) 17.9.2018 VBA
Nejdůležitější objekty ve VBA II. WorkBook – otevřený sešit vlastnosti: ActiveSheet (aktuální list) Name (jméno sešitu), FullName (jméno včetně cesty), Path (cesta) Saved (je-li soubor uložen – True) WorkSheets (kolekce tabulkových listů – WorkSheet metody: Close (uzavře sešit) Save, SaveAs (uloží sešit na disk) 17.9.2018 VBA
Nejdůležitější objekty ve VBA III. WorkSheet – reprezentuje jeden list sešitu vlastnosti: Cells (kolekce všech buněk v sešitu) ActiveSheet.Cells(2,3) ‘ = buňka C2 ActiveSheet.Cells(2) ‘ = druhý řádek Columns (kolekce sloupců) Name (vrací nebo nastavuje jméno listu) Range (vymezuje oblast buněk na listu) Range(“A1:B3“) ‘ jeden parametr – zápis celé oblasti (i násobné) Range(“A1“,“B3“) ‘ dva parametry – rohové buňky vymezují obdélníkovou oblast Range(“A1:C3 B2:D5“) ‘ průnik oblastí A1:C3 a B2:D5 (operátor mezera), tj. oblast B2:C3 Union(Range(“A1:A2“),Range(“B2:B3“)) ‘ sjednocení více souvislých oblastí Range(“Oblast1“) ‘ odkaz na pojmenovanou oblast buněk (příkaz Vložit / Název / Definovat) Rows (kolekce řádků) Visible (skrytí / zobrazení listu) 17.9.2018 VBA
Nejdůležitější objekty ve VBA IV. WorkSheet – reprezentuje jeden list sešitu metody: Copy (kopíruje list před nebo za uvedený list v sešitě) Delete (odstraní zadaný list ze sešitu) Paste (vloží obsah stránky na parametrem určené (nebo aktuální) místo v sešitě) Select (parametr True vybere list, parametr False změní výběr listu) Window – reprezentuje okno v Excelu vlastnosti: Height, Width, Left, Top WindowState (stav okna – xlMaximized, xlMinimized, xlNormal) Activate (aktivuje okno) Close (uzavře okno) 17.9.2018 VBA
Nejdůležitější objekty ve VBA V. Range – reprezentuje buňku nebo výběr buněk v tabulce vlastnosti: Adress (adresa dané oblasti) Borders (kolekce orámování buněk) Characters (kolekce znaků uvnitř buňky – objekt Range musí odpovídat jediné buňce) Cells (všechny buňky dané oblasti) Columns (kolekce sloupců) Count (počet buněk v oblasti) End (poslední buňka oblasti ve směru určeném parametrem) Font (objekt, určující vlastnosti písma) Hidden (skrytí / zobrazení buněk) Interior (objekt, určující formát výplně) Offset (vrací objekt typu Range posunutý o požadovaný počet řádků a sloupců) ActiveCell.Offset(1,2).Value = 7 ‘ zapíše hodnotu 7 do buňky ležící o řádek pod a dva sloupce vpravo od aktivní buňky Rows (kolekce řádků) Value (vrací nebo nastavuje hodnotu v buňkách oblasti) 17.9.2018 VBA
Nejdůležitější objekty ve VBA VI. Range – reprezentuje buňku nebo výběr buněk v tabulce metody: AutoFit (přizpůsobí šířku sloupce) Calculate (přepočítá buňky v oblasti) Clear, ClearContents, ClearFormat (vymaže vše resp. obsah, formáty) Copy (zkopíruje oblast do schránky) Cut (vyjme oblast do schránky) Delete (zruší buňky a provede posun) Find, FindNext, FindPrevious (prohledávání obsahu buněk) Insert (vloží buňky a okolní posune) Paste (vloží obsah schránky) Select (označí oblast buněk) Sort (setřídí oblast dle zadaných podmínek) příklady: ActiveSheet.Range(“A4“) ‘ buňka A4 z aktivního listu WorkSheets(“Prosinec“).Range(“B:B“) nebo Range(“Prosinec!B:B“) ‘ sloupec B z listu Prosinec Pozor! Range(i & “:“ & j).Select ‘ odkaz na i-tý řádek a j-tý sloupec Nelze: Range( “i:j“).Select ani Range(i:j).Select 17.9.2018 VBA
Nejdůležitější objekty ve VBA VII. Font – objekt slouží k nastavení vlastností písma vlastnosti: Bold, Italic, Underline, … Color (barva písma, možno použít funkci RGB nebo konstanty vbRed,…), ColorIndex (barva písma z palety barev) Name (jméno fontu) Size (velikost písma) Interior – objekt popisuje vnitřek buňky Color, Colorindex (barva výplně) Pattern (vzorek výplně), PatternColor, PatternColorIndex (barva vzorku výplně) Border – objekt popisuje ohraničení buněk Color, ColorIndex (barva ohraničení) LineStyle (styl čáry – plná, čárkovaná, …) Weight (tloušťka čáry) 17.9.2018 VBA
Komunikace s uživatelem I. MsgBox(prompt, buttons, title, helpfile, context) : stisknuté_tlacítko InputBox(prompt, title, defualt, xpoz, ypoz, helpfile, context ): string zobrazí dialogové okno se vstupní řádkou a dvěma tlačítky OK a Storno ukončí-li uživatel tlačítkem OK, vrací text zapsaný ve vstupní řádce, jinak vrací prázdný řetězec 17.9.2018 VBA
Komunikace s uživatelem II. Applications.InputBox (prompt, title, default, left, top, helpFile, helpContextId, type):Variant navíc type – typ zadávané hodnoty: 0 – vzorec ve tvaru textu, např. “=A1+A2“ 1 – číslo 2 – textový řetězec 4 – logická hodnota (True nebo False) 8 – adresa oblasti buněk (Range); při přiřazení je nutné použít funkci Set např.: Dim oblast As Range Set oblast = Applications.InputBox(Title:= “Výstup“, Prompt:=“Zadej adresu oblasti“,Type:=8) 17.9.2018 VBA