IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

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 v A1 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 v A1 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
VBA pre Excel

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
VBA pre Excel

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.


 

Všetky články v sekcii
VBA pre Excel
Preskočiť článok
(neodporúčame)
Objekt Range vo VBA
Článok pre vás napísal Luboš Marvan
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Snahou autora je žít podle svého
Aktivity