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

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

Událostí listu - Excel VBA

Videokurzy Excel

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

aneb událostí pro Worksheet

Seznam dostupných událostí

Každý list má k dispozici několik událostí. V novějších verzích MS Excelu přibývají další údálosti (původní stále zůstavají), které Vám dále zpřijemní práci s MS Excelem. Seznam dostupnýh událostí pro verzi Excel 2010:

  • Activate
  • BeforeDoubleClick
  • BeforeRightClick
  • Calculate
  • Deactivate
  • FollowHyperlink
  • Change
  • PivotTableAfterValueChange
  • PivotTableBeforeAllocateChanges
  • PivotTableBeforeCommitChanges
  • PivotTableBeforeDiscardChanges
  • PivotTableChangeSync
  • PivotTableUpdate
  • SelectionChange

Událostí sešitu popíšu v dalším článku.

Pořadí událostí

Když nastane na listě nějaká změna, může dojít k "odchycení několika událostí. Jednotlivé událostí mají přesně nastavené pořadí v jakém se vykonají tj.:

  1. Calculate Worksheet_Calculate
  2. Change Worksheet_Change
  3. SelectionChange Worksheet_SelectionChange

Přehled událostí

Stručný popis včetně deklarace jednotlivých událostí, spolu s odkazem na článek týkající se konkretní událostí (pokud je napsán).

Activate

Probíha při aktivaci listu. Můžeme například zobrazit formulář.

Private Sub Worksheet_Activate() End Sub

BeforeDoubleClick

Procedura bude provedena před dvojitým kliknutím myší.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) End Sub

Událostí listu Worksheet_BeforeDoubleClick - prakticky, včetně ukázek kódu.

BeforeRightClick

Procedura bude provedena před kliknutím pravým tlačítekm. Například na buňku.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) End Sub

Událostí listu Worksheet_BeforeRightClick, - prakticky, včetně ukázek kódu.

Calculate

Událost nastene po přepočítaní listu. Používá se v případě že nelze na 100% předpokládat, že se provede událost Change.

Private Sub Worksheet_Calculate() End Sub

Worksheet_Calculate - událost listu - prakticky, včetně ukázek kódu spolu s informaci jak ošetřit připadné chyby.

Deactivate

Procedura bude provedena před deaktivaci listu.

Private Sub Worksheet_Deactivate() End Sub

FollowHyperlink

Procedura provedna před kliknutím na hypertextový odkaz.

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) End Sub

Worksheet_Change

změna obsahu buněk. Tato funkce je využívana nejčastěji. Tato událost nastane ať změnu provede uživatel (tím, že něco přepíše) nebo VBA (program), nebo dojde k aktualizaci z vnějšího zdroje. K této událostí ale nedojde přidateli do listui graf, nebo přes menu vymážete formáty.

Private Sub Worksheet_Change(ByVal Target As Range) End Sub

Poznámka: Pozor na vzajemné použití Change a Calculate... ať neskončí ve smyččce (nekonečném cyklu).

Worksheet_Change - událost listu - prakticky, včetně ukázek kódu a jak ošetřit připadné chyby.

PivotTableAfterValueChange

Private Sub Worksheet_PivotTableAfterValueChange(ByVal TargetPivotTable As PivotTable, ByVal TargetRange As Range) End Sub

PivotTableBeforeAllocateChanges

Private Sub Worksheet_PivotTableBeforeAllocateChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long, Cancel As Boolean) End Sub

PivotTableBeforeCommitChanges

Private Sub Worksheet_PivotTableBeforeCommitChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long, Cancel As Boolean) End Sub

PivotTableBeforeDiscardChanges

Private Sub Worksheet_PivotTableBeforeDiscardChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long) End Sub

PivotTableChangeSync

Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable) End Sub

PivotTableUpdate

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) End Sub

SelectionChange

Procedura bude provedena než bude provedena změna výběru buněk.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub

Závěrem

Podrobnější příklady dle požadavku v komentářích jednotlivých článku, jež se týkají konkretní událostí.

Č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


Lubek

Přidáno: 16.10.12 14:44

Hnidopich: překlep: má být dlouhé í na konci slova událostí. Ale jinak velmi pěkné!

Pavel Lasák

Přidáno: 16.10.12 15:47

To Lubek: Opraveno díky za info.

Jiří Barák

Přidáno: 17.10.12 06:43

Jen malý dotaz na pana Lasáka, jste zapojen do excel konfery na Pandoře? Pokud by jste se chtěl připojit byl by jste velkým přínosem pro celou naší komunitu. http://pandora.idnes.cz/conference/excel

Pavel Lasák

Přidáno: 17.10.12 18:48

To Jiří Barák: Už jsem zapojen.

Honza V

Přidáno: 30.01.13 21:12

Mám ještě jednu prosbu, sestavil jsem si makro, které funguje po kliknuti v seznamu maker na 100%, ale pokud celý text z makra překopíruji do příkazového tlačítka prvku Activ X, toto makro přestane fungovat. Sledoval jsem všechny změny, které při kopírování vznikne a jediné, čeho jsem si všiml, tak je to, že v úvodu makra je Sub seznamfaktur() a u příkazového tlačítka je Private Sub seznamfaktur(). Kde dělám chybu???

Honza V

Přidáno: 31.01.13 15:48

Dobrý den pane Lasáku, pro pochopení vám posílám makro, které je přiřazeno příkazovému tlačítku na listu doklad Private Sub cmdseznamfaktur_Click() Sheets("doklad").Select Range("H2").Select Application.CutCopyMode = False Selection.Copy Sheets("Seznam faktur").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("doklad").Select Range("I13").Select Application.CutCopyMode = False Selection.Copy Sheets("Seznam faktur").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("doklad").Select Range("K7").Select Application.CutCopyMode = False Selection.Copy Sheets("Seznam faktur").Select Range("C3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("doklad").Select Range("K37").Select Application.CutCopyMode = False Selection.Copy Sheets("Seznam faktur").Select Range("D3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A3").Select Rows("3:3").Select Selection.Cut Rows("4:4").Select ActiveSheet.Paste Rows("3:3").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A3").Select End Sub

Honza V

Přidáno: 31.01.13 15:51

Už jsem na to přišel, pomohl jsem si pomocí Goto a určení který sešit je aktivní.

Jaromir

Přidáno: 06.10.13 17:44

Dobrý den, měl bych prosbu. Jak zjistit pořadové číslo listu pokud znám jeho jméno? Existuje nějaká kniha, kde je možné najít seznam a popis všech objektů,událostí,vlastností a metod použitelných ve VBA. Děkuji

Pavel Lasák

Přidáno: 06.10.13 19:57

To Jaromír: Projít v cyklu. O knize nevím, osobně hledám pomocí google v EN.

Radek

Přidáno: 13.11.13 20:35

Vaše stránky jsou pro mě velkou inspirací a děkuji. Gogole ví hodně, ale podpora v rodném jazyce je neocenitelná. Přijímáte návrhy na zajímavé aplikace a tady jedna je: nazval bych ji Nesmazatelný Excel. - Nejprve vytvořím excel list1! s daty řekněme 3x3 pole - Aplikuji VBA na workbook: Private Sub Workbook_Open() Dim a As Integer Dim b As Integer Dim aktX As Integer Dim aktY As Integer End Sub a - Aplikuji VBA na list: Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Application.EnableEvents = False ' nezacyklit SelectionChange aktX = ActiveCell.Row aktY = ActiveCell.Column Cells(1, 8).Value = aktX Cells(1, 9).Value = aktY a = ActiveSheet.Cells(aktX, aktY).Value Cells(1, 10).Value = a Application.EnableEvents = True End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) Application.EnableEvents = False ' nezacyklit change aktX = ActiveSheet.Cells(1, 8).Value aktY = ActiveSheet.Cells(1, 9).Value a = ActiveSheet.Cells(1, 10).Value Cells(aktX, aktY).Value = a Application.EnableEvents = True End Sub a Kód je funkční, ale předávání informací mezi Worksheet_SelectionChange a Worksheet_Change přes zápis do tří excelovských buněk je poněkud ..hloupé. V tuhle chvíli ani netuším, na co bych se vlastně měl Googla zeptat. Ani v národním prostředí nevím, kam vhodně umístit tento dotaz. Je to spíš Označování buněk, bo Události listu, bo Praktické příklady, bo … Vytvořte prosím aplikaci Nesmazatelný Excel s vaším nadhledem. Aplikace není samoúčelná. Poslouží jako základ aplikace, kde pole buněk určené uživateli bude free, ale buňky vyplněné pomocí VBA nejdou přepsat. Tak nějak lehce bez zámků, bez dalších nastavení

Pavel Lasák

Přidáno: 14.11.13 18:36

To Radek: Děkuji za zajímavý námět. Nepostačí uzamčení listu? Jen pro buňky, které mohu měnit povolím, případně ještě doplním o ověření dat. Zdrojovému souboru nastavím práva pouze pro čtení (případně vytvořím jako šablonu).

Radek

Přidáno: 21.11.13 21:26

Děkuji, že jste se tím zabýval. Ono někdy moc pomůže přečíst si všechny vaše publikace,i ty, "co nikdy nebudu potřebovat". Došel jsem k dimensování proměnných a je jasno: DIM přepsat na PUBLIC, malá úprava kódu a dílo jest dokonáno. Jít "tvrdě" jen pomocí VBA mě nutí prostředí, protože , nikdy nevím jakou verzi excelu nebo jazykovou mutaci má uživatel. VBA-čko MS excel sjednocuje, open office jak kdy ...ale to už není můj problém Ještě jednou děkuji za vaší webovku, je pro začátečníky neocenitelná.

Melian

Přidáno: 23.02.15 20:45

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ěď

Jarda

Přidáno: 10.08.15 08:02

to Melian V aktivním listu třeba "Josef" musí být aktivní buňka, kterou chcete kopírovat. Private Sub KopirovaniDat() Dim shnam As String, nextcol As Integer nextcol = Sheets("Evidence").Range("IV3:IV256").End(xlToLeft).Column + 1 shnam = ActiveSheet.Name ActiveCell.Copy Sheets("Evidence").Select Cells(3, nextcol).Select ActiveSheet.Paste End Sub Makro je nastaveno na kopírování dat na řádek 3 listu Evidence. Pokud by jste chtěla toto změnit stačí přepsat číslo 3 v Range("IV3:IV256") a Cells(3,nextcol) na jiné číslo řádku, které budete potřebovat.

Jozef Marko

Přidáno: 08.08.16 10:57

Dobrý deň. Mám takúto otázku. Keď do bunky A zadám hodnotu do bunky B mi zapíše meno kto to zadal. Ale akonáhle niekto iný otvorí súbor prepíše mi bunku B na jeho meno, Ale ja by som potreboval aby meno v tej bunke po zatvorení sa už nezmenilo. Vedeli by ste mi poradiť? Ďakujem. S pozdravom Jozef.






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 - 2021 |