Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Kromě klasické provedení požadované akce, změnte pomocí události předvidatelné chování Excelu - například zamezte zobrazování kontextové nápovědy při pravém kliku myší.
Jako všechny události po jejím "odchycení" bude provedena požadovaná akce (například zobrazení dialogového okna. Pokud ale nastavíte argument Cancel na hodnotu True můžete zrušit přednastavené chování Excelu (napřílad nezobrazit kontextovou nabídku). Protože nastane událost a teprve po ní se provádí ono zobrazování kontextové nabídky, takže v události můžete nastavit její nezobrazování.
S těmito nastaveními opatrně, může znást nejen uživatelé, kteří si budou myslet, že jim excel nefunguje, ale může způsobit problémi i Vám pokud budete hledat případnou chybu v kódu.
Nejednodužší ukázka jednoduše deaktivuje zobrazení kontextového menu po kliku na pravým tlačítkem myši.
Private Sub Worksheet_BeforeRightClick(ByVal target as Range, ByRef cancel as Boolean)
' cancel - provede deaktivaci
cancel = True
End Sub
Při kliku pravým tlačítkem myši se objeví dialogové okno. Poté "vyskočí" kontextové menu pro danou buňku.
Private Sub Worksheet_BeforeRightClick(ByVal target as Range, ByRef cancel as Boolean)
MsgBox ("Byl proveden klik pravým tlačítkem myši!")
End Sub
Při kliku pravým tlačítkem myši přičtu do dané buňky hodnotu 2 a navíc nezobrazím kontextové menu.
Private Sub Worksheet_BeforeRightClick(ByVal target As Range, ByRef cancel As Boolean)
' Klikem do buňky přičtu 2
Dim HodnotaBunky As Integer
HodnotaBunky = target.Value
HodnotaBunky = HodnotaBunky + 2
target.Value = HodnotaBunky
' nezobrazím dialogové okno
cancel = True
End Sub
Po dvojkliku se v buňce nezobrazí kurzor
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
Po dvojkliku obdržíte dialogové okno
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox ("Byl proveden dvojklik pravým tlačítkem myši!")
End Sub
Kombinace předchozích
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox ("Byl proveden dvojklik pravým tlačítkem myši!")
Cancel = True
End Sub
Další informace o událostech listu jsou v souhrném článku: Události listu v MS Excel VBA - Pro další náměty k čemu využíváte událost SelectionChange jsou k dispozici komentáře.
Č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: 21.08.13 14:30
Dobrý den. pro ty koho by zajmalo jak nastavit danou událost jen pro určitou oblast(oblasti).
Osobně ještě nevim co ten příkaz ověřuje a vrací, ale funguje :)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
If Not Intersect(Target, Range("B2:B25, L2:L25")) Is Nothing Then
'Váš kód pro danou oblast
End If
End Sub
Přidáno: 21.08.13 20:17
To Martin: Děkuji za doplnění.
Přidáno: 28.02.14 15:12
Dobrý den, jsem ve VBA úplný nováček, nikdy jsem v tom nedělal. Problém: Na List1 mám tabulku, v řádcích jsou údaje z pokladního deníku a já potřebuji, aby se např. po kliknutí na tlačítko / buňku vypsaly hodnoty do List2 - výdajový doklad a nebo pokud je to příjem, tak do List3 - příjmový doklad. Už nad tím sedím půl den a nic. Děkuji mnohokráte za pomoc!
Přidáno: 01.03.14 19:56
To Vyplnění dat: Musí být nějaký příznak jak má excel poznat kam psát data. Do dalšího sloupce vyplnit, zda se jedna o příjem/výdej.
Přidáno: 06.01.16 10:20
Dobrý den, prosím o radu. Ve VBA jsem amatér, proto nevím, proč mi makro nechce fungovat. Mám na Listech udělané jednotlivé přehledy mých dat - něco jako One pager. Pro vyhodnocení jsou na 3 místech tohoto přehledu vloženy vždy 4 obrázky. Potřebuji, aby se po kliknutí na daný obrázek rozsvítil (tím, že kolem něj bude "záře") a při dalším kliknutí zase zhasl. Nejlépe, aby z té čtveřice obrázků vždy mohl svítit jen jeden(něco jako semafor). Prozatím jsem "vymyslela" toto:
Sub Makro2()
' Makro2 Makro
If
ActiveSheet.Shapes.Range(Array("Picture 49")).Select
Selection.ShapeRange.Glow.Radius = 0
With Selection.ShapeRange.Glow
.Color.ObjectThemeColor = msoThemeColorAccent2
.Color.TintAndShade = 0
.Color.Brightness = 0
.Transparency = 0.599999994
.Radius = 18
End With
Then
ActiveSheet.Shapes.Range(Array("Picture 49")).Select
Selection.ShapeRange.Glow.Radius = 0
With Selection.ShapeRange.Glow
.Color.ObjectThemeColor = msoThemeColorAccent2
.Color.TintAndShade = 0
.Color.Brightness = 0
.Transparency = 0
.Radius = 0
End With
End If
If
ActiveSheet.Shapes.Range(Array("Picture 49")).Select
Selection.ShapeRange.Glow.Radius = 0
With Selection.ShapeRange.Glow
.Color.ObjectThemeColor = msoThemeColorAccent2
.Color.TintAndShade = 0
.Color.Brightness = 0
.Transparency = 0
.Radius = 0
End With
Then
ActiveSheet.Shapes.Range(Array("Picture 49")).Select
Selection.ShapeRange.Glow.Radius = 0
With Selection.ShapeRange.Glow
.Color.ObjectThemeColor = msoThemeColorAccent2
.Color.TintAndShade = 0
.Color.Brightness = 0
.Transparency = 0.599999994
.Radius = 18
End With
End If
End Sub
Jak říkám, bohužel mi toto makro nefunguje. Fungovalo, než jsem začla podmínkovat s IF a THEN (což jsem našla zde a děkuji za to), ale nevím asi úplně přesně jak to použít. Děkuji za případné rady.
Přidáno: 06.01.16 21:34
To Andrea: Nejprve je potřeba reakce na událost klik na obrázek:
Sub MakroReagujeNaKliknutiNaObrazek_ImageClick()
Dim sht As Worksheet
Dim shp As Shape
Set sht = ActiveSheet
Set shp = sht.Shapes(1)
' spustení příslušného makra
shp.OnAction = "Makro1"
End Sub
pak správně použít
It then elseif
Přidáno: 14.08.16 08:51
Dobrý den, asi mám dlouhé vedení, ale pořád mi to nefunguje. Potřeboval bych makro, které se aktivuje, když udělám double-click na jakoukoliv buňku sloupce "G". Můžete mi prosím poradit jak to mám zapsat? Mimochodem, zkoušel jsem všechny vzorové makra na double-click, ale nefunguje mi žádné. :-(
Přidáno: 23.12.16 06:49
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 |