3. Objekty kolem nás
• Objekt je „černá skříňka“ jenž zapouzdřuje složité interní
procesy a stavy přičemž poskytuje vnějšímu okolí
Rozhraní pro ovládání a komunikaci s objektem.
• Mobilní telefon, Automobil, Počítač – prakticky vše
• Rozhraní objektu je vnější schránka objektu, přes kterou
se objekt ovládá. Rozhraní tvoří tři skupiny prvků:
Vlastnosti, Metody a Události.
• Vlastnosti charakterizují objekt a jeho stav. Některé se
dají volně měnit, jiné jsou závislé na jiných vlastnostech
nebo stavu objektu, další jsou neměnné – dané výrobou.
• výška, hmotnost, paměť, melodie vyzvánění, barva, síla
signálu, stav baterie, tapeta, spotřeba, motor atd.
• Metody jsou funkce kterými se objekt ovládá.
• tlačítka: zapnout, vypnout, přijmout hovor, odmítnut hovor,
vytočit číslo, plyn, brzda, volant atd.
• Události jsou činnosti vyvolané objektem za účelem
upozornit na změnu stavu objektu.
• Vyzvánění (někdo volá, budík), zvukový nebo visuální signál
– upozornění (přišla SMS, naplánovaná schůzka , nebezpečí
námrazy, ponechána rozsvícená světla) atd.
4. Základy objektové programování ve VB
• Objekt je instance třídy. Zabírá paměť, má konkrétní vlastnosti,
nachází se v určitém stavu (je živý).
• Aplikace MS Excel, Sešit, List, Buňka, Graf atd.
• Třída je objektový datový typ, který kompletně definuje objekt,
jeho vnitřní strukturu, procesy, funkce a také rozhraní.
• Objektová proměnná je proměnná typu Třídy objektu, která může
mít asociovaný libovolný objekt dané třídy. Ve své podstatě je
obálkou objektu poskytující rozhraní. Prázdná (bez asociace)
proměnná má hodnotu Nothing. Objekt může být asociovaný s
více proměnnými, avšak minimálně s jednou. Objekt ihned zaniká
ztratí-li všechny asociace.
• Syntaxe: Založení proměnné
Dim ObjektovaPromenna As TridaObjektu
• Syntaxe: Asociace proměnné s objektem
Set ObjektovaPromenna = AsociovanaObjektovaPromenna
Set ObjektovaPromenna = New TridaObjektu
• Zrušení asociace proměnné s objektem (je-li poslední objekt zanikne)
Set ObjektovaPromenna = Nothing
5. Vlastnosti (Properties)
• Vlastnost zpřístupňuje členské proměnné objektu. Používají
se stejně jako běžné proměnné, avšak mohou být omezeny
pouze pro čtení nebo pouze pro zápis. Vlastnost může být
libovolného datového typu včetně jiné třídy objektu.
• Syntaxe: Přečtení hodnoty vlastnosti
promenna = ObjektovaPromenna.Vlastnost
• Syntaxe: Přiřazení hodnoty vlastnosti
ObjektovaPromenna.Vlastnost = hodnota
6. Metody (Methods)
• Metody jsou členské subrutiny nebo funkce objektu, kterými se
provádění, případně zahajují nebo ukončují požadované činnosti
objektu. Interně jsou tvořeny subrutinami nebo funkcemi. Metody
mohou být procedurálního nebo funkcionálního typu a mohou mít
argumenty, kterými se upřesňují požadované činnosti. Obvykle
jsou tyto argumenty nepovinné neboť požadovaná data jsou
převážně součástí objektu ve formě členských proměnných.
• Syntaxe: Volání procedurální metody
ObjektovaPromenna.Metoda
ObjektovaPromenna.Metoda Argument1, Argument2
• Syntaxe: Volání funkcionální metody
promenna = ObjektovaPromenna.Metoda()
promenna = ObjektovaPromenna.Metoda(Arg1, Arg2)
7. Události (Events)
• Události jsou členské procedury umožňující vyvolávat externí (nečlenské)
subrutiny nebo funkce (událostní rutiny) na specifické změny stavu
objektu. V podstatě jde o způsob, jak může objekt nezávisle informovat
nadřízený kód o nastalé situaci. Počet podporovaných událostí je konečný
a je dán definicí třídy objektu. Mnoho objektů události vůbec nepodporuje.
Také nadřízený kód nemusí všechny události využívat, nebo může využívat
pouze některé.
• Událostní rutiny (procedury) vytváří programátor užívající objekt. Rutiny
musí mít přesně definované názvy a argumenty podle definice třídy.
Umístění musí být v modulu třídy (nemohou být ve standardním modulu),
nebo v modulu objektu (pouze u vizuálních objektů: list, sešit, formulář).
• Název událostní rutiny je tvořen názvem objektové proměnné, podtržítkem
a názvem události s argumenty. Nevizuální objektová proměnná musí být
deklarovaná na úrovni modulu s klíčovým slovem WithEvents. Pro
generování názvu lze použít rozbalovací seznamy modulu.
Private WithEvents ObjPromenna As TridaObjektu
Sub ObjPromenna_Udalost(Arg as Typ)
End Sub
Function ObjPromenna_Udalost(Arg as Typ) As Typ
End Function
9. Události listu a sešitu dokumentu
MS Excelu
• Události sešitu.
– Activate()
– AddinInstall()
– AddinUninstall()
– AfterXmlExport(ByVal Map As XmlMap, ByVal Url As String, ByVal Result As XlXmlExportResult)
– BeforeClose(Cancel As Boolean)
– BeforePrint(Cancel As Boolean)
– BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
– BeforeXmlExport(ByVal Map As XmlMap, ByVal Url As String, Cancel As Boolean)
– BeforeXmlImport(ByVal Map As XmlMap, ByVal Url As String, ByVal IsRefresh, Cancel)
– Deactivate()
– NewSheet(ByVal Sh As Object)
– Open()
– PivotTableCloseConnection(ByVal Target As PivotTable)
– PivotTableOpenConnection(ByVal Target As PivotTable)
– RowsetComplete(ByVal Description As String, ByVal Sheet As String, ByVal Success As Boolean)
– SheetActivate(ByVal Sh As Object)
– SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
– SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
– SheetCalculate(ByVal Sh As Object)
– SheetDeactivate(ByVal Sh As Object)
– SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
– SheetChange(ByVal Sh As Object, ByVal Target As Range)
– SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
– SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
– Sync(ByVal SyncEventType As Office.MsoSyncEventType)
– WindowActivate(ByVal Wn As Window)
– WindowDeactivate(ByVal Wn As Window)
– WindowResize(ByVal Wn As Window)
10. Hierarchie objektů
• Složitější reálné objekty jsou
často tvořeny sadou
podřízených objektů.
• Například objekt auto má
podřízený objekt motor,
převodovku, podvozek,
palubovku atd. Podvozek
má kolekci objektů poloos,
kol, ložisek atd.
• U softwarových objektů
tomu není jinak. Podřízené
objekty jsou přístupné přes
vlastnosti.
• Například objekt
Application (MS Excel) má
podřízenou kolekci
WorkBooks (sešity)
složenou z objektů
WorkBook (Sešit), který
obsahuje kolekci
WorkSheets (listy).
Application.Workbooks("Soubor.xlsx").Worksheets("List1").Name
11. Kolekce - pokračování
• Pod pojmem kolekce v programovacím jazyce rozumíme objekt,
reprezentující skupinu shodných nebo příbuzných objektů. Prvek
(element, člen) kolekce je právě jeden dílčí objekt kolekce.
• Typické vlastnosti a metody kolekcí
– Count – Pouze pro čtení - vrací počet elementů v kolekci
– Add(…) – Přidá nový prvek do kolekce
– Remove(…) – Odstraní prvek z kolekce
• Příklady kolekcí v MS Excelu:
– Workbooks (elementy: Workbook - Otevřené soubory)
– WorkSheets (elementy: WorkSheet – Listy souboru)
– Cells (elementy: Range – buňky listu)
– Selection (elementy: Range – uživatelem vybrané buňky)
• Přístup k objektu kolekce:
‒ Pomocí indexu (pořadového čísla), obvykle jsou objekty seřazeny
podle pořadí vzniku. Index nemá stálou vazbu na objekt.
Kolekce(Index)
WorkBooks(1). WorkSheets(3)
‒ Pomocí klíče (názvu), klíč je v kolekci jedinečný. Objekt se vybere
nezávisle na jeho pořadí. Není-li objekt nalezen vzniká výjimka.
Kolekce(Klic)
Workbooks("Sešit.xls").WorkSheets("List1")
13. Výjimky
• Výjimky jsou chyby, které vznikají za běhu programu obvykle důsledkem
neplatných hodnot zpracovávaných dat.
• Způsoby ošetřování
• Předcházením vzniku. Snažíme se vzniku výjimek vyvarovat kontrolou
dat před provedením požadovaných operací. Náročné, mnohdy nelze
všechny chyby odhadnout. Často nezpřehledňuje kód.
• Zachycením vzniku. Ošetřujeme až vznik výjimky.
• Zapnutí a vypnutí zachytávání výjimek
On Error Goto Navesti – Vznikne-li skočí na návěstí
On Error Resume Next – Pokračuje následujícím příkazem
On Error Goto 0 – Ukončí zachytávaní
• Návěstí: je identifikátor na samostatném řádku v rámci jednoho algoritmu
ukončený dvojtečkou:
Navesti:
Při skoku na návěstí se začnou provádět příkazy uvedené za návěstím. Je
možné odskakovat oběma směry. Pro skok na návěstí se používá příkaz GoTo .
• Ošetřující kód výjimky je ohraničená část programu, ve které se provádí
operace vzniklé při vzniku výjimky. Informaci o výjimce jsou k dispozici u
objektu ERR.
ERR.Number – číslo chyby; ERR.Description – popis chyby
• Resume – návrat z ošetřujícího kódu zpět na příkaz, který výjimku způsobil
s odstraněním záznamu o chybě. Pozor na zacyklení!
• Resume Next – návrat na následující příkaz kódu s odstraněním záznamu
• Resume Navesti – skok na návěstí s odstraněním záznamu o chybě
14. Příklad ošetření výjimek
Sub Main()
Dim Cislo As Integer 'Číselná hodnota pro výpočet faktoriálu
Dim i As Integer 'Iterační pomocná proměnná
On Error GoTo CHYBA 'Zapnutí ošetřování výjimek
'Nacteni hodnoty pro výpočet faktoriálu
Cislo = InputBox("Zadej číslo:", "Výpočet Faktoriálu")
'Výpis výsledku - je rekurzivně volaná funkce Faktorial
MsgBox Cislo & "! = " & Faktorial(Cislo), , " Výpočet Faktoriálu"
Exit Sub 'Tento příkaz se vykoná pouze když nevznikla žádná výjimka
CHYBA:
Select Case Err.Number
Case 6 'Přetečení
MsgBox "Výsledná hodnota je příliš velká, " & _
"než aby jej program mohl vyčíslit!", _
vbExclamation, "Program nemohl výpočet uskutečnit..."
Case 13 'Nesoulad typů
MsgBox "Nebyla zadaná platná číselná hodnota!" & vbNewLine & vbNewLine & _
"Opakuj zadání...", vbExclamation, "Chyba zadání..."
Resume
Case Else 'Neznámá chyba
MsgBox "Neošetřená chyba č. " & Err.Number & vbCrLf & _
Err.Description, vbExclamation, "Chyba během provádění programu"
End Select
End Sub
16. Formuláře
• Formuláře jsou grafické objekty, které
zajišťují vizuální interakci s uživatelem.
• Třída formuláře se vytváří visuálně v
prostředí jazyka Visual Basic for
Application a programově se doplňují
událostní rutiny.
• Vložíme formulář – Nejlépe přes
kontextové menu okna Project
• Přidáme ovládací prvky. Myší zvolíme
prvek v panelu „Toolbox“ a tažením
vložíme (nakreslíme) ovládací prvek na
formulář.
• Doplníme událostní rutiny. Postup je
shodný jako u událostí listů nebo sešitu.
• Formuláře se spouštějí nejlépe přes
subrutinu (makro) metodou Show()
– Modálně
Formular.Show vbModal
– Modálně
Formular.Show vbModeless
– Není-li způsob uveden, je pak závislý na
vlastnosti ShowModal (Ttrue/False)
19. Osobní sešit maker
• Osobní sešit maker je sešit, který (je-
li vytvořen) MS Excel automaticky
otevírá ihned po spuštění jako skrytý.
• Používá se jako úložiště maker
používaných nezávisle na aktuálně
otevřeném sešitu. MS Excel
automaticky povoluje makra.
• Vždy je pojmenován jako
Personal.xlsb (do verze 2003
personal.xls) a musí být umístěn do
složky profilu uživatele
AppDataRoamingMicrosoftExcel
XLStart
• Nejsnadněji se vytvoří metodou
záznamu s výběrem Uložit makro do:
„Osobní sešit maker“
• Každý uživatel má jeden osobní sešit
maker, ale je možné do téže složky
přidat další XLSM soubory, které se
budou automaticky otvírat.
20. Doplňky
• Doplňky jsou připojitelné programové moduly, které rozšiřují
funkcionalitu aplikace. Lze je vytvářet:
1. v prostředí MS Excelu –v podstatě jde o soubory MS Excelu,
2. v profesionálním programovacím jazyce – obvykle se instalují
jako samostatné aplikace.
• Vytvoření doplňku
1. V prostředí MS Excelu vytvoříme dokument
s požadovanými makry, funkcemi a dialogy.
2. Přidáme klávesové zkratky, případně pro
daný dokument přidáme zástupce v panelu
Rychlý přístup.
3. Uložíme soubor „jako“ doplněk aplikace xlam.
• Připojení doplňku
1. Karta „Soubor“ nabídka „Možnosti“ a v dialogu „Možnosti
aplikace Excel“ položka „Doplňky“. V seznamu „Spravovat“
vybrat položku „Doplňky aplikace Excel“ a tlačítko „Přejít…“
2. V dialogu „Doplňky“ procházením vybereme soubor,
nebo (je-li doplněk již v seznamu) zatrhneme položku a
potvrdíme „OK“.
21. ??? kontrolní otázky ???
• Co je to Rozhranní objektu?
• Co znamená chyba Can't assign to read-only
property.
• Jak se edituje hodnota vlastnosti a jak se volá
metoda?
• Jaký je rozdíl mezi událostí a událostní rutinou?
• Kde se zapisují událostní rutiny?
• Jak lze přistupovat k prvkům kolekcí?
• Co je to návěstí a jak se používá?
• Jak lze ošetřit vznik výjimky?
• K čemu slouží soubor Personal.XLSB?
• Jak vytvořit doplněk XLAM?
22. 352 - Katedra automatizační techniky a řízení
Ing. David Fojtík, Ph.D.
A922, kl. 4193