1. diel - Úvod do VBA pre Excel
V predchádzajúcom kurze VBA sme sa zoznámili s celým rozsahom jazyka, ktorý je všeobecne používa na riadenie aplikácií v rámci MS Office. Jazyk je vystavaný z tradičných procedurálnych prvkov, ktoré dovoľujú manipulácia s dátami klasickými postupmi programovania. Pre prácu s aplikáciami Office je jazyk VBA rozšírený o prácu s objektmi. Všeobecnejšie sme o tejto časti VBA pojednal v kapitole o objektoch a kapitole nasledujúce základného kurzu. Pretože objektový model jednotlivých aplikácií MS Office je odlišný, sústredíme v tejto sérii lekcií pozornosť na prácu s Excelom, špeciálne so zameraním na objektovú štruktúru tejto aplikácie.
Excel má viac ako dve stovky objektov. K hlavným objektom v štruktúre aplikácie existujú desiatky a v niektorých prípadoch aj stovky vlastností, metód, udalostí a parametrov. Väčšina užívateľov, ak nespracovávajú úplne špecifický problém, sa stretne s desiatkami vlastností a metód, ale aj to je dosť, pretože mnohé majú variantné formy zápisu, parametre, ktoré dovoľujú ďalšie rozdielne zápisy a použitia.
Z tohto dôvodu, než pristúpime k práci v Exceli pomocou objektov VBA, zoznámime sa podrobne so zápisom odkazov na jednotlivé objekty a adresovanie cieľov tak, aby sme mohli pracovať s jednotlivou bunkou, alebo ich zvolenú množinou, teda oblastí. V tejto lekcii uvedené objekty majú ďalšie vlastnosti, metódy a udalosti, ktoré budú prebrané v kontexte s cieľom práce neskôr.
Názvoslovie
U príkazov pracujúcich s objektmi užívame popisu:
- vracia objekt
- ukazuje na objekt
- odkazuje na objekt
V podstate ide o rôzne vyjadrenie toho istého výsledku príkazu, používané v rôznych kontextoch. Ak výsledok príkazu dosadzujeme do premennej, používame väčšinou vracia objekt, v iných prípadoch ďalšie dva opisy - ale vo finále ide o zhodný príkaz, kde výsledkom je objekt.
Hierarchie objektov v Exceli pre prístup k bunke
- Application
- Workbook
- Worksheet
- range
Objekt Application
Ide o implicitné objekt na vrchole hierarchie, vždy sa vzťahuje k práve otvorenej časti MS Office, v našom prípade k Excelu, a preto sa často vo výpočte objektu pri volaní objektov neuvádza. Je jediný a niektoré špeciálne prípady použitia budú uvedené neskôr v kontexte iných riešení.
Objekt Workbook
Druhým objektom v hierarchii Exceli je zošit, tvoria kolekciu zošitov Workbooks. Opäť ide prevažne o objekt implicitné, aj keď s ním už nemusí byť práca úplne jednoznačná, ak máme otvorené napríklad dva zošity. Pracujeme síce s jedným, ale môžeme sa obracať k hodnotám aj druhého otvoreného zošita, takže postup už nemusí byť jednoznačný. V tom prípade sa musíme na druhý zošit odkazovať cez kolekciu Workbooks.
Application.Workbooks("Schema3.xlsm").Worksheets("Pracovni").[K1].Value
Alebo tiež iným spôsobom cez poradí indexu v kolekcii:
Workbooks(1).Worksheets("Pracovni").[K1].Value
Objekt Worksheet
Ďalším nižšie položeným objektom je list Worksheet. Listy zošita tvoria kolekciu listov Worksheets. Bežný zošit obsahuje viac hárkov a preto v tomto prípade je odkaz na konkrétny list v kolekcii nevyhnutný. odkaz:
- číslom = vlastnosť Index, ktoré reprezentuje index v rámci kolekcie
- názvom = vlastnosť Name, ten je názvom listu, ktorý vidíme v bežnej aplikácii Excel, je uvedené v predchádzajúcich príkladoch
Ak v hierarchii u nižších objektov list nešpecifikuje, implicitne sa pracuje s aktívnym listom. V prípade, že taký nie je, je hlásená chyba.
Pri práci sa zložitejším zošitom môže byť výhodné indexy a názvy listov získať, napríklad si ich uložiť do poľa, alebo ako výpis:
Public Sub subIdentListu() 'vypíše indexy a názvy listů do okna Immediate Dim vW As Worksheet 'cyklus přes každého člena kolekce Wokrsheets For Each vW In Worksheets Debug.Print vW.Index, vW.Name Next vW End Sub
Ďalšími možnosťami, ako sa odkazujeme na konkrétny list, s ktorým chceme pracovať, sú vlastnosti:
- ActiveSheet je vlastnosť, vracajúci objekt Worksheet, ktorý je práve aktívny. Je to jeden z mála prípadov, kde sa obraciame ku konkrétnemu listu bez odkazu na kolekciu. Ak v zošite nie je aktívny list, vracia sa objektová hodnota Nothing.
- Next je vlastnosť, vracajúci objekt Worksheet nasledujúce v kolekcii za listom, na ktorý práve odkazuje zapísaný objekt Worksheet. Ak ukazuje na neexistujúce ďalší list, je hlásená chyba.
Príklady použitia:
Debug.Print ActiveSheet.Name Debug.Print ActiveSheet.Index MsgBox Sheets("List1").Next.[K1].Value
Metóda Add
kolekcia Worksheets vytvorí nový
list. Pokiaľ ju použijeme bez parametrov, pridá list pred list aktívny, tým
nový list získa index listu práve aktívneho.
i = ActiveWorkbook.ActiveSheet.Index 'index aktivního listu v kolekci ActiveWorkbook.Worksheets.Add 'přidá další list s indexem aktivního „Before=Před“ ActiveWorkbook.Worksheets(i).Name = "Novy" 'přejmenujeme přidaný list
Ďalšie vlastnosti a metódy objektu Worksheet budú prebrané v kontexte učiva, súčasne s inými podobnými prípadmi.
Objekt Range
Objekt Range je oblasťou buniek na liste Excelu. Vymedzuje jednu bunku alebo blok buniek na liste, môže ale ukazovať aj na niekoľko rôznych súvislých oblastí buniek. O objektu Range pojednáva tiež kurz o makrách v MS Office.
POZOR! Range je nielen objekt, ale aj vlastnosť objektov Application, Worksheet a Range, ktorá vracia objekt range. Túto nejednotnosť je nutné pochopiť pre tých užívateľov, ktorí chcú vo VBA napísať viac ako jednu alebo dve krátke procedúry.
Všeobecný opis vlastnosti Range
Objekt.Range(Začátek, Konec)
- Objekt môže byť Application, Worksheet alebo Range. Pokiaľ nie je objekt uvedený, je implicitne dosadený objekt ActiveSheet predstavujúce aktívny hárok.
- Začiatok je premenná typu
Variant
a je povinná. Môže to byť objekt Range alebo textovo vA1
notáciu zapísanej ohraničenie objektu. Najčastejšie je uvádzané v tvare, ako ho poznáme z Excelu, v textovej forme. Môže obsahovať kvalifikátory dvojbodka = rozsah, medzera = prienik a čiarka = zjednotenie. Môže obsahovať znaky$
, ktoré sú ignorované. - Koniec je premenná typu
Variant
a je nepovinná. Môže to byť objekt Range alebo textovo vA1
notáciu zapísaná konečná bunka v oblasti.
'příklad použití vlastnosti Range, která vrací objekt Range Dim vRng as Excel.Range Set vRng = Sheets("List1").Range("A1:F6") vRng.Range("C1:D5").Select
rozlíši:
Jeden parameter s kvalifikátorom zjednotenie vymedzí dve nesúvislé oblasti
Range("A2, B6").Select
Dva parametre oddelené čiarkou, ktoré vymedzujú súvislú oblasť
Range("A2", "B6").Select
to isté zapíšeme klasicky s jedným parametrom pomocou rozsahu
Range("A2:B6").Select
Range, ale aj Cells, Row, Column, Offset, Union a Intersect sú vlastnosti, ktoré patria rôznym objektom, ale vo výsledku vracajú objekt range. Nie sú to jediné vlastnosti vracajúci objekt Range, ale tie najčastejšie používané.
Objekt list - Worksheet má hlavné vlastnosti, ktoré vracajú objekt Range:
- range
- Cells
- rows
- Columns
Objekt oblasť - Range má hlavné vlastnosti, ktoré vracajú objekt Range:
- range
- Cells
- rows
- Columns
- offset
Objekt aplikácie Application má metódy, ktoré vracajú objekt Range, najčastejšie:
- Union, ktorá spája viac objektov Range a vracia opäť objekt Range. Zodpovedajúce si zápisy:
Union(Range("A10"), Range("A12")).Select 'vybere dvě buňky A10 a A12 Range("A10, A12").Select 'vybere dvě buňky A10 a A12
- Intersect, ktorá vracia prienik dvoch, alebo viac v parametroch zapísaných objektov Range. Zodpovedajúce si zápisy:
Intersect(Range("A1:A9"), Range("A9:A10")).Select 'vybere buňku A9 Range("A1:A9 A9:A10").Select 'vybere buňku A9
To je v dnešnej lekcii všetko.
V budúcej lekcii, Objekt Range vo VBA , preberieme zoznam vlastností a metód Range a pokročíme v adresovanie buniek.