Excel - záznam, úprava a programování maker 98
6. Často používané příkazy, funkce a konstrukce V této části si představíme některé příkazy a konstrukce, které se používají velmi často. Zároveň si na praktických ukázkách procvičíte techniku psaní kódu.
6.1
Vestavěné příkazy a funkce obecně
Vestavěné příkazy a funkce jsou přímo součástí jazyka VBA a jsou nezávislé na objektech (zatímco metody a vlastnosti lze volat pouze na objektech). Protože vestavěných příkazů není příliš mnoho, je někdy třeba sáhnout i po jiném programovacím arsenálu, který nabízí přímo operační systém Windows (budeme se jím zabývat ve druhém díle knihy). VBA má také k dispozici celou paletu vestavěných funkcí. Mnohé z nich se podobají funkcím pracovních listů Excelu (nebo jsou jejich ekvivalentem). Např. funkce VBA Date, která vrátí aktuální datum, je významově shodná s funkcí pracovního listu v Excelu DNES. Funkce pracovního listu v kódu VBA Ve svém kódu VBA můžete používat většinu (ale ne všechny!) funkcí pracovních listů Excelu. Jejich volání se provádí pomocí objektu WorksheetFunction. Ten obsahuje všechny funkce pro pracovní listy, které můžete volat přímo ze svého kódu VBA. Určitý problém pro vás asi bude představovat fakt, že ve Visual Basicu musíte používat anglické názvy těchto funkcí – místo funkce SUMA to bude Sum, místo POZVYHLEDAT budete volat funkci Match atp. S tím se ovšem bohužel nedá nic dělat. Jako nápovědu pro převod českých jmen na anglická vám poradím jednoduchý prostředek – nahrajte si makro, ve kterém vložíte do buňky funkci pracovního listu, a v kódu makra uvidíte anglický název této funkce.
V kódu nemůžete používat funkce pracovních listů, které mají ekvivalentní funkci ve VBA. Jazyk VBA např. nemůže pracovat s funkcí Excelu SQRT, protože VBA má svoji vlastní verzi této funkce – Sqr. Seznam všech použitelných funkcí najdete v nápovědě Visual Basic for Applications pod heslem List of Worksheet Functions Available to Visual Basic, případně je získáte přímo v kódu po napsání tečky za názvem objektu WorksheetFunction. Základní přehled používání funkcí pracovních listů najdete v hesle Using Microsoft Excel Worksheet Functions in Visual Basic.
Takže např. sečtení několika hodnot se dá provést dvojím způsobem: a b c ' d ' d
= 10 = 15 = 20 sečtení třech čísel pomocí fce pracovního listu = Application.WorksheetFunction.Sum(a, b, c) prostý součet třech čísel pomocí operátoru + = a + b + c
Č AST O
POUŽ Í VANÉ
PŘ ÍKAZY,
FUNKCE
A
KONSTRUKCE
Ukázka elektronické knihy, UID: KOS180742
' oblast buněk je nutné zadat jako objekt Range maximum = Application.WorksheetFunction.Max(Range("A2:B5"))
A druhou nejvyšší hodnotu vrátí funkce Large: druha_nejvyssi = _ Application.WorksheetFunction.Large( _ Range("a2:a8"),2)
6.2
Jak z kódu informovat uživatele – příkaz a funkce MsgBox
S příkazem MsgBox jste se již v předchozích příkladech setkali. Jeho účelem je zobrazit okno s určitým textem, který si uživatel přečte a poté okno hlášení uzavře. Příkaz MsgBox můžete používat také při ladění aplikace (ale není to moc pohodlné řešení). Funkce MsgBox se od příkazu liší tím, že vrací hodnotu, která udává, kterým tlačítkem uživatel okno uzavřel. (Zatím jste viděli jen okno hlášení s jedním tlačítkem, ale celkem mohou být až čtyři.) V tomto případě se již MsgBox dá použít i pro řízení průběhu kódu: Můžete např. uživatele upozornit na neočekávanou nebo scházející vstupní hodnotu a požádat ho, aby určil, zda má makro předčasně skončit, vynechat část operace, nebo zda hodnotu zadá uživatel sám. Je možné se uživatele dotázat, zda chce nebo nechce provést nějakou nepovinnou operaci (např. tisk sestavy). Obecně lze funkci MsgBox použít ve všech případech, kdy chcete, aby uživatel stanovil, co se bude dále dít. MsgBox nabízí tyto kombinace tlačítek: OK OK, STORNO ANO, NE ANO, NE, STORNO PŘERUŠIT, OPAKOVAT, PŘESKOČIT OPAKOVAT, STORNO
Chcete-li během provádění kódu pouze sdělit uživateli nějaké informace, můžete je pomocí vlastnosti Application.StatusBar vypsat do stavového řádku Excelu. Nevýhodou je fakt, že text ve stavovém řádku sleduje jen málokdo. Další možnost představuje vlastní formulář s hlášením, který se po určité době sám zavře. Formulářům je věnována samostatná kapitola v druhém dílu knihy.
Funkce MsgBox má celkem pět parametrů, z toho jen jeden povinný: MsgBox(prompt [, buttons][, title][, HelpFile, Context ])
Č AST O
POUŽ Í VANÉ
PŘ ÍKAZY,
FUNKCE
A
KONSTRUKCE
Excel - záznam, úprava a programování maker
Maximální hodnotu z určité oblasti buněk lze získat pomocí funkce Max:
99
Ukázka elektronické knihy, UID: KOS180742
Excel - záznam, úprava a programování maker 100
V následující tabulce je popsán význam všech parametrů:
Parametr
Význam
prompt (povinný)
Zpráva zobrazená v okně hlášení (textový řetězec).
buttons (volitelný)
Jedna či více vestavěných konstant, které stanoví druh a počet tlačítek v okně, doplňkové ikony a chování okna hlášení.
title (volitelný)
Text v titulkovém pruhu. Nezadáte-li ho, je použit standardní text Microsoft Excel.
HelpFile (volitelný)
Název souboru nápovědy, který je přidružen oknu hlášení (v této knize se uvedená problematika neprobírá). Zadává se spolu s následujícím parametrem.
Context (volitelný)
Identifikátor kontextového tématu nápovědy.
V základním tvaru vypadá volání příkazu takto: MsgBox "Nelze vypočítat"
Pokud nezadáte záhlaví okna hlášení (parametr title), bude použit název programu (viz následující obrázek).
Kromě záhlaví okna můžete ovlivnit podobu okna ještě pomocí parametru buttons. Vestavěné konstanty, které vám při zápisu příkazu budou nabídnuty, umožňují do okna hlášení přidat barevnou ikonu nebo určit, jaká tlačítka se v okně objeví (to má ale význam jen u funkce MsgBox). Jednotlivé konstanty lze v tomto parametru sčítat – což je nutné např. v případě, kdy chcete v okně zobrazit ikonu a zároveň přidat další tlačítka. V následujícím řádku je vyvoláno okno hlášení s ikonou Stop a vlastním titulkem: MsgBox "Nelze vypočítat", vbCritical, "Přehled za rok 2004"
Č AST O
POUŽ Í VANÉ
PŘ ÍKAZY,
FUNKCE
A
KONSTRUKCE
Ukázka elektronické knihy, UID: KOS180742