|
Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
aneb událostí pro Worksheet
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:
Událostí sešitu popíšu v dalším článku.
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.:
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).
Probíha při aktivaci listu. Můžeme například zobrazit formulář.
Private Sub Worksheet_Activate()
End Sub
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.
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.
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
Procedura bude provedena před deaktivaci listu.
Private Sub Worksheet_Deactivate()
End Sub
Procedura provedna před kliknutím na hypertextový odkaz.
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
End Sub
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.
Private Sub Worksheet_PivotTableAfterValueChange(ByVal TargetPivotTable As PivotTable, ByVal TargetRange As Range)
End Sub
Private Sub Worksheet_PivotTableBeforeAllocateChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long, Cancel As Boolean)
End Sub
Private Sub Worksheet_PivotTableBeforeCommitChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long, Cancel As Boolean)
End Sub
Private Sub Worksheet_PivotTableBeforeDiscardChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long)
End Sub
Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
End Sub
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
End Sub
Procedura bude provedena než bude provedena změna výběru buněk.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
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
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.10.12 14:44
Hnidopich: překlep: má být dlouhé í na konci slova událostí. Ale jinak velmi pěkné!
Přidáno: 16.10.12 15:47
To Lubek: Opraveno díky za info.
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
Přidáno: 17.10.12 18:48
To Jiří Barák: Už jsem zapojen.
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???
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
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í.
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
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.
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í
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).
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á.
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ěď
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.
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.
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 - 2021 |