ms access a vba

33
MS ACCESS a VBA

Upload: darci

Post on 14-Jan-2016

83 views

Category:

Documents


0 download

DESCRIPTION

MS ACCESS a VBA. Makra. - PowerPoint PPT Presentation

TRANSCRIPT

MS ACCESS a VBA

Makra• lze použít pro otevření ( uzavření) tabulek, dotazů, formulářů, sestav, je možné poslat

sestavu přímo na tiskárnu, nebo ji uložit do souboru .rtf, excelovského .xls apod. Stejně tak lze data z tabulek, dotazů a formulářů posílat do různých výstupních souborů a pak je otevírat příslušnou aplikací.

• Pomocí maker dále lze: vykonávat všechny příkazy Accessu, provádět výběrové dotazy a výkonné dotazy, spouštět jiná makra, zastavit běžící makra, zrušit událost, která makra spustila, používat filtry, nastavovat hodnoty ovládacích prvků formuláře nebo sestavy, přesouvat okna, upravovat jejich velikost, přepínat mezi nimi, zobrazovat různá informující hlášení, přejmenovávat objekty v databázi, vytvářet jejich kopie, odstraňovat je, vytvořit vlastní řádky nabídek, zobrazit či skrýt panely nástrojů

• lze je spouštět vlastním tlačítkem na panelu nástrojů, z kódu Visual Basicu, připojují se k událostním vlastnostem všech databázových objektů, k příkazovým tlačítkům ve formuláři nebo sestavě.

Tvorba makra• Makra, tlačítko Nový. • Okno pro tvorbu návrhu má dva hlavní sloupce Akce a Komentář. Komentáře jsou

nepovinné, ale usnadňují pochopení a údržbu makra. Kromě toho je možné si zobrazit sloupec Název makra a Podmínka ( každá akce může být podmíněná). V dolní polovině okna jsou Argumenty akce a kontextová nápověda. Má-li zvolená akce nějaké argumenty, určíte je zde v dolní polovině okna.

• Akce se vybírají z rozbalovacího seznamu 49 akcí, které Access nabízí. Akce budou vykonány v tom pořadí, v jakém jsou uvedeny v řádcích pod sebou.

• Akce lze též kopírovat z jiného makra. Také je možné přetáhnout určitý objekt z okna databáze do řádku akcí( formulář nebo sestavu)

• makro Autoexec se spouští při každém otevření databáze, kde je uloženo, např. otevírá rovnou určitý formulář. Může provádět celou řadu akcí při spuštění databáze. Nespouští se v případě, že při otevírání databáze držíme stisknutou klávesu Shift.

Makro Autoexec s jednou akcí při spuštění databáze (otevírá formulář s názvem Fstudent).

makro způsobí výstup určené databázové tabulky do souboru formátu .xls a spustí aplikaci Excel s touto otevřenou tabulkou.

Příkazové tlačítko formuláře s připojeným makrem (událostní procedurou)

• Postup s použitím průvodce:•umístíte příkazové tlačítko na novém formuláři (viz Souprava nástrojů)vyvolá se automaticky Průvodce příkazovým tlačítkem (pokud je zapnut)•zde je možné zapsat akce, které se mají provést po stisku tlačítkanapř. Kategorie: AplikaceAkce:Spustit MS Word, (nebo MS Excel)•pokračujete tlačítkem Dalšízde vyberete obrázek na tlačítko – např. MS Excel•pokračujete tlačítkem Další zvolíte jméno pro tlačítko (implicitně je jméno PříkazX)

• Tímto postupem se vytvoří událostní procedura Private Sub Příkaz1_Click() Příkaz1 je implicitní název příkazového tlačítka

Postup bez použití průvodce:

• umístíte příkazové tlačítko na novém formuláři (napřed zvolíte toto tlačítko v Soupravě nástrojů)

• dvojklikem na tomto ovládacím prvku vyvoláte okno vlastností, a to událostní vlastnosti

• v řádku Při klepnutí zvolíte buď existující Makro nebo druhou možnost - Událostní procedura

• vpravo na tlačítku můžete také rovnou zvolit příslušného tvůrce maker, výrazů, nebo kódu, aniž byste předtím něco na řádek zapsali

• zapíšete kód, nebo v případě makra zvolíte název pro makro (makro se pak zařadí mezi ostatní makra, tj. bude přístupné z centrálního okna databáze

….

VBA (Visual Basic for Application)• VBA - společné programovací prostředí všech aplikací MS Office 97.• Je podobně jako SQL nesamostatným programovacím jazykem umisťovaným do

hostitelských aplikací MS Office. VBA je vhodný pro tvorbu maker.• hierarchie objektů specifických u dané aplikace.• VBA je založen na Visual Basicu, stavební jednotky programů VBA jsou

procedury, program je soubor procedur.Procedury se sdružují do modulů. Moduly mohou být obecné a formulářové.

• Modul tvoří obecné deklarace a procedury.• Deklarace na úrovni modulu jsou popisy proměnných, které lze pak používat všemi

procedurami modulu, jsou to proměnné lokální pro modul. • Programování ve VBA je událostmi řízené (event driven). kód se provádí jako

odezva na nějakou událost.

Programování VBA z uživatelského hlediska– grafické rozhraní pro komunikaci ( formulář nebo dialogové okno) jejich prostřednictvím makro předává zprávy uživateli a naopak uživatel řídí činnost makra – může zadávat při běhu makra parametry, které pak usměrňují činnost makra.

•Dále definice hodnot vlastností použitých objektů (většina těchto hodnot je programově dostupná i za běhu programu).

•Programování těl událostních procedur připojených k použitým objektům, především k tzv. ovládacím prvkům. Těla některých předdefinovaných událostních procedur mohou zůstat i prázdná, pak při výskytu události je tato událost buď ignorována nebo proběhne standardní ošetření.

•Kromě událostních procedur jsou i tzv. neudálostní (obecné) procedury, které se dají volat odkudkoliv z jiného místa programu.

•Jednoduché událostní procedury se dají generovat pomocí Průvodce ovládacími prvky. Automaticky vznikají také procedury, i neudálostní, při použití např. Průvodce databází.

2.1 Bloková struktura programů ve VBA

Modul 1

Procedura 1

Procedura 2

Procedura 3

Procedura 4

Modul 2

Procedura 5

Start VBA–

• prostředí VBA se zobrazí ve Wordu i v Excelu takto: Nástroje, Makro, Editor jazyka VBA (nebo ALT+F11).

• Po startu VBA se zobrazí okno Projektu• okno vlastností – v okně vlastností jsou zobrazeny pouze ty vlastnosti, které lze nastavit před spuštěním

procedury;• okno návrhu formuláře (prázdného), případně okno kódu;• souprava nástrojů s ovládacími prvky.• Při návrhu vlastních událostních procedur vidíme v okně kódu jen část kódu (subrutinu, funkci,

deklaraci), ne celý kód najednou, i když si další části připojené k jiným objektům můžeme zobrazit pomocí seznamu objektů nad zapsaným kódem vlevo nahoře.

• Vpravo je - seznam událostí aktuálního objektu, tučně jsou na seznamu uvedeny ty události, ke kterým je připojena procedura.

• Některé subrutiny, které vidíme při zobrazení kódu, jsou prázdné (jak už bylo řečeno), mají jen záhlaví a koncový příkaz bez těla procedury.

VB projekt–

• Projekt zahrnuje všechny soubory použité v procesu tvorby uživatelské aplikace. V prostředí jazyka Visual Basic lze projekt uložit samostatně s příponou .VBP. řada příkazů pro práci s projektem, např. File, New Project.

• Tyto příkazy chybí v prostředí VBA aplikací MS Office. Projekt je např. ve Wordu součástí dokumentu. Odlišná je i souprava nástrojů v obou těchto prostředích.

• Projekt je kolekce následujících modulů a souborů:• hlavní modul obsahuje deklarace a procedury• modul formuláře obsahuje grafické prvky (ovládací prvky) aplikace s připojenými

událostními procedurami• obecný (standardní) modul

– obsahuje obecné instrukce netýkající se grafických objektů na obrazovce, spouští se podle potřeby vyvoláním v jiné obecné nebo událostní proceduře

• modul třídy obsahuje charakteristiky třídy, včetně vlastností a metod.

• V modulu tříd jsou vytvářené nové objekty.

• zdrojové soubory na jednom místě se shromáždí všechny texty a bitmapy, které vytvářená aplikace používá

Objekty• Objekty jsou základní stavební kameny VB. Vše, co ve Visual Basicu děláme, je

modifikace objektů.Objekt ve Wordu reprezentuje např. jednotlivé prvky Wordu – dokument, odstavec, záložka, znak,……

• Kolekce objektů je objekt, který obsahuje další objekty stejného typu, např. kolekce Documents (otevřené dokumenty Wordu), Paragraphs (odstavce dokumentu).

• Vlastnost je atribut nebo nastavení objektu, např. Barva objektu Textové pole. Řadu vlastností objektů lze modifikovat programem. Některé vlastnosti lze pouze číst.

• Vlastnosti mohou být i nehmotné, např. Typ souboru vět u Data Control, nebo kontextová nápověda textového pole.

• Příklad na vlastnost objektu Dokument: Název (Name) dokumentu

• Některé vlastnosti jsou dostupné kdykoliv, některé pouze v době návrhu aplikace, některé

pouze při běhu aplikace.

Metody• Metoda je příkaz (funkce), který objekt podporuje, umí ho vykonat.• Aplikace se dá také ovládat pomocí metod.

– I metodám lze předávat argumenty (jako funkcím), upřesňuje se jimi činnost metod.• Nyní jde o to, co je vlastnost a co by mohlo být považováno za metodu? S obojím lze

manipulovat kódem.• Metoda je svázána s událostí, jako např. metoda Aktualizace věty objektu Soubor

vět je svázána s kliknutím. Metoda způsobí, že se něco stane, např. zrušení věty v databázi. Je to procedura, která operuje na objektu.

• Vlastnost reprezentuje nějaký atribut objektu (nebo třídy).

• Uvažujme o metodách jako slovesech a vlastnostech jako adjektivech (týká se převážně anglických názvů metod a vlastností).

Události• Událost je něco, co se stane v aplikaci. Nejčastěji jde o kliknutí, (též klepnutí,

Click), případně dvojklik (poklepání, DblClick). Chceme-li, aby program reagoval už při stisku myši, je to událost MouseDown (ne Click). Každý objekt má svůj soubor událostí, některé události jsou společné všem objektům. Události mohou být odstartovány uživatelem (kliknutí), vlastním kódem, ale i určitou akcí programu, jako je otevření nebo zavření souboru.

• Příklady událostí:

• Change častá událost vyskytující se ve spojení s textovým polem, kombinovaným seznamem, popisem.

– DragDrop nastává při dokončení operace přesunu určitého objektu myší jinam.

– Události týkající se formuláře:• Initialize tato událost nastane pouze jednou v případě formuláře při jeho vytváření,

podobně jako Terminate při jeho zrušení.– Load nastává při natažení formuláře do paměti. (opak je UnLoad)

• Activate nastává, je-li formulář aktivní (je-li tzv. zaměřen – Focus), hned za ní následuje GotFocus.

• Podobně LostFocus a Deactivate.• Výskyt události je signál pro spuštění událostní procedury.• Událostní procedury jsou lokální, tzn. nelze je zavolat z ostatních modulů.• Objekty mají přiřazen soubor událostí, které se mohou ve spojení s objektem

vyskytnout (viz kombinovaný seznam - vpravo v okně modulu) a na které umí reagovat. Říkáme, že objekt příslušné události podporuje. Události, ke kterým je připojena vlastní událostní procedura jsou na seznamu uvedeny tučně.

• Pomocné nástroje při tvorbě událostních procedur:

• Automatický seznam členů – objeví se jako nápověda, když napíšete tečku za objektem (přesněji za jménem objektu). Je to seznam vlastností a metod objektu. Jeho automatické nabízení zajistíme v prostředí VBA přes nabídku Nástroje, Možnosti, karta Editor.

• Prohlížeč objektů celá hierachie objektů příslušné aplikace včetně jejich metod a vlastností. Zobrazí se

stejnojmenou ikonou nebo přes nabídku Zobrazit.

Tvorba kódu– Procedury

• Výhody procedur spočívají v tom: že se eliminují opakující se řádky kódu v programu je lepší čitelnost programu mají opakované použití, např. v jiných projektech představují rozšíření jazyka (nemá-li jazyk ekvivalentní příkaz pro řešenou úlohu)• Procedury jsou uvozeny slovem SUB (subroutine), nebo Function, pak následuje název

procedury (funkce), pak začíná její popis (vlastní příkazy na samostatných řádcích). Procedury končí příkazem End Sub (End Function).

• Procedury mohou být podobně jako proměnné lokální (Private, synonymum soukromé) nebo globální (Public, synonymum veřejné). Lokální procedury přísluší k modulu, kde byly vytvořeny, jinde je nelze zavolat. Příkladem jsou událostní procedury ve formulářovém modulu.

• Globální procedury (standardní)je možné volat z kteréhokoliv modulu. Implicitní platnost všech procedur je globální (pokud neuvedete v popisu procedury klíčové slovo Private). Globální procedury nejsou vázány na konkrétní objekty, které jste vytvořili ve formulářovém modulu pomocí ovládacích prvků.

• Procedury jsou dvojího typu: SUB (nevrací hodnotu do volajícího programu) Function (vrací hodnotu prostřednictvím svého jména při

vyvolání)• Spouští se vyvoláním - v jiné obecné nebo událostní proceduře. • Je třeba rozlišovat popis procedury (vlastní příkazy) a její použití

(volání), kdy se tyto příkazy provedou

• Příklad 1: přehození dvou sousedních písmen (zaznamená se jako procedura Sub Prehodit).

– Sled kroků, které se budou zaznamenávat (pomocí klávesnice): přesun kurzoru o jeden znak doleva (šipka) přesun kurzoru o další znak doleva vybrat znak za kurzorem (Shift + šipka doprava) přesunout znak do schránky (CTRL + X) přesun kurzoru o jeden znak doprava vložit znak ze schránky (CTRL + V)

• Výsledek záznamu makra ve VBA:• Sub Prehodit()• Selection.MoveLeft Unit:=wdCharacter, Count:=1• Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend• Selection.Cut• Selection.MoveRight Unit:=wdCharacter, Count:=1• Selection.Paste• End Sub

– Vysvětlení příkazů:• Příkaz Sub uvozuje subrutinu Prehodit, procedura má prázdný seznam argumentů, příkaz End Sub ji

ukončuje.• Selection.MoveLeft Unit:=wdCharacter, Count:=1• Přesun kurzoru o jeden znak doleva.• Selection (výběr) je objekt, přesněji třída objektů Word.Selection, reprezentuje pozici kurzoru• Selection.MoveLeft metoda objektu Selection (funkce)• Syntaxe funkce MoveLeft:• Function MoveLeft([Unit], [Count], [Extend]) As Long• v závorce jsou volitelné argumenty funkce• As Long je deklarace typu výsledku funkce – celé číslo, 4 byty• Unit je pojmenovaný argument metody, znamená jednotku, tedy o kolik jednotek se bude

posouvat kurzor, v našem případě o kolik znaků,• přiřazuje se mu zde konstanta wdCharacter, tj. znak

• Unit:=wdCharacter– Count další pojmenovaný argument (nebo parametr) říká, že kurzor se má posunout

o jednu jednotku Count := 1• Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend• Přesun kurzoru doleva o jeden znak s výběrem znaku.• Navíc je tu další argument Extend, kterému se přiřazuje systémová konstanta wdExtend, což

znamená přesunout kurzor a vybrat text.• Kdybychom chtěli kurzor pouze přesunout, přiřadila by se hodnota wdMove.• Konstanty reprezentují určitou neměnnou hodnotu (viz dále).

– Pokud konstanta začíná písmeny wd, je to syst. konstanta Wordu.• Selection.Cut metoda vyjmutí znaku do schránky• Selection.MoveRight Unit:=wdCharacter, Count:=1 přesun kurzoru o znak doprava• Selection.Paste vložení znaku ze schránky

Proměnné–

• Proměnná je dočasné paměťové místo pro číslo, text, nebo objekt. jsou vytvářeny a rušeny a po skončení prog. neudržují nadále hodnoty.

• Proměnné na úrovni procedur jsou vytvářeny (deklarovány) příkazem DIM umístěném přímo v proceduře, kde budou používány.

• Hodnota takové proměnné není přístupná zvenčí (z jiné procedury). Skončí-li procedura (End Sub, End Function) , proměnná je zrušená a paměť uvolněna.

• Proměnné na úrovni modulů jsou vytvářeny příkazem Private (nebo Dim) ve společné deklarační sekci formuláře nebo obecného modulu. Hodnota proměnné na úrovni modulu je přístupná každé proceduře modulu. Paměť přidělená takové proměnné není uvolněna, dokud není modul Unloaded (dokud je v paměti).

• Globální (veřejné) proměnné jsou vytvářeny příkazem Public ve společné deklarační sekci formuláře nebo obecného modulu. Hodnota globální proměnné je přístupná každé proceduře

každého formuláře nebo modulu. Paměť není uvolněna, dokud není program zavřen.

Konstanty

• Pojmenované konstanty usnadňují dodatečné úpravy programu. Stačí podle potřeby změnit pouze hodnotu konstanty v deklaraci. Při práci programu se hodnota konstanty nemění, i když je konstanta nazvána obecně, podobně jako proměnná. Existuje řada systémových konstant (pro přístup k určitým datům), ale lze deklarovat i konstanty vlastní. Systémové konstanty Wordu začínají písmeny wd - wdnázevkonstanty.

– Při deklaraci každé konstanty je třeba použít samostatnou klauzuli As typ. Pokud vynecháme tuto deklaraci datového typu, volí se automaticky typ, který je pro daný výraz nejvhodnější.

• Konstanty lze používat všude ve výrazech

Programové konstrukce VBA– Příkazy cyklu

• Syntaxe cyklu řízeného podmínkou – Do Loop:

• Do [{While | Until} podmínka]• [příkazy]• [Exit Do]• [příkazy]• Loop

– Jedno ze dvou slov ve složených závorkách – While nebo Until - je nutné použít v souvislosti s podmínkou.

• While znamená, že dokud platí uvedená podmínka, následující příkazy cyklu se opakují.

• Until znamená, že cyklus se opakuje když není splněna podmínka (vyhodnocená podmínka má hodnotu False). Pravdivá podmínka naopak znamená opuštění cyklu.

• Uvádět podmínku není povinné, opuštění cyklu pak proběhne příkazem Exit Do. Příkaz Exit Do může být použit na libovolném místě uvnitř struktury Do...Loop, není omezen ani počet použití tohoto příkazu.

– Syntaxe cyklu s určitým počtem opakování, řízeného proměnnou – For Next:

• For počítadlo = začátek To konec [Step krok]

• [příkazy]

• [Exit For]

• [příkazy]

• Next [počítadlo]

• Začátek je počáteční hodnota řídící proměnné (počitadla), konec reprezentuje koncovou hodnotu, pro kterou se příkazy cyklu ještě provádějí.

• Hodnotu počitadla lze měnit i pomocí příkazů uvnitř cyklu.

• Hodnoty parametru krok mohou být jak kladné, tak i záporné.

• Příklad:

• For K = 100 To 0 step –2

• Debug.Print K

• Next K

Podmíněné příkazy• Syntaxe příkazu If – Then – Else

• If podmínka Then příkazy1 [Else příkazy2]

• Příkaz musí být celý na jednom logickém řádku, i tehdy, je-li více příkazů1 nebo příkazů2, oddělují se pak dvojtečkou.

• Podmínka za If je logický výraz nebo výraz, který se dotazuje na typ objektu, ve tvaru:

• TypeOf jmeno_objektu Is typ_objektu.•

• Příklad:• If A>B Then A=10 Else A=100

• Podmínkový blok If – Then – Else – End If – syntaxe:

• If podmínka1 Then• [příkazy1]• [ElseIf podmínka2 Then• [příkazy2]• ElseIf podmínka3 Then• [příkazy3]• ……………………………]• [Else• jiné příkazy]• End If

• Následující příkaz umožňuje vícenásobné větvení v programu.• Příkaz Select Case – syntaxe:• Select Case testovaný výraz• Case výraz1• příkazy1• [Case výraz2• příkazy2]• ………………..• [Case Else• jiné příkazy]• End Select• Testovaný výraz je číselný nebo řetězcový výraz a na rozdíl od podmínkového bloku IF je to jediný

výraz, který se v příkazu testuje.• Výraz1, výraz2 a eventuelní další výrazy se porovnávají s testovaným výrazem.