Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-listy-sheet » Worksheet_Calculate-udalost-listu-excel-vba

Worksheet_Calculate - událost listu

Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

Událost, která reaguje na provedení přepočtu listu.

Úvodem

Událost Worksheet_Calculate, která reaguje na přepočet listu je výhosná pro odchycení změn při filtrování. Událost Worksheet_Change nereaguje například na filtrování) případně nastává až moc často. Nebo Vám nevyhovuje událost reagující na změnu výběru Worksheet_Change. Proto pro některé případy je vhodná Worksheet_Calculate. Pomocí ní dokážete například odchytiť změny provedené při použití filtru (a vhodně na ně reagovat).

Deklarace

Private Sub Worksheet_Calculate() End Sub

Ukázkový příklad pro Worksheet_Calculate

Pro první vyzkoušení můžete při každé změně, která vyvolá událost Calculate zobrazit dialogový box. Jednoduše zjistíte zda je pro Vás tato událost ta pravá nebo raději nepoužijete SelectionChange

Private Sub Worksheet_Calculate() MsgBox ("Změna Worksheet_Calculate") End Sub

Worksheet_Calculate - filtry

Pro podchycení změny na listu pomocí filtru(ů) je vhodné použít událost Worksheet_Calculate. Nejprve je potřeba doplnit tabulku o vzorec (funkci) SUMA. Při změně ve filtrech dojde k přepočtu vzorce (funkce) a tím pádem i k vyvolání události Calculate.

Jak poznat kdy událost reaguje?

Stačí, aby VBA kód spustil dialogový box s informací, když tato událost nastane.

Private Sub Worksheet_Calculate() MsgBox ("Změna Worksheet_Calculate") End Sub

Jak vybrat vhodnou událost?

Pokud s událostmi pracujete poprvé a nejste si jisti co která umí, na co která reaguje.

Jednoduše uděláte několik VBA kódu. Stačí, aby příslušný kód spustil dialogový box s příslušnou informací, která událost nastala.

Private Sub Worksheet_Calculate() MsgBox ("Změna Worksheet_Calculate") End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) MsgBox ("Změna Worksheet_SelectionChange") End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) MsgBox ("Změna Worksheet_Change") End Sub

Poznámka: Takto také zjistíte, která událost nastane jako první a která posléze (tj. co má vyšší prioritu), když jsou vyvolány dvě (tři) události zároveň. Takto jednoduše pochopíte, kdy která událost zareaguje.

Závěrem

Další informace o událostech listu jsou v souhrném článku: Události listu v MS Excel VBA

Článek byl aktualizován: 19.09.2020 11:07

Odměna

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.


Pavel Lasák - autor webu

Pavel Lasák

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ů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


Milano

Přidáno: 26.05.13 13:05

Ahoj Exceláci, tohle jsou fakt stránky k nezaplacení, už jsem z nich hodně čerpal. Ale narazil jsem na problém se kterým nehnu. Můžeš mi Pavle prosím poradit ? Začnu konkrétně : Připravuju výsledkovou listinu pro rybářský závody. Je to v klasický tabulce kde ve sloupci "A" jsou jména rybářů, ve sloupci "B" je součet nalovených ryb a ve sloupcích "C" až "T" jsou zadaný jednotlivý úlovky. V souboru graf.xlsx mám udělaný graf a k tomu chci umístit do buňky největší a do další nejmenší úlovek. To jsem dokázal pomocí : =MAX('[Data.xlsm]List1'!$C$1:$T$32) a pak to samý s MIN... to funguje v pohodě, ale já bych k tomu samozřejmě potřeboval přidat ( třeba do vedlejší buňky) jméno kdo tu největší a nejmenší rybu ulovil a to je ve sloupci "A". A tam končím, fakt nevím jak to jméno vytáhnout.

Milano

Přidáno: 27.05.13 13:54

Já asi napsal ten konec blbě. Ty buňky s tou největší rybou nebudou v tom grafu, ale vedle grafu normálně v sešitu. Díky Milan

Pavel Lasák

Přidáno: 27.05.13 16:52

To Milano: Do tabulky dat další sloupec se jmény "U" a využít funkci SVYHLEDAT http://office.lasakovi.com/excel/funkce/svyhledat-funkce-excel/

Milano

Přidáno: 10.06.13 14:21

Díky, ale tímhle jsem přišel jen na to, že jsem málo chytrej. Podle Tvého návodu jsem přidal na list v souboru data.xlsm sloupec "U" kam jsem nakopíroval všechna jména a do buňky v souboru graf.xlsm kde chci zobrazovat jméno je vzorec : =SVYHLEDAT(I2;[Data.xlsm]List1!$C$1:$T$32;[Data.xlsm]List1!$21) Když chci vzorec uložit vyhučí to na to, že vzorec obsahuje chybu. Možná se mu nelíbí ve vzorci buňka "I2", ve který je vzorec na vyhledání nejvyšší hodnoty. Můžeš mi prosím ještě poradit ? Díky Milan

Pavel Lasák

Přidáno: 10.06.13 18:19

To Milano: Předpoládám chybu v [Data.xlsm]List1!$21 - jde totiž o číslo sloupce (nevím co je to za údaj). Když tak pošli ukázku na můj email, zkusím se mrknout.

Jakub

Přidáno: 23.05.14 14:58

Dobrý den, mám vytvořenou událost, která mi při změně buňky přičte jedničku k původní hodnotě jiné buňky. Problém je v tom, že toto funguje pouze, když hodnotu změním ručně, potřeboval bych ale, aby se tato událost spustila, když dojde k přepočtu pomocí vzorce. Dá se to nějak udělat? kod: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$Y$25" Then Range("V22") = Range("V22") + 1 End If End Sub Jinak moc děkuji za perfektní web, už mi mockrát pomohl.

Jojo

Přidáno: 09.07.14 14:28

To Jakub: Public StaraHodnota Private Sub Worksheet_Change(ByVal Target As Range) If Range("Y25") <> StaraHodnota Then Application.EnableEvents = False Range("V22") = Range("V22") + 1 StaraHodnota = Range("Y25") Application.EnableEvents = True End If End Sub






Excel


Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

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 |