Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Co Vám pomáhá tvořit programy ve VBA, v MS Excelu a nejen Excelu, funguje i v MS Access, MS Word, MS PowerPoint.
VBA v Excelu je programování objektově orientováno. Tj. obsahuje určité objekty (buňky, graf, list, sešit, tlačítko) a s těmito "objekty lze něco tvořit, nějak je modifikovat, usměrňovat. K tomu slouží čtyři pomůcky (hlediska):
V následujícím textu si je rozebereme podrobněji. Tyto "hlediska" se pokusím přiblížit na příkladu s osobním automobilem.
Jméno, Font, Velikost písma, Hodnota ... Příklad s autem - jeho barva, výkon, výrobce.
Vlastnosti popisuje "charakteristiku" objektu (je měřitelná). Důležitou vlastností objektů je Jméno (Name), které slouží k identifikaci. Své jméno (Name) má sešit, list, tlačítko, zaškrtávací pole, ...). Změníte názvu listu (nemusí být provedeno přímo ve VBA, stačí změnit název listu klasicky, pravým tlačítkem myší), tím se provede změna vlastnosti Name (takže vlastnost Name už nebude List1, ale například MujNazev.
Provedení změny vlastnosti ve VBA. Nejprve musíme definovat objekt a pak vlastnost kterou chceme nastavit a pak její hodnotu. V uvedeném příkladu změníte vlastnost Listu1 (jeho jméno).
Sheets("List1").Name = "MujNazev"
Akce: Vybrat, Vymazat, Kopírovat, Přepočítat, ... Příklad s autem - nastartovat, zmačknout spojku, zařadit, přidat plyn, ...
Pod metodou si můžeme představit nějakou akci, kterou může objekt provést (vybrat, vymazat, kopírovat). Takže pokud budete chtít přepočítat aktivní list použijeme VBA kód:
Sheets.Calculate
Po otevření, po přepočítaní, před tiskem, ... Příklad s autem - po nastoupení do vozidla, po nastartování, ...
Pokud je nastane požadovaná událost, Excel na ní může reagovat a spustit nějaký kód. Udalosti na které Excel rozpozná. Otevření sešitu, Zavření sešitu, Uložení sešitu, Přepočítání sešitu, Změna dat v buňce, atd.
Například po otevření sešitu chceme spustit dialogový box s textem.
Private Sub Workbook_Open()
MsgBox "office.lasakovi.com"
End Sub
Podrobněji o událostech jsem se zmínil v článku Události ve VBA MS Excelu - obecný úvod.
Kolekce je soubor objektů obsažen v jiném objektu. Zní to složitě, ale není. Jak už jsem řekl Excel VBA je objektově orientované programování (což přináší obrovské výhody). Takže budete-li chtít provést skupinu příkazu, využijete kolekce.
Představte si potřebu do všech listu na zápatí připsat poznámku o autorovi. Někdo může namítnout, že existují cykly. Ano existuji, ale budeme mít cyklus pro 3 listy, někdo přidá list 4 a již se nám na tento naše autorství nedostane. Programovat kontrolu na počet listu je složitější než použít jiný způsob. Jak již víme list je objekt. Takže to uděláte efektivněji pomocí kolekci, čímž podpisy do zápatí doplníte.
For Each List In Worksheets
List.PageSetup.LeftFooter = "office.lasakovi.com"
Next List
Případně přejmenovat listy a jméno vzít z buňky A1.
Dim w As Worksheet
For Each w In ThisWorkbook.Worksheets
w.Name = w.Range("A1").Value
Next w
Rozdíly mezi Vlastnosti, Metodou, Události, Kolekci snad jsou z článku pochopitelné, pokud ne existují komentáře.
Článek byl aktualizován: 19.09.2020 11:06
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Přidáno: 16.11.16 18:26
Změna hodnoty bunky je událost. Může tato událost spustit makro? ALE POZOR jde mi o situaci, kdy hodnota v bunce nebude měněna stiskem klávesy ale tím, že při výpočtu (externí propojení) dojde ke změně bunky, kde je umístěn vzorec. děkuji
Přidáno: 21.11.16 10:15
To Mikoláš Sígl: -- Testovanie zmeny bunky po prepočte by som riešil asi takto: (netestované pre externé prepojenie)Private OldValue
Private Sub Worksheet_Activate()
OldValue = Range("A1")
End Sub
Private Sub Worksheet_Calculate()
If Range("A1") <> OldValue Then MsgBox "Bunka bola zmenená"
OldValue = Range("A1")
End Sub
-- Iná možnosť je zapamätať si pôvodnú(východziu) hodnotu pri otváraní súboru
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |