Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

2. diel - Prvá objektová aplikácia vo VBA - Hello object world

V minulej lekcii, Úvod do objektovo orientovaného programovania vo VBA , sme si uviedli úvod do objektovo orientovaného programovania vo VBA, vysvetlili sme si historické okolnosti vzniku OOP a tiež pojmy trieda, atribút, metóda a zapuzdrenie.

Už vieme, že objekty majú atribúty a metódy. Tiež vieme, že na vytvorenie objektu vytvoríme najprv triedu. Tá je vzorom, podľa ktorého následne tvoríme jej inštancie.

V dnešnej lekcii si naprogramujeme jednoduchý program Hello object world, ktorý nás bude zdraviť. Objektovo!

Vytvorenie triedy

Najskôr si teda vytvoríme triedny modul. Trieda bude veľmi jednoduchá, aby sme najprv pochopili základy.

Pomocou klávesovej skratky Alt + F11 si otvoríme naše programovacie IDE a necháme si zobraziť Project Explorer (Prieskumník projektu), pokiaľ sa nám teda už nezobrazuje. Zobraziť ho môžeme buď pomocou klávesovej skratky Ctrl + R, alebo z ponuky View -> Project Explorer. Tu sa nám zobrazujú jednotlivé listy Excelu a modul ThisWorkbook.

Teraz pravým tlačidlom myši klikneme kdekoľvek do okna Project Explorer az roletovej ponuky, ktorá sa objaví, zvolíme Insert (vložiť) a Class Module.

Po vložení sa ešte uistíme, že máme otvorené okno Properties Window (Okno vlastností). Toho docielime klávesom F4, alebo z ponuky View -> Properties Window.

Naša novo vytvorená trieda bola implicitne pomenovaná ako Class1, čo sa nám ale veľmi nepáči. Ako je už tradícia v tutoriáloch na stránkach ITnetwork, vytvárame si objekt, ktorý nás aj objektovo pozdraví. Povedzme, že by sa trieda mohla volať Clovek. Triedy pomenovávame bez použitia diakritiky pomocou takzvanej ťavie notácie (Camel Case), kedy trieda začína na veľké písmeno. Ak sa jej názov pozostáva z viacerých slov, píšeme ich dohromady a každé nové slovo opäť s veľkým písmenom.

Teraz si triedu premenujeme z Class1 na Zdravic. To je možné vykonať iba v Properties Window, kde klikneme do okienka s popiskou (Name) (Názov), respektíve do okienka s názvom našej triedy, ktorá sa ešte stále volá Class1. Premenujeme ju na Zdravic a odentrujeme:

Vytváranie novej triedy vo VBA - Objektovo orientované programovanie (OOP) vo VBA

Názov triedy píšeme vždy ťavou notáciou bez medzier a na rozdiel od premenných má každé slovo veľké prvé písmeno, teda aj prvé. Názov je samozrejme aj bez diakritiky. Tú v programe používame maximálne vo vnútri textových reťazcov, ale nie v identifikátoroch.

Podľa tejto triedy neskôr vytvoríme objekt zdravic, ktorý nás bude vedieť pozdraviť. Vidíme, že sa na program už pozeráme úplne inak. Za každú akciu je zodpovedný nejaký objekt a nestačí iba niečo "nabúšiť" do jednej metódy v module alebo v liste. V našom prípade nám to môže prísť zbytočné, ale pri zložitejších aplikáciách si to budeme pochvaľovať:)

Naše IDE nám v triede nič nevygenerovalo. V lepšom prípade nám do triedy iba vložilo Option Explicit, ktorého funkciu už dobre poznáme.

Teraz si do triedy Zdravic pridáme metódu Pozdrav(), ktorá bude verejne viditeľná a nebude mať žiadnu návratovú hodnotu ani atribúty.

Deklarácia metódy vo VBA je teda nasledujúca:

[modifikátor prístupu] Sub [MenoMetódy]

Pred metódou bude tzv. modifikátor prístupu, v našom prípade Public (verejný). Keby sme modifikátor vynechali, VBA by metódu napriek tomu chápalo ako Public (verejnú). Odporúčam ale minimálne pre prehľadnosť modifikátory vždy uvádzať. Ak by sme chceli s metódou pracovať iba vo vnútri triedy a nechceli by sme, aby bola viditeľná zvonku, použili by sme modifikátor Private (neverejný). To ale nie je teraz náš prípad.

Ďalej bude nasledovať samotný názov metódy. Metódy píšeme rovnako ako triedy ťavej notácií s veľkým počiatočným písmenom. Prvé písmeno názvu je však na rozdiel od premenných veľké! Ako deklarovať metódy s parametrami si ukážeme za chvíľu.

Do tela metódy zapíšeme kód pre výpis na konzole.

Naša trieda bude teraz vyzerať takto:

Option Explicit

Public Sub Pozdrav()
    Debug.Print "Hello object world!"
End Sub

Tu sme zatiaľ skončili. Ešte nám ale zostáva inštanciu našej novo vytvorenej triedy Zdravic nadeklarovať a nadefinovať.

Do nášho VBAProjectu si teda ešte vložíme nový štandardný modul a pomenujeme si ho napríklad ako Main. Do tohto modulu si potom vložíme súkromnú metódu, ktorú si opäť nejako pomenujeme, napríklad aj ako Main().

Teraz si v tele tejto metódy Main() vytvoríme inštanciu triedy Zdravic. Bude to teda ten objekt zdravic, s ktorým budeme pracovať. Objekty sa ukladajú do premenných. Názov triedy slúži ako dátový typ. Inštancia má spravidla názov triedy, len má prvé písmeno malé. Deklarujme si premennú a následne v nej založme novú inštanciu triedy Zdravic:

Dim Zdravic As Zdravic
Set Zdravic = New Zdravic()

Prvý riadok hovorí: "Chcem (deklarujem) premennú zdravic, v ktorej bude inštancia triedy Zdravic ". S premennými sme vlastne už takto pracovali.

Na druhom riadku je kľúčové slovo New, ktoré nám založí novú inštanciu triedy Zdravic. Túto inštanciu priradíme do našej premennej. Kľúčovým slovom Set hovoríme, že inštanciu definujeme (nastavujeme).

Asi sme si správne všimli, že názov inštancie aj triedy začína veľkým písmenom. Je to kvôli nedokonalosti nášho IDE. Skúsme si pri názve inštancie zmeniť prvé písmeno na malé. Naše IDE nám automaticky zmení na malé písmeno aj počiatočné písmeno názvu našej triedy v deklarácii. Je to taká malá chyba na kráse, ktorej sa ale vyhneme, pokiaľ inštanciu pomenujeme inak ako triedu.

Celý zápis môžeme samozrejme skrátiť na:

Dim Zdravic As New Zdravic()

Keďže v premennej teraz máme naozaj inštanciu triedy Zdravic, môžeme inštanciu nechať pozdraviť. Zavoláme na ňu metódu Pozdrav() a to ako Zdravic.Pozdrav(). Kód metódy Main() bude teda teraz vyzerať nasledovne:

Private Sub Main()
    Dim Zdravic As Zdravic
    Set Zdravic = New Zdravic()
    Zdravic.Pozdrav()
End Sub

Program teraz spustíme. Len pre istotu doplním, že máme kurzor myši vo vnútri metódy Main() a pre spustenie stlačíme kláves F5.

Na konzole sa nám práve vypísal text Hello object world! Pokiaľ konzolu nevidíme, stlačíme súčasne klávesy Ctrl + G. Zobrazí sa okno Immediate, kde si môžeme čítať naše výpisy na konzole.

Máme teda svoju prvú objektovú aplikáciu!

Pridanie parametra

Dajme teraz našej metóde Pozdrav() parameter jmeno a upravme text, ktorý vypisujeme na konzole tak, aby dokázala pozdraviť konkrétneho užívateľa:

Public Sub Pozdrav(jmeno As String)
    Debug.Print "Ahoj užívateľovi " + jmeno
End Sub

Vidíme, že syntax parametra metódy je rovnaká, ako je syntax premennej. Iba vynecháme kľúčové slovo Dim. Keby sme chceli parametrov viac, oddeľujeme ich čiarkou. Upravíme teraz našu metódu Main():

Private Sub Main()
    Dim Zdravic As Zdravic
    Set Zdravic = New Zdravic()
    Zdravic.Pozdrav ("Karle")
    Zdravic.Pozdrav ("Petře/T}")
End Sub

Náš kód je teraz v metóde a my ho môžeme jednoducho pomocou parametrov volať znova s rôznymi parametrami. Nemusíme 2x opisovať "Ahoj užívateľovi...". Kód budeme odteraz deliť logicky do metód:

Konzolová aplikácia
Ahoj používateľovi Karle
Ahoj užívateľovi Petře

Pridanie atribútu

Triede pridáme nejaký atribút. Ponúka sa text, kde bude uložený text pozdravu. Atribúty sa definujú rovnako ako premenné. Vždy pri nich musíme uviesť modifikátor prístupu. My použijeme Public, pretože s ním chceme pracovať zvonku triedy.

Upravme si teda našu triedu:

Option Explicit

Public text As String

Public Sub Pozdrav(jmeno As String)
    Debug.Print text + jmeno
End Sub

Text teraz musíme pochopiteľne nastaviť vytvorené inštanciu v metóde Main() v module Main:

Option Explicit

Private Sub Main()
    Dim Zdravic As Zdravic
    Set Zdravic = New Zdravic()
    Zdravic.text = "Ahoj užívateľovi "
    Zdravic.Pozdrav ("Karle")
    Zdravic.Pozdrav ("Petre")
    Zdravic.text = "Vítam Ťa tu, programátora  "
    Zdravic.Pozdrav ("Richarde")
End Sub
Konzolová aplikácia
Ahoj používateľovi Karle
Ahoj užívateľovi Petře
Vítam Ťa tu, programátor Richard

Vrátenie hodnoty

Vzhľadom k objektovému návrhu nie je najvhodnejšie, aby si každý objekt ovplyvňoval vstup a výstup, ako sa mu zachce. Pochopiteľne narážam na naše vypisovanie do konzoly. Každý objekt by mal mať určitú kompetenciu a tú by nemal prekračovať. Poverme náš objekt iba zostavením pozdravu a jeho výpis si spracujme už mimo, v našom prípade v metóde Main(). Výhodou takto navrhnutého objektu je vysoká univerzálnosť a znovupoužiteľnosť.

Objekt doteraz vie len písať do konzoly. My ho však prispôsobíme tak, aby daná metóda text iba vracala a bolo na jeho príjemcovi, ako s ním naložia. Takto môžeme pozdravy ukladať do súborov, písať na webové stránky, alebo ďalej spracovávať.

Keďže chceme, aby metóda vracala hodnotu, a to String, zameníme kľúčové slovo Sub za Function a pridáme za okrúhle zátvorky As String. Na návrat hodnoty použijeme názov tejto metódy spolu s rovnítkom. Upravme modul aj triedu.

Metóda Pozdrav() v triede Zdravic:

Public Function Pozdrav(jmeno As String) As String
    Pozdrav = text + jmeno
End Function

Telo metódy Main() v module Main:

Private Sub Main()
    Dim Zdravic As Zdravic
    Set Zdravic = New Zdravic()
    Zdravic.text = "Ahoj užívateľovi "
    Debug.Print Zdravic.Pozdrav("Karle")
    Debug.Print Zdravic.Pozdrav("Petre")
    Zdravic.text = "Vítam Ťa tu, programátora  "
    Debug.Print Zdravic.Pozdrav("Richarde")
End Sub
Konzolová aplikácia
Ahoj používateľovi Karle
Ahoj užívateľovi Petře
Vítam Ťa tu, programátor Richard

A sme na konci. Nami napísaný program má už nejakú úroveň, aj keď toho zatiaľ vlastne veľmi nerobí.

Pokiaľ sa vám niečo nepodarilo, nevadí. Môžete si stiahnuť vzorové excelovské súbory, ktoré som pre vás pripravil

V budúcej lekcii, Hracia kocka vo VBA - Zapuzdrenie, konštruktor a Random , si urobíme takú jednoduchú hračku, necháme dva objekty (bojovníkov) súperiť v aréne (tiež objekte). Máte sa na čo tešiť;-) .


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 23x (27.19 kB)
Aplikácia je vrátane zdrojových kódov

 

Predchádzajúci článok
Úvod do objektovo orientovaného programovania vo VBA
Všetky články v sekcii
Objektovo orientované programovanie (OOP) vo VBA
Preskočiť článok
(neodporúčame)
Hracia kocka vo VBA - Zapuzdrenie, konštruktor a Random
Článok pre vás napísal Michal D.
Avatar
Užívateľské hodnotenie:
1 hlasov
Autor se věnuje tvorbě mobilních aplikací.
Aktivity