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

Nový videokurz na Seduo: Excel pro začátečníky

     

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

Worksheet_Change - událost listu


Reagujte na změnu v listu pomoci události Worksheet_Change.

Úvodem do Worksheet_Change

Tato událost je jednou z nejpoužívanějších při programování ve VBA. Reaguje na změny provedené na listu. Její deklarace je:

Private Sub Worksheet_Change(ByVal Target As Range)

Příklad 1

Jednoduchý kód který při změně na listu vyvolá dialogové okno s hláškou: Došlo ke změně na listu.

Private Sub Worksheet_Change(ByVal Target As Range) MsgBox ("Došlo ke změně na listu.") End Sub

Zacyklení Worksheet_Change

Změna v buňce, kterou provede událost Worksheet_Change, může být příčinou zacyklení. V případě do události vložíte místo dialogové hlášky nějakou změnu na listě (vyplnění buňky tetem), pokud toto operaci správně neošetříte, zaděláte si na problém. Dojde k zacyklení.

Zacyklení příklad

Příklad: Provede se změna na listu tato vyvolá událost, která provede změnu na listě, ale tato změna je změnou na listu což provede opět událost ... takže jste v nekonečné smyčce. Proto pokud tato událost provádí na listě změnu musí dojít k dočasnému vypnutí...

V ukázce je chyba která kousne Excel !! Private Sub Worksheet_Change(ByVal Target As Range) Range("C5").Select ActiveCell.FormulaR1C1 = "test" End Sub

Zamezení Zacyklení

Pro zamezení zacyklení slouží příkaz: Application.EnableEvents nejprve FALSE a poté vrrácení na TRUE.

Application.EnableEvents = False ... Potřebná změna v buňce ... Application.EnableEvents = True

Příklad 2

Kód zapíše do buňky A1 Správne heslo., pokud do buňky B2 bude zadano HESLO, jinak zapíše do A1 text Nesprávné heslo.

Private Sub Worksheet_Change(ByVal Target As Range) If Range("B2").Value = "HESLO" Then Application.EnableEvents = False Range("A1").Select ActiveCell.FormulaR1C1 = "Správne heslo." Application.EnableEvents = True Else Application.EnableEvents = False Range("A1").Select ActiveCell.FormulaR1C1 = "Nesprávné heslo." Application.EnableEvents = True End If End Sub

Závěrem

Máte nějaké zajímavé příklady, které používají událost Worksheet_Change (změna listu)? Můžete doplnit do komentářů.

Článek byl aktualizován: 01.11.2014 14:22

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

Pavel Lasák - autor webu

Microsoft Office (Word, Excel, PowerPoint) se věnuji od roku 2006. Své vědomosti a zkušenosti dávám k dispozici na různých školeních a konzultacích, ale také na tomto webu. K dispozici na tomto webu je mnoho návodu, tipů a triků včetně desítek různých šablon.

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

Doporučte tento článek přátelům

Pokud vám článek pomohl, případně si myslíte, že může pomoci i někomu dalšímu, budu rád když jej sdílením doporučíte přátelům - děkuji:



Komentáře


Petr

Přidáno: 16.03.14 10:13

Dobrý den, poradte mi prosim, jak zmenit v sesitu na kazdem z jeho listu hodnotu v jedne konkretni bunce. Hodnota v bunce muze byt bud 1 nebo 0. Diky Petr

Jojo

Přidáno: 09.07.14 14:54

To Petr: For sh = 1 To Worksheets.Count Sheets(sh).Cells(1, 1) = 1 Next sh

Michal

Přidáno: 21.08.14 13:07

dobrý den, mohl by jste mi poradit jak můžu v jednom listě vytvořit více maker, které se spouští změnou v sešitu? pokaždé musím mí název Worksheet_Change a tak mi připadá že můžu mít napsaný jenom jedno makro. Rád bych ještě poprosil o radu. mam range("A1:A10")kde postupně zapisuji např 1, 2, 3 a já podle toho co tam napíšu, tak bych rád aby se ve vedlejší buňce podle zrovna zapsané hodnoty zase něco objevilo. Děkuji za radu Michal

Jojo

Přidáno: 07.10.14 15:00

To Michal: -- 1) použiť "If" alebo "Select Case" + podľa potreby http://office.lasakovi.com/excel/vba-teorie-zaklady/promene-excel-vba/ 2) detto + napr If Cells(1, 1) = 5 Then Cells(1, 2) = "Podmienka splnená"

Hat

Přidáno: 13.01.15 10:39

Je nějak možné odchytit typ změny? Myslím například změna hodnoty v buňce, smazání sloupce, smazání řádku atd?

Melian

Přidáno: 05.03.15 11:19

Dobrý den, potřebovala bych poradit, jak vytvořit Makro k uskutečnění těchto kroků: Mám jeden pevný hlavní list "Evidence" a postupně budu vytvářet další listy "Josef", "Marie" atd. dle potřeby. Chtěla bych se zeptat, zda by šlo vytvořit makro pro jednotlivý přesun dat z přidávaných listů, tak aby mi vzalo určité informace z aktuálně otevřeného listu (Josef, Marie,...) a přeneslo je do hlavního listu Evidence, tak aby data přibývala na nových řádcích. Např. údaje z listu Josef budou na ř. 3, údaje z listu Marie budou na ř. 4. listu Evidence. Takto by data na řádcích přibývala s přibývajícími listy. Toto makro bych pak chtěla spouštět vždy z jednotlivého listu např. skryté pod tlačítkem. Předem děkuji za odpověď

Marek

Přidáno: 12.04.16 10:35

Ahojte, neviete preco mi nefunguje toto makro? V bunke P5 mam rozbalovacie pole s Yes a No a chcem aby pri zmene mi pustilo pridelene makra. Dik Private Sub Worksheet_Change(ByVal Target As Range) If Range("P5").Value = "Yes" Then Application.EnableEvents = False Call Makro3 Application.EnableEvents = True Else Application.EnableEvents = False Call Makro4 Application.EnableEvents = True End If End Sub


Přidání nového komentáře

Poznámka: Z časových důvodu není v mých sílách zodpovědět všechny dotazy. Děkuji za pochopení.




(vlož číslo padesátpět)

Z bezpečnostních důvodu dočasně nemůžete použít HTML značky, kromě <code> a </code> (pro vkládání VBA kódu). Děkuji za pochopení.
Děkuji, za Vaše komentáře.

Za obsah komentářů neodpovídám, jelikož jsou komentáře publikovány ihned po jejich napsání čtenářem. Toto nemohu nijak ovlivnit. Přesto si vyhrazuji možnost jakýkoli neslušný komentář smazat bez udání důvodu. V komentářích si tykáme. ;-)






Sdílejte

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

Nové články


Newsletter

Přihlaste se odběru novinek a získejte:
Ebook zdarma -
10 kroků ke zvládnutí (Word, Excel, PowerPoint)
Šipka Kniha 3D Více o ebooku ...

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 - 2016 | 11976

Tento web zatím neprošel jazykovou korekturou. Beta verze redakčního systému.