EB963597

Page 1


Obsah

Události v Excelu................................................................ 13

1.1 Využití událostí ve vlastních aplikacích.............................15

Umíst ě ní procedur událostí...........................................15

Jak zabránit výskytu událostí........................................18

1.2 Události sešitu...........................................................19

P ř ehled událostí sešitu................................................19

P ř íklady využití základních událostí sešitu.........................21

1.3 Události list ů .............................................................23

P ř ehled událostí listu...................................................24

P ř ehled událostí graf ů (listu typu graf)............................28

1.4 Události aplikace Excel................................................31

Práce s grafy pomocí jazyka VBA......................................... 33

2.1 Úvod……………………………… ………………....................34

Grafy v objektovém modelu VBA...................................34

2.2 Základní postupy p ř i práci s grafy..................................37

Vytvo ř ení nového grafu pomocí kódu VBA.......................37

2.3 Práce s datovými ř adami.............................................42

Kolekce SeriesCollection..............................................42

Práce s jednotlivými datovými ř adami.............................45

Pokro č ilé techniky pr áce s gr afy....................................48

Automatické p ř izp ů sobení hodnot osy Y..........................48

2.4 Formátování grafu......................................................51

2.5 P ř ehled vlastností a metod objekt ů ................................52

Vlastnosti objektu ChartObject.....................................52

Metody objektu ChartObject........................................54

Vlastnosti objektu Chart..............................................54

Metody objektu Chart.................................................56 T ř ídy objekt ů a moduly t ř íd.................................................. 57

3.1 Pro č , k č emu, jak.......................................................58

3.2 Vytvo ř ení nové t ř ídy a konkrétní instance........................59

První pokus...............................................................60

Vytvá ř ení vlastností a metod........................................62

Zachycení událostí objektu Application pomocí t ř ídy...........67

Zachycení událostí vložených graf ů .................................68

P ř íklad: použití událostí u vloženého grafu........................69 1 2 3

Programování v Excelu 2000, 2002, 2003

Formulá ř e.......................................................................... 73

4.1 Vytvo ř ení formulá ř e, jeho zobrazení a ukon č ení pomocí VBA............................................ 75

Modul kódu formulá ř e..................................................76

Toolbox (souprava nástroj ů )..........................................76

Spušt ě ní formulá ř e.....................................................77

Modální a nemodální formulá ř e......................................78

Uzav ř ení formulá ř e.....................................................79

4.2 Okno Properties.........................................................80

4.3 Ovládací prvky...........................................................82

P ř idání ovládacího prvku do formulá ř e.............................82

Výb ě r ovládacího prvku na formulá ř i...............................84

Konvence pro názvy formulá řů a ovládacích prvk ů .............85

Po ř adí ovládacích prvk ů na formulá ř i..............................86

Dostupnost ovládacích prvk ů a p ř esun mezi nimi...............88 Úprava ovládacích prvk ů ve formulá ř i.............................89

4.4 P ř ehled typ ů ovládacích prvk ů .......................................91

P ř íkazové tla č ítko (CommandButton)..............................91

Popisek (Label)...........................................................92

Textové pole (TextBox)................................................93

Zaškrtávací polí č ko (CheckBox).....................................94

P ř epína č (OptionButton)..............................................95

Seznam (ListBox).......................................................96

Rozvírací seznam (ComboBox).......................................99

Ráme č ek (Frame).....................................................100

P ř epínací tla č ítko (ToggleButton).................................101 Č íselník (SpinButton)................................................. 101

Posuvník (ScrollBar)..................................................102

RefEdit .................................................................102

Vícenásobná stránka (MultiPage).................................102

Karty (TabStrip).......................................................103

Obraz (Image)..........................................................104

4.5 Odkazy na formulá ř e a ovládací prvky v kódu VBA...........105

P ř íklad – formulá ř pro zobrazení informací o listu...........106

Další příklad – seznam všech pojmenovaných názvů v sešitu..108

Ukázka práce se zaškrtávacími polí č ky a p ř epína č i..........111

4.6 Zpracování událostí souvisej ících s klávesnicí a myší........113

Události klávesnice....................................................115

4.7 Používání ovládacích prvk ů p ř ímo na pracovním listu........116

4.8 Základní spole č né vlastnosti a metody ovládacích prvk ů a uživatelských formulá řů ...................................119

Vlastnosti ovliv ň ující vzhled a chování formulá ř e č i ovládacích prvk ů ...................................................119

Další spole č né vlastnosti............................................121

Metody formulá ř e nebo ovládacích prvk ů ......................121

4.9 P ř ehled d ů ležitých vlastností a metod objektu Us erForm....................................................122

Vlastnosti...............................................................122

Metody .................................................................124

Základní události formulá ř e.........................................124

4.10 Sdílení formulá řů ......................................................124

Práce s externími soubory, export a import soubor ů ........... 127

5.1 Práce s externími soubory.........................................128

Základní operace se soubory......................................128

5.2 Jednoduché č tení a zápis textových soubor ů ..................132

5.3 Vlastní manipulace s textovými soubory........................136

Otev ř ení textov ého souboru.......................................137

Na č tení obsahu textového souboru..............................138

Zápis údaj ů do textového souboru................................139

Import dat do listu Excelu pomocí p ř íkazu Line Input #.....139

Na č ítání textového souboru p ř íkazem Input #.................141

Zápis do soubor ů – p ř íkazy Write # a Print #................141

Export oblasti bun ě k do textového souboru pomocí p ř íkazu Write #.............................................142

Využití p ř íkazu Write pro zápis údaj ů o chybách za b ě hu progr amu....................................................143

5.4 Ukládání r ů zných nastavení do registru Windows............144

Použití p ř íkaz ů SaveSetting, DeleteSetting a funkcí GetSetting, GetAllSettings..............................145

Další možnosti pro ukládání nastavení...........................145

Databáze a seznamy v Excelu............................................. 147

Základní terminologie................................................149

Ru č ní správa seznamu pom ocí nabídky Excelu .................149

6.1 Vytvo ř ení seznamu...................................................149

Po ř izování záznam ů v seznamu....................................150

6.2 Ř azení, filtrování a další oper ace s databázemi Excelu pomocí VBA............................................................150

6.3 P ř íklad jednoduché aplikace využívající formulá ř e

(Adresá ř )...............................................................155

Jak na č ítat a ukládat data.........................................156

Č innosti p ř i otev ř ení formulá ř e....................................157 5 6

Programování v Excelu 2000, 2002, 2003

Obecné procedury pro na č tení záznamu, uložení p ů vodních hodnot a uložení zm ě n........................158

Tla č ítka pro p ř echod na další (p ř edchozí záznam)............161

Pracovní prost ř edí Excelu – nabídky a penely nástroj ů ........ 165

7.1 Č ásti pracovní plochy Excelu a jejich zobrazení č i skrytí pom ocí VBA.................................................166

7.2 Panely nabídek a panely nástroj ů –možnosti manipulace s nimi........................................170

Kolekce CommandBars, objekty Comma ndBar ...............170

Objekt CommandBarControl a objekty vyjad ř ující jednotlivé typy ovládacích prvk ů .....................172

7.3 Práce s nabídkami a panely nástroj ů .............................173

Vytvá ř ení a odstran ě ní vlastních panel ů a nabídek...........173 Úprava existujících panel ů a nabídek.............................175

7.4 Místní nabídky..........................................................181

Vytvo ř ení, úprava a odstran ě ní nové místní nabídky.........182

7.5 P ř ehled vlastností a metod objekt ů CommandBars a CommandBar...................................183

Vlastnosti kolekce CommandBars................................183

Metody kolekce CommandBars...................................183

Vlastnosti objektu CommandBar..................................184

Metody objektu CommandBar.....................................185

Základní vlastnosti a metody ovládacích prvk ů na panelech p ř íkaz ů ...................................................186 Dopl ň ky v Excelu............................................................... 187

8.1 Ú č el dopl ň k ů a p ř ehled dopl ň k ů dodávaných p ř ímo s Excelem........................................... 189

8.2 Obecné zásady pro vytvá ř ení dopl ň k ů ...........................190

8.3 P ř íklad dopl ň ku – p ř evod do HTML...............................192

Formulá ř .................................................................192

Programový kód dopl ň ku............................................193

Spolupráce s dalšími programy.......................................... 197

9.1 Spoušt ě ní a aktivace jiný ch aplikací..............................198

Funkce Shell............................................................198

Spušt ě ní program ů pomocí technologie Automation.........199

P ř epínání mezi n ě kolika programy................................202

9.2 Technologie Automation a její využití pro spolupráci s Wordem nebo Outlookem........................................203

P ř íklady práce s Wordem...........................................203

P ř íklady práce s Outlookem........................................205 7 8 9

Funkce Windows API......................................................... 211

10.1 Co se skrývá za zkratkou API.....................................212

Deklarace API funkcí a p ř íkaz ů ....................................212

10.2 Konstanty a uživatelské typy prom ě nných v API.............213

Další „lah ů dky“ spojené s volání m rutin API...................215

N ě kolik varování.......................................................216

10.3 Základní p ř íklady na používání Windows API...................216

Práce s disky, slož kami a soubory...............................217

Práce se systém em Windows.....................................219 API pro práci se sítí..................................................221

Další vhodné ukázky..................................................222

Kde hledat dále?......................................................223

Úvod

Kniha se zam ěř uje na základy programování v Excelu 2003 ; pokud máte starší verze Excelu ( 97 , 2000 , 2002 ), m ů žete se podle ní u č it také, z hlediska základ ů programování se tyto verze neliší.

Tato kniha voln ě navazuje na knihu s názvem Excel 2000, 2002, 2003 – záznam, úprava a programování maker ( Grada, 2004 ), v níž se v ě nuji t ě m záležitostem, které programátor Excelu prost ě „musí“ znát, a t ěm technikám, které bude v Excelu používat nej č ast ěji. Kniha, již však držíte v rukou práv ě teď , je uč ebnicí pokroč ilých programovacích technik a objekt ů

V celém textu se snažím být maximáln ě stru č ný, což je p ř irozený d ů sledek dlouholeté zkušeností lektora, který ví, že jeho poslucha č i ( č tená ř i) se cht ě jí n ě co nau č it a ne poslouchat marketingové a jiné podobné bláboly. Sem tam na n ě které v ě ty č i pasáže narazíte vícekrát – opakování je matka moudrosti.

Programování maker není záležitostí pro úplné po č ítač ové zač áteč níky a také ne pro ty, kdo si jen rádi hrají. V celém textu knihy p ř edpokládám, že umíte Excel ovládat a víte, k č emu všemu se dá použít. Nap ř . v č ásti v ě nované programování graf ů rozhodn ě nenajdete výklad toho, jak se graf vytvá ř í ru č n ě v uživatelském rozhraní …

Po č ítejte také s tím, že bez znalosti angli č tiny se toho moc nenau č íte, pro zvládnutí pokroč ilých témat je nezbytná, ale i u základ ů se vám bude hodit. Č esky toho totiž p ř íliš nevyšlo a spoustu materiál ů seženete na internetu jen v angli č tině. Schází p ř edevším č eská referenční p ř íru č ka s kompletním č eským p ř ekladem nápov ě dy k objekt ů m, vlastnostem, metodám a událostem, i když se v tomto sm ě ru stále dá doporu č it výte č ná kníže č ka „Programování Office 97“ od Markéty a Petra Šitinových, kterou vydalo nakladatelství Grada v roce 1998.

Je p ř irozené, že váš pohled na knihu bude jiný než m ů j. Pokud zjistíte, že v knize schází n ě která fakta, bez kterých si nevíte rady, napište na adresu sdds@seznam.cz a já se pokusím vám stru č n ě vysv ě tlit souvislosti.

Používané konvence

Jak jste již z publikací nakladatelství Grada zvyklí, orientaci v textu vám budou usnad ň ovat r ů zné typografické prvky:

Pozor!

Název

Soubor

Storno

D ů ležité pojmy a pasáže textu, které je t ř eba zvýraznit, jsou vysazeny tu č n ě

Názvy firem, softwarových produkt ů , aplikací a jednotlivých objekt ů programu ozna č uji kurzívou .

Názvy soubor ů , složek a internetové adresy.

Texty, které se objevují v uživatelském prost ř edí aplikací Windows, jsou vysazeny jako b ě žný text, ale v tu č né kurziv ě . Takto jsou odlišeny př íkazy nabídek, popisky ovládacích tlač ítek, názvy dialogových oken a další „citace z obrazovky“.

Vložit → Rám Jednotlivé p ř íkazy v posloupnosti p ř íkaz ů zadávané v nabídkách, podnabídkách a následn ě otevíraných dialogových oknech odd ě lujeme šipkami – např. Nástroje → Možnosti → Zobrazení → Zalomit do okna .

KLÁVESA Názvy kláves a klávesových zkratek ozna č ujeme K APITÁLKAMI – nap ř . E NTER nebo A LT +S.

Program Pro výpis zdrojového kódu v p ř íkladech a pro odlišení jednotlivých prvk ů programu v b ě žném textu je použito bezpatkové neproporcionální písmo.

V textu se budete č asto setkávat s odstavci ozna č enými ikonou, která bude charakterizovat druh informace v daném odstavci:

Píšící ruka ozna č uje poznámku, která není nezbytná k pochopení dané problematiky, ale týká se tématu a prozrazuje další souvislosti.

„Usm ě vá č ek“ vás upozorní na r ů zné tipy a triky, kterými si m ů žete usnadnit n ě které č innosti nebo které vám umož ní dosáhnout efektních výsledk ů

Varovn ě vzty č ený prst ozna č uje text, který vás upozor ň uje na n ě co, na co byste si m ě li dát pozor, co vás m ů že nep ř íjemn ě p ř ekvapit nebo co by vám mohlo zp ů sobit problémy.

Bomba je p ř edzv ě stí katastrofy nebo alespo ň velkých nep ř í j emností. Tato ikona totiž ozna č uje text upozor ň ující na skute č nosti, vedoucí ke ztrát ě dat, zhroucení systém ů a podobným havarijním stav ů m.

Události v Excelu

1. Události v Excelu

V prvním dílu u č ebnice byly události zmín ě ny jen velmi stru č n ě , nyní p ř išel č as v ě novat se jim podrobn ě ji. V dalších kapitolách se s jejich využitím budete setkávat velmi č asto.

P ř ipome ň me si, co už víte – událost (angl. event ) je akce vyvolaná uživatelem nebo systémem, kterou objekt (obecn ě , nejenom v Excelu ) dokáže rozpoznat . Mezi takové akce pat ř í nap ř . otev ř ení č i uzav ř ení sešitu, klepnutí č i poklepání myší na objekt, zm ě na hodnoty v bu ň ce apod.

Každá událost má p ř i ř azenu svoji proceduru ( ř íká se jí událostní procedura , angl. event procedure ), která standardn ě neobsahuje žádný kód. Napíšete-li však n ě jaký kód do událostní procedury, bude spušt ě n p ř i každém výskyt u dané události, tedy nap ř . p ř i otev ř ení n ě jakého sešitu nebo p ř ed jeho uzav ř ením, p ř ed p ř epo č ítáním sešitu, po zm ě n ě hodnoty v bu ň ce apod.

Objekty Excelu umí reagovat na velké množství událostí. Rozsah této knihy proto umožní p ř edstavit si jen n ě které z nich, stru č ný p ř ehled všech událostí je uveden vždy v p ř íslušné č ásti kapitoly:

Události sešitu : Probíhají v rámci sešitu. Jako p ř íklad lze uvést událost Open (vytvo ř ení nebo otev ř ení sešitu), BeforeSave (sešit bude uložen), BeforePrint (sešit bude tišt ě n) nebo NewSheet (je p ř idáván nový list).

Události listu : Jsou vyvolány pro ur č itý list. Sem pat ř í nap ř . událost Activate (list je aktivován), SelectionChange (zm ě na výb ě ru na listu) č i Calculate (list je p ř epo č ítáván).

Události grafu : Jsou vyvolány pro ur č itý list typu graf. Patř í mezi ně události Resize (po zm ě n ě velikosti grafu) č i SeriesChange (zm ě na datového bodu v n ě jaké datové ř ad ě ). Pro zachytávání událostí v grafech vložených na pracovním listu je nutné použít modul t ř ídy (ty budou podrobn ě probrány ve t ř etí kapitole).

Události celé aplikace : Probíhají na úrovni celé aplikace ( Excelu ). Mezi nejvýznamn ě jší pat ř í nap ř NewWorkbook (vytvo ř ení nového sešitu) nebo SheetChange (prob ě hla zm ě na bu ň ky v libovolném sešitu). Pro práci s událostmi aplikace je vždy nutný modul t ř ídy.

Události formulá řů a jejich ovládacích prvk ů : Vyskytují se v rámci ur č itého formulá ř e nebo ovlada č e.

Události, které neprobíhají v rámci žádného objektu : Sem pat ř í dv ě události na úrovni celé aplikace – OnTime a OnKey. Funk č n ě se odlišují od jiných událostí.

N ě které akce spouští více událostí za sebou. Nap ř . p ř i otevírání sešitu prob ě hnou postupn ě tyto události sešitu:

Open Activate WindowActivate

P ř i uzavírání sešitu probíhají (minimáln ě ) tyto události sešitu: BeforeClose WindowDeactivate Deactivate

Posloupnosti událostí bývají mnohem složit ě jší, než si m ů žete p ř edstavit na základ ě t ě chto př íkladů. V obou ukázkách šlo navíc jen o události na úrovni sešitu. Nap ř . př i př idání nového listu do sešitu však prob ěhnou i události na úrovni listu a celé aplikace. Posloupnost událostí navíc nemusí být vždy zcela logická – p ř i p ř idání nového listu do sešitu prob ě hne nejdř íve událost SheetActivate (aktivace listu) a až poté událost WorkbookNewSheet (nový list v sešitu).

Další sekvence m ůžete zkoumat sami podle libosti, nejjednodušší je zapsat do každé zkoumané událostní procedury p ř íkaz:

Debug.Print "Název_Procedury"

Bližší pr ůzkum posloupností, v jakých jednotlivé události probíhají, se ovšem v praxi vyplatí pouze v p ř ípadech, kdy využíváte v ě tší množství událostí. Chcete-li spustit jednu proceduru p ř i otev ř ení sešitu a druhou p ř i p ř epo č tu ur č itého listu, není t ř eba se ni č eho obávat.

1.1 Využití událostí ve vlastních

aplikacích

Aplikace ř ízené událostmi jsou v systému Windows rozšíř eny tak, že už si to ani neuv ědomujeme. Každé dialogové okno je typickou ukázkou – po klepnutí na tla č ítko nebo po zm ě n ě hodnoty ur č itého ovlada č e je okamžit ě provedena n ějaká operace. Klepnutí nebo poklepání myší, pohyb kurzorem nebo stisk klávesy jsou také událostmi, které je každý prvek v dialogovém okn ě schopen rozeznat.

Umíst ě ní procedur událostí

Velmi č astou chybou mnoha za č áte č ník ů (v diskusních konferencích narazíte na spoustu dotaz ů ) je fakt, že procedury, které by m ě ly p ř i vzniku n ě jaké události prob ě hnout, nejsou spušt ě ny. P ř í č ina problému je jednoduchá – událostní procedury je t ř eba vždy zapsat na správné místo.

V okn ě Project m ů že mít každý sešit tyto č ásti:

Objekty jednotlivých list ů : Jejich po č et odpovídá po č tu pracovních list ů v sešitu.

Objekty jednotlivých list ů typu graf : P ř idáte-li do sešitu graf na samostatném listu.

Objekt ThisWorkbook : P ř edstavuje celý sešit.

Standardní moduly VBA ve složce Modules : Do t ěchto modulů nikdy neumisť ujte událostní procedury . Jejich hlavi č ky se ve standardních modulech ani nevyskytují, musely byste je tam ru č n ě dopisovat.

Moduly t ř íd : Události v modulech t ř íd si vysv ě tlíme ve t ř etí kapitole.

Formulá ř e : Podrobný výklad událostí u formulá řů je ve č tvrté kapitole.

Programování v Excelu 2000, 2002, 2003

Obrázek 1.1

R ů zné č ásti projektu Excelu.

Když myší poklepete na objekt listu nebo objekt ThisWorkbook, otev ř e se okno kódu daného objektu. V jeho horní č ásti jsou dva rozevírací seznamy. Levý seznam obsahuje ř ádek ( General) a ř ádky Worksheet, Chart nebo Workbook Č ást General znáte z klasických modul ů : slouží pro deklarování prom ě nných, které mají sv ů j rozsah platnosti na úrovni modulu, v praxi tu tedy budete deklarovat prom ě nné, jež budete používat ve více událostech, probíhajících v daném modulu.

Pozor na to, že prom ě nné, které deklarujete v modulu ThisWorkbook nebo v modulech list ů jako ve ř ejné ( Public), nejsou dostupné z žádného jiného modulu , tedy ani z jiného modulu listu nebo ze standardních modul ů ! Ve ř ejné prom ě nné musíte vždy deklarovat klí č ovým slovem Public ve standardním modulu !

Stejné pravidlo platí i pro všeobecné procedury – ty musí být umíst ě ny také ve standardním modulu. VBA vám sice umož ň uje vkládat je i do modul ů list ů nebo do modulu ThisWorkbook, ale takové procedury je možné spoušt ě t jen v rámci daného modulu!

Po krátké odbočce se vraťme zpět k oknu kódu pro moduly listů či modul ThisWorkbook

Vyberete-li v levém seznamu druhý řádek (Worksheet, Chart nebo Workbook), objeví se v pravém seznamu všechny události, které m ů žete pro list č i sešit využít.

Jakmile v pravém rozvíracího seznamu vyberete n ě jakou událost, vloží editor VBA do okna modulu hlavi č ku odpovídající (prázdné) procedury:

Private Sub Workbook_Activate()

End Sub

Veškerý kód zapsaný mezi tyto dva ř ádky bude proveden p ř i každém vyvolání dané události.

Obrázek 1.2

V pravém rozevíracím seznamu okna kódu vidíte události, které m ů žete zachytávat na úrovni listu č i sešitu.

N ě které událostní procedury obsahují v závorce za názvem procedury ješt ě seznam parametr ů . Ty jsou vestav ě ny a vy jejich deklarace v žádném p ř ípad ě nem ů žete m ě nit! Stejn ě tak nelze do seznamu parametr ů p ř idávat parametry nové.

Parametry událostí se vyskytují tam, kde jedna událost m ů že prob ě hnout pro více r ů zných objekt ů, nebo kde vám systém p ř edává ješt ě dodateč né údaje k dané události. Nap ř . u události pohybu myší nad objektem ( MouseMove) dostanete p ř edány sou ř adnice kurzoru (p ř i události stisknutí tla č ítka myši – MouseDown – zase údaj o tom, které tla č ítko bylo stisknuto). Dalším p ř íkladem je událost SheetActivate (je na úrovni sešitu, proto ji najdete v modulu ThisWorkbook) prob ě hne p ř i aktivaci n ě kterého listu v sešitu. Aby bylo možné ur č it, který list byl aktivován, je odkaz na aktivovaný list (tedy na objekt Worksheet nebo Chart, deklarovaný ovšem jako Object) p ř edán jako parametr procedury:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

End Sub

Deklarace parametru jako typ Object má v tomto p ř ípad ě ur č ité nep ř íjemné d ů sledky. Musíte totiž rozlišovat, zda byl aktivován list typu graf nebo pracovní list. Nap ř . následující kód prob ě hne v po ř ádku, bude-li aktivován pracovní list:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

MsgBox Sh.Name ' název listu

MsgBox Sh.Rows.Count ' počet řádků v listu

End Sub

P ř i aktivaci listu typu graf by pochopiteln ě došlo k chyb ě za b ě hu programu ve druhém ř ádku, protože list typu graf neobsahuje žádné ř ádky a tudíž odkaz na kolekci Rows není platný. Jak si m ů žete ov ěř it, který typ listu byl aktivován? Slouží k tomu operátor TypeOf, volaný nap ř . v bloku If … End If:

' zde bude operace, kterou je možné provádět jen pro pracovní listy

Private Sub Workbook_SheetActivate(ByVal Sh As Object) If TypeOf Sh Is Worksheet Then ElseIf TypeOf Sh Is Chart ' a zde operace pro listy typu graf

End If

End Sub

Excelu 2000, 2002, 2003

Programování

Programování v Excelu 2000, 2002, 2003

V n ě kterých událostních procedurách se objevuje logický parametr Cancel. Nap ř . deklarace událostní procedury BeforeClose v modulu ThisWorkbook vypadá takto:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Výchozí hodnota př edaného parametru Cancel je False . Jestliže však ve vlastním kódu procedury nastavíte tento parametr na True, nebude sešit uzav ř en. Ukázku možného využití p ř edstavuje zákaz uzav ř ení sešitu, zapomn ě l-li uživatel vytisknout denní p ř ehled:

Private Sub Workbook_BeforeClose(Cancel As Boolean) dotaz = "Vytisknul jste denní přehled změn?" odpoved = MsgBox(dotaz, vbYesNo, "Ukončení práce...") If odpoved = vbNo Then Cancel = True End Sub

Procedura Workbook_BeforeClose je spušt ě na po vydání p ř íkazu k uzav ř ení sešitu ( Soubor → Zav ř ít , Soubor → Konec apod.). Procedura nejdříve zobrazí okno hlášení a odpoví-li uživatel záporn ě klepnutím na tla č ítko Ne , bude parametr Cancel nastaven na hodnotu True. Uzav ř ení sešitu je poté zrušeno.

Jak zabránit výskytu událostí

V praxi se setkáte se situacemi, kdy máte pro ur č itou událost napsán kód, ale tento kód m ů že být provád ě n jen n ě kdy. Nap ř . p ř i otevírání sešitu nebude z n ě jakého d ů vodu žádoucí, aby byl proveden kód události Activate. P ř i každé další aktivaci daného sešitu však už kód proveden být musí.

Obdobn ě se m ů žete potkat s p ř ípady, kdy v kódu událostní procedury provedete n ě co, č ím danou událost znovu spustíte. Změníte-li např. v události listu Change hodnotu buňky v tomto listu (p ř íklad si ukážeme za chvíli), bude událost Change generována znovu. V takovém p ř ípad ě ovšem hrozí nekone č né zacyklení kódu.

Existuje dvojí možné ř ešení t ě chto situací. Bu ď zachytávání událostí zcela vypnete, nebo použijete logickou prom ě nnou, která ukon č í provád ě ní kódu. První ř ešení je „lepší“, protože událost v ů bec není vyvolána, ovšem jeho nevýhodou je fakt, že neprob ě hnou v ů bec žádné události. Logická prom ě nná nic nepotla č uje, jen bezprost ř edn ě ukon č í provád ě ní kódu v událostní procedu ř e.

Zachytávání událostí vypnete takto:

Debug.Print "Název_Procedury"

Vlastnost EnableEvents má logické hodnoty True/ False, za ř ádkem, který by vyvolal nežádoucí generování událostí, zase zachytávání zapnete.

Ukázka druhého př ístupu pomocí logické prom ěnné potlač í generování události Activate p ř i otev ř ení sešitu:

' proměnnou deklarujeme v modulu ThisWorkbook - jinde ji nepotřebujeme

Private lPotlaceni As Boolean

Private Sub Workbook_Activate() If lPotlaceni Then ' při otevření sešitu proběhne tato část lPotlaceni = False Exit Sub Else

' zde bude kód, ' který bude proveden při dalších aktivacích sešitu End If End Sub

Private Sub Workbook_Open()

lPotlaceni = True End Sub

1.2 Události sešitu

Tyto události probíhají v rámci konkrétního (jednoho) sešitu. Jejich událostní procedury jsou uloženy v modulu kódu pro objekt ThisWorkbook. Úplný seznam událostí je uveden dále, po n ě m se zam ěř íme na nejd ů ležit ě jší události, které se v praxi používají.

Jestliže pot ř ebujete zachytávat události pro libovolný otev ř ený sešit, musíte používat události na úrovni celé aplikace. Tato problematika je popsána v t ř etí kapitole této knihy, seznam událostí objektu Application najdete v záv ě ru této kapitoly.

P ř ehled událostí sešitu

Událost

Activate

AddinInstall

AddinUninstall

AfterXmlExport

AfterXmlImport

BeforeClose

Akce, která vyvolá událost

Otev ř ení sešitu a p ř echod do libovolného okna sešitu z jiného sešitu. Událost neprob ě hne p ř i vytvá ř ení nového okna sešitu ani při přechodu mezi dvěma okny téhož (v tom případě však proběhne událost WindowActivate).

Sešit je instalován do prost ř edí Excelu jako dopln ě k.

Odinstalování sešitu, který je nainstalován jako dopln ě k.

Uložení nebo export dat ze sešitu do datového souboru XML

Nové na č tení dat pomocí existujícího datového p ř ipojení, nebo import dat XML do sešitu.

Probíhá p ř ed uzav ř ením sešitu (= byl vydán p ř íkaz k uzav ř ení sešitu).

Programování v Excelu 2000, 2002, 2003

Událost

BeforePrint

BeforeSave

BeforeXmlExport

BeforeXmlImport

Deactivate

NewSheet

Open

PivotTableCloseConnection

PivotTableOpenConnection

Akce, která vyvolá událost

Probíhá p ř ed vytišt ě ním sešitu (nebo jeho č ásti).

Probíhá p ř ed uložením sešitu.

Prob ě hne p ř edtím, než Excel uloží nebo exportuje data ze sešitu do datového souboru XML

Prob ě hne p ř ed novým na č tením dat pomocí existujícího datového p ř ipojení, nebo po naimportování dat XML do sešitu.

P ř i deaktivaci sešitu (probíhá též p ř i uzavírání sešitu, ale až po události BeforeClose).

Vložení nového listu do sešitu. Odkaz na nový list je do události p ř edán jako parametr Sh

Otvírání sešitu. Po této události probíhá ješt ě událost Activate

Prob ě hne poté, co kontingen č ní tabulka uzav ř e p ř ipojení ke zdroji dat.

Prob ě hne poté, co kontingen č ní tabulka otev ř e p ř ipojení ke zdroji dat.

SheetActivate Aktivace libovolného listu v sešitu.

SheetBeforeDoubleClick

P ř i poklepání na libovolném listu. Událost probíhá p ř ed výchozí akcí pro poklepání.

SheetBeforeRightClick Po klepnutí pravým tlačítkem myši na libovolném listu. Událost probíhá p ř ed výchozí akcí pro klepnutí pravým tla č ítkem myši.

SheetCalculate P ř i p ř epo č ítání obsahu libovolného listu.

SheetChange Obsah libovolného sešitu je m ě n ě n uživatelem nebo aktualizací vn ě jšího propojení.

SheetDeactivate

P ř i deaktivaci libovolného listu v sešitu.

SheetFollowHyperlink Při klepnutí myší na libovolný hypertextový odkaz v libovolném listu.

SheetPivotTableUpdate Po aktualizaci listu s kontingen č ní tabulkou.

SheetSelectionChange Změna výběru na libovolném listu, s výjimkou listů typu graf.

Událost

Sync

WindowActivate

WindowDeactivate

WindowResize

Akce, která vyvolá událost

Synchronizace lokální kopie pracovního listu, která je sou č ástí pracovního prostoru dokumentu, s kopií na serveru.

Aktivace kteréhokoli okna sešitu.

Deaktivace kteréhokoli okna sešitu.

Zm ě na velikosti kteréhokoli okna sešitu.

P ř íklady využití základních událostí sešitu

Událost Open

Tato událost je využívána z ř ejm ě nej č ast ě ji. Zp ů soby jejího využití jsou skute č n ě bohaté:

Otev ř ení dalších pot ř ebných sešit ů , p ř ípadn ě dopl ň k ů

Nastavení vlastních panel ů nástroj ů č i nabídek, p ř ípadn ě klávesových zkratek.

P ř echod na ur č itý list.

Zobrazení úvodního formulá ř e, sloužícího jako uživatelské rozhraní.

Automatické provedení ur č itých výpo č t ů

Zápis údaj ů do protokolu, ve kterém je sledována č innost uživatele (ti zkušen ější z vás samoz ř ejm ě v ě dí, že k t ě mto ú č el ů m se dá využít i Deník v Outlooku nebo zvláštní aplikace …).

Nastavení vlastnosti listu ScrollArea (ta není ukládána spolu se sešitem).

Budete-li p ř i otevírání sešitu držet stisknutou klávesu S HIFT , není událostní procedura Workbook_Open spušt ě na (jde o jednu z možností, jak se bráni t makrovir ů m).

Ukážeme si jednoduchý kód, uložený v sešitu složeném z 13 list ů (prvních 12 list ů pro jednotlivé m ě síce a poslední list pro souhrnné údaje). P ř i otevírání sešitu je zkontrolováno datum a podle aktuálního m ě síce je aktivován p ř íslušný list.

' v deklarační části modulu ThisWorkbook příkaz Option Base 1 ' způsobí číslování prvků pole od jedničky, nikoli od nuly Option Base 1

Private Sub Workbook_Open()

Dim varMesice varMesice = Array("Leden", "Únor", "Březen", "Duben", _ "Květen", "Červen","Červenec", "Srpen", "Září", "Říjen", _ "Listopad", "Prosinec")

Worksheets(varMesice(Month(Date))).Activate End Sub

Názvy listů jsou pomocí funkce Array uloženy do pole varMesice a metoda Activate p ř i otev ř ení sešitu zobrazí požadovaný list.

Programování v Excelu 2000, 2002, 2003

Programování v Excelu 2000, 2002, 2003

Události Activate, Deactivate

Událost Activate je vyvolána p ř i aktivaci sešitu (jeho libovolného okna). Využití této události je op ě t pestré:

Úprava velikosti aktivovaného okna.

Zobrazení č i skrytí n ě které nabídky nebo panelu nástroj ů , která/ý je platná/ý jen pro daný sešit.

Aktualizace údaj ů ve stavovém ř ádku.

Ukázka kódu pro tuto událost obsahuje maximalizaci okna sešitu p ř i jeho aktivaci a zobrazení speciálního panelu nástroj ů

Private Sub Workbook_Activate()

ActiveWindow.WindowState = xlMaximized CommandBars("Statistika").Visible = True End Sub

Událost Deactivate prob ě hne p ř i p ř echodu do jiného sešitu, p ř i skrytí sešitu nebo p ř ed jeho uzav ř ením, tedy v p ř ípadech, kdy sešit p ř estává být aktivní. Její využití je obdobné jako u události Activate (zobrazení č i skrytí n ě které nabídky nebo panelu nástroj ů ).

Private Sub Workbook_Deactivate()

CommandBars("Statistika").Visible = False End Sub

Událost BeforeSave

Tato událost prob ě hne t ě sn ě p ř ed skute č ným fyzickým uložením sešitu. Pomocí parametru

SaveAsUI je možné v této události rozlišit, zda bude č i nebude zobrazeno dialogové okno Uložit jako (to se zobrazí v p ř ípadech, kdy sešit ješt ě nebyl uložen, byl otev ř en pouze pro č tení nebo když uživatel chce sešit uložit pod jiným názvem (p ř íkaz Soubor → Uložit jako ).

Parametr Cancel umož ň uje zrušit uložení souboru.

' kód, který se provede před zobrazením dialogového okna Uložit jako Private Sub Workbook_BeforeSave _ ByVal SaveAsUI As Boolean, Cancel As Boolean) If SaveAsUI Then End If End Sub

Událost BeforePrint

Je spušt ě na p ř ed vytišt ě ním dokumentu nebo zobrazením tiskového náhledu (poté, co uživatel zadal p ř íslušný př íkaz). V této události se vyskytuje již probraný parametr Cancel, takže tisk sešitu nebo jeho č ásti lze zrušit nastavením hodnoty tohoto parametru na True

Jednoduchá ukázka využití této procedury zobrazí okno hlášení, upozor ň ující uživatele, aby se p ř esv ě d č il, zda má založen správný typ papíru:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim odpoved As Integer odpoved = MsgBox("Tento sešit musí být tištěn na listy formátu A3." _ & " Máte v tiskárně tyto listy připraveny?", vbYesNo)

If odpoved = vbNo Then Cancel = True End Sub

P ř i testování událostních procedur BeforePrint používejte namísto fyzického tisku pouze náhled – ušet ř í vám to č as i peníze.

Událost BeforeClose

Poslední d ů ležitá událost sešitu prob ě hne p ř ed jeho uzav ř ením. V této události obvykle probíhají „uklízecí“ operace č ili obnova p ů vodního stavu. Jestliže jste p ř i otevírání ur č itého sešitu zobrazili speciální panel nástroj ů , je vhodné ho skrýt. Stejn ě tak je vhodné uzav ř ít všechny pomocné sešity apod.

P ř i „úklidu“ je t ř eba dát pozor na jeden zádrhel – událost BeforeClose probíhá ješt ě p ř ed zobrazením výzvy k uložení sešitu. Vydáte-li tedy p ř íkaz k uzav ř ení sešitu a zm ě ny v n ě m provedené nebyly uloženy, prob ě hne nejd ř íve událostní procedura BeforeClose a teprve poté se zobrazí známé dialogové okno:

Obrázek 1.3

Výzva k uložení provedených zm ě n.

Jestliže nyní klepnete na tla č ítko Zrušit , z ů stane sešit otev ř en, ale bude již „uklizeno“. Jedná se o problém, který byl již mnohokrát publikován. V události BeforeClose se uživatele dotážete vlastním oknem hlášení a podle jeho odpov ě di bu ď sešit uložíte nebo nastavíte vlastnost sešitu Saved na True (tím ho uzav ř ete bez uložení zm ě n), p ř ípadn ě proceduru p ř ed č asn ě ukon č íte pomocí parametru Cancel – sešit pak uzav ř en nebude.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Not Me.Saved Then

Msg = "Chcete uložit provedené změny?"

Odp = MsgBox(Msg, vbQuestion + vbYesNoCancel)

Select Case Odp

Case vbYes

Me.Save

Case vbNo

Me.Saved = True

Case vbCancel

Cancel = True

Exit Sub

End Select

End If ' zde bude kód pro "úklid"

End Sub

1.3 Události list ů

V další č ásti kapitoly se zam ěř íme na události objekt ů Worksheet. Každý list sešitu má sv ů j vlastní modul kódu, který najdete a otev ř ete v okn ě projektu.

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.