Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Lekce 1 - Úvod do VBA pro Excel

V předchozím kurzu VBA jsme se seznámili s celým rozsahem jazyka, který je obecně užíván k řízení aplikací v rámci MS Office. Jazyk je vystavěn z tradičních procedurálních prvků, které dovolují manipulace s daty klasickými postupy programování. Pro práci s aplikacemi Office je jazyk VBA rozšířen o práci s objekty. Obecněji jsme o této části VBA pojednali v kapitole o objektech a kapitole následující základního kurzu. Protože objektový model jednotlivých aplikací MS Office je odlišný, soustředíme v této sérii lekcí pozornost na práci s Excelem, speciálně se zaměřením na objektovou strukturu této aplikace.

Excel má více než dvě stovky objektů. K hlavním objektům ve struktuře aplikace existují desítky a v některých případech i stovky vlastností, metod, událostí a parametrů. Většina uživatelů, pokud nezpracovávají zcela specifický problém, se setká s desítkami vlastností a metod, ale i to je dost, protože mnohé mají variantní formy zápisu, parametry, které dovolují další rozdílné zápisy a použití.

Z tohoto důvodu, než přistoupíme k práci v Excelu pomocí objektů VBA, seznámíme se podrobně se zápisem odkazů na jednotlivé objekty a adresování cílů tak, abychom mohli pracovat s jednotlivou buňkou, nebo jejich zvolenou množinou, tedy oblastí. V této lekci uvedené objekty mají další vlastnosti, metody a události, které budou probrány v kontextu s cílem práce později.

Názvosloví

U příkazů pracujících s objekty užíváme popisu:

  • vrací objekt
  • ukazuje na objekt
  • odkazuje na objekt

V podstatě jde o různé vyjádření téhož výsledku příkazu, používané v různých kontextech. Pokud výsledek příkazu dosazujeme do proměnné, používáme většinou vrací objekt, v jiných případech další dva popisy - ale ve finále jde o shodný příkaz, kde výsledkem je objekt.

Hierarchie objektů v Excelu pro přístup k buňce

  • Application
  • Workbook
  • Worksheet
  • Range

Objekt Application

Jde o implicitní objekt na vrcholu hierarchie, vždy se vztahuje k právě otevřené části MS Office, v našem případě k Excelu, a proto se často ve výčtu objektu při volání objektů neuvádí. Je jediný a některé speciální případy použití budou uvedeny později v kontextu jiných řešení.

Objekt Workbook

Druhým objektem v hierarchii Excelu je sešit, tvoří kolekci sešitů Workbooks. Opět jde převážně o objekt implicitní, i když s ním už nemusí být práce úplně jednoznačná, pokud máme otevřeny například dva sešity. Pracujeme sice s jedním, ale můžeme se obracet k hodnotám i druhého otevřeného sešitu, takže postup již nemusí být jednoznačný. V tom případě se musíme na druhý sešit odkazovat přes kolekci Workbooks.

Application.Workbooks("Schema3.xlsm").Worksheets("Pracovni").[K1].Value

Nebo také jiným způsobem přes pořadí indexu v kolekci:

Workbooks(1).Worksheets("Pracovni").[K1].Value

Objekt Worksheet

Dalším níže položeným objektem je list Worksheet. Listy sešitu tvoří kolekci listů Worksheets. Běžný sešit obsahuje více listů a proto v tomto případě je odkaz na konkrétní list v kolekci nezbytný. Odkaz:

  • číslem = vlastnost Index, které reprezentuje index v rámci kolekce
  • názvem = vlastnost Name, ten je názvem listu, který vidíme v běžné aplikaci Excel, je uvedeno v předchozích příkladech

Pokud v hierarchii u nižších objektů list nespecifikujeme, implicitně se pracuje s aktivním listem. V případě, že takový není, je hlášena chyba.

Při práci se složitějším sešitem může být výhodné indexy a názvy listů získat, například si je uložit do pole, nebo jako 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

Dalšími možnostmi, jak se odkazujeme na konkrétní list, se kterým chceme pracovat, jsou vlastnosti:

  • ActiveSheet je vlastnost, vracející objekt Worksheet, který je právě aktivní. Je to jeden z mála případů, kde se obracíme ke konkrétnímu listu bez odkazu na kolekci. Pokud v sešitu není aktivní list, vrací se objektová hodnota Nothing.
  • Next je vlastnost, vracející objekt Worksheet následující v kolekci za listem, na který právě odkazuje zapsaný objekt Worksheet. Pokud ukazuje na neexistující další list, je hlášena chyba.

Příklady použití:

Debug.Print ActiveSheet.Name
Debug.Print ActiveSheet.Index
MsgBox Sheets("List1").Next.[K1].Value

Metoda Add kolekce Worksheets vytvoří nový list. Pokud ji použijeme bez parametrů, přidá list před list aktivní, tím nový list získá index listu právě aktivního.

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

Další vlastnosti a metody objektu Worksheet budou probrány v kontextu učiva, současně s jinými podobnými případy.

Objekt Range

Objekt Range je oblastí buněk na listu Excelu. Vymezuje jednu buňku nebo blok buněk na listu, může ale ukazovat i na několik různých souvislých oblastí buněk. O objektu Range pojednává také kurz o makrech v MS Office .

POZOR! Range je nejenom objekt, ale také vlastnost objektů Application, Worksheet a Range, která vrací objekt Range. Tuto nejednotnost je nutno pochopit pro ty uživatele, kteří chtějí ve VBA napsat více než jednu nebo dvě krátké procedury.

Obecný popis vlastnosti Range

Objekt.Range(Začátek, Konec)

  • Objekt může být Application, Worksheet nebo Range. Pokud není objekt uveden, je implicitně dosazen objekt ActiveSheet představující aktivní list.
  • Začátek je proměnná typu Variant a je povinná. Může to být objekt Range nebo textově v A1 notaci zapsané ohraničení objektu. Nejčastěji je uváděno ve tvaru, jak jej známe z Excelu, v textové formě. Může obsahovat kvalifikátory dvojtečka = rozsah, mezera = průnik a čárka = sjednocení. Může obsahovat znaky $, které jsou ignorovány.
  • Konec je proměnná typu Variant a je nepovinná. Může to být objekt Range nebo textově v A1 notaci zapsaná konečná buňka 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

Rozlišme:

Jeden parametr s kvalifikátorem sjednocení vymezí dvě nesouvislé oblasti

Range("A2, B6").Select
VBA pro Excel

Dva parametry oddělené čárkou, které vymezují souvislou oblast

Range("A2", "B6").Select

totéž zapíšeme klasicky s jedním parametrem pomocí rozsahu

Range("A2:B6").Select
VBA pro Excel

Range, ale i Cells, Row, Column, Offset, Union a Intersect jsou vlastnosti, které náležejí různým objektům, ale ve výsledku vracejí objekt Range. Nejsou to jediné vlastnosti vracející objekt Range, ale ty nejčastěji používané.

Objekt list - Worksheet má hlavní vlastnosti, které vracejí objekt Range:

  • Range
  • Cells
  • Rows
  • Columns

Objekt oblast - Range má hlavní vlastnosti, které vracejí objekt Range:

  • Range
  • Cells
  • Rows
  • Columns
  • Offset

Objekt aplikace Application má metody, které vracejí objekt Range, nejčastější:

  • Union, která spojuje více objektů Range a vrací opět objekt Range. Odpovídající 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, která vrací průnik dvou, nebo více v parametrech zapsaných objektů Range. Odpovídající 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šní lekci vše.

V příští lekci, Objekt Range ve VBA, probereme seznam vlastností a metod Range a pokročíme v adresování buněk.


 

Všechny články v sekci
VBA pro Excel
Přeskočit článek
(nedoporučujeme)
Objekt Range ve VBA
Článek pro vás napsal Luboš Marvan
Avatar
Uživatelské hodnocení:
18 hlasů
Snahou autora je žít podle svého
Aktivity