Dobrý den,
prosím potřebovala bych pomoct s excelem (vba) - v buňce E34 mám rozevírací seznam, který obsahuje hodnoty ANO, NE nebo prázdné. Pokud je zvoleno ANO skryje mi určité řádky, jinak jsou řádky odkryty. Mám napsané makro které tohle dělá viz níže, problém ale nastane když udělám změnu kdekoliv jinde na listu (napíšu něco do jiné buňky) tak se spustí příslušný úkon podle toho co je ve výše zmiňované buňce označeno (ANO,NE). Ono samozřejmě neskrývá/neodkrývá řádky - protože hodnota buňky se nezměnila, ale překlikne se na buňku F34 (pokud ten řádek v kódu smažu tak označí tu oblast řádku podle toho co je uvedeno v kódu). Je to docela protivný protože když jsem např. na řádku 150 tak mě to při každé změně jakékoliv buňky hodí na F34. Asi tam mám špatně nastaveny ty Application.EnableEvents ale vůbec nevím jak to upravit, zkouším to už třetí den a začínám být z toho zoufalá :-/
Níže přikládám makro, moc děkuji za jakoukoliv pomoc.
Andrea
Private Sub worksheet_change(ByVal target As Range)
Set target = Range("E34")
If target.Value = "ANO" Then
Application.EnableEvents = False
Rows("35:49").Select
Selection.EntireRow.Hidden = True
Range("F34").Select
Application.EnableEvents = True
Else
Application.EnableEvents = False
Rows("34:50").Select
Selection.EntireRow.Hidden = False
Range("F34").Select
Application.EnableEvents = True
End If
End Sub
Excel (vba) - změna v buňce spustí makro
Re: Excel (vba) - změna v buňce spustí makro
Co takto viz soubor?
- Přílohy
-
- Skryj Řádky.xlsm
- (13.83 KiB) Staženo 129 x
Re: Excel (vba) - změna v buňce spustí makro
Super, funguje dokonale, moc děkuji
Re: Excel (vba) - změna v buňce spustí makro
Jako základ postačí, lze to však udělat hned v několika ohledech elegantněji:
1) nemusí se použít rozevírací seznam s volbou hodnoty, stačí prosté kliknutí na buňku s efektem kurzoru ručičky (odkaz) nad buňkou - postačí mít nad buňkou neviditelný obrázek a přiřadit mu makro
2) pro snadnou manipulaci - vkládání dalších řádků do skrývané oblasti či mazání řádků bez nutnosti přepisovat čísla řádků skrývané oblasti ve VBA - vřele doporučím použít vlastní název buňky
3) není nutné používat cyklus (If ... Then ... Else) stačí prostá negace (NOT)
4) lze použít buňku VŠE, po jejímž kliknutí se všechny definované oblasti skryjí či objeví, dle předešlého stavu, stačí jednoduchý kód (VBA)
OBRÁZKY
NEVIDITELNÝ OBRÁZEK
1) nemusí se použít rozevírací seznam s volbou hodnoty, stačí prosté kliknutí na buňku s efektem kurzoru ručičky (odkaz) nad buňkou - postačí mít nad buňkou neviditelný obrázek a přiřadit mu makro
2) pro snadnou manipulaci - vkládání dalších řádků do skrývané oblasti či mazání řádků bez nutnosti přepisovat čísla řádků skrývané oblasti ve VBA - vřele doporučím použít vlastní název buňky
3) není nutné používat cyklus (If ... Then ... Else) stačí prostá negace (NOT)
4) lze použít buňku VŠE, po jejímž kliknutí se všechny definované oblasti skryjí či objeví, dle předešlého stavu, stačí jednoduchý kód (VBA)
OBRÁZKY
► Zobrazit spoiler
NEVIDITELNÝ OBRÁZEK
► Zobrazit spoiler
Re: Excel (vba) - změna v buňce spustí makro
Ještě jsem svůj postup trochu vylepšil a pokud potřebujete více oblastí které skrýváte (kolaps) a odkrýváte (expand), jistě vám toto vylepšení přijde vhod:
- zbavme se nadbytečných příkazů: ActiveSheet., protože každá tečka v příkazech prodlužuje časovou náročnost vykonání + nemusíme psát příkaz Call, v tom případě se pro parametry nesmí psát závorky!
- použijme makro s parametry (tedy technicky vzato proceduru), sice jakmile v Excelu ve VBA napíšeme sub s parametry, tak se nám ztratí z přehledu maker pro vybrání (zde technicky zdatní uživatelé / programátoři - jistě zavětří, protože na českém webu jsem o tom nenašel jedinou zmínku a tak nejspíš minimálně v ČR tento trik nebude známý), ale pomocí malého hacku jsou možná i "makra" s parametry. Do tabulky si je zapíšeme ručně (či zkopírujeme a vložíme), tvar zápisu pro "makro" se 2 řetězcovými parametry:
Pokud parametr nebude řetězec (string), bude číslo bez uvozovek!
- zbavme se nadbytečných příkazů: ActiveSheet., protože každá tečka v příkazech prodlužuje časovou náročnost vykonání + nemusíme psát příkaz Call, v tom případě se pro parametry nesmí psát závorky!
- použijme makro s parametry (tedy technicky vzato proceduru), sice jakmile v Excelu ve VBA napíšeme sub s parametry, tak se nám ztratí z přehledu maker pro vybrání (zde technicky zdatní uživatelé / programátoři - jistě zavětří, protože na českém webu jsem o tom nenašel jedinou zmínku a tak nejspíš minimálně v ČR tento trik nebude známý), ale pomocí malého hacku jsou možná i "makra" s parametry. Do tabulky si je zapíšeme ručně (či zkopírujeme a vložíme), tvar zápisu pro "makro" se 2 řetězcovými parametry:
Kód: Vybrat vše
'jmenomakra "parametr1", "parametr2"'
Pokud parametr nebude řetězec (string), bude číslo bez uvozovek!
Re: Excel (vba) - změna v buňce spustí makro
Ještě upozorňuji na to, že tento malý hack (trik):
... není kompatibilní s uložením Excelu ve formátu*.xlsb(binarní forma uložení Excelu s podporou maker), dělá to neplechu (chyby)!
Ovšem formát: *.xlsm (uložení Excelu s podporou maker) je zcela bez problémů a: *.xls (binární formát Excelu do roku 2003 - podporuje i makra) je také v pohodě!
Jen pokud budete konvertovat *.xls >>> *.xlsm, je potřeba smazat tato volání procedur s parametry z listů a zadat je znova, protože při této konverzi vám Excel tato volání přejmenuje (a tak přestanou fungovat), nejspíš Excel narazí při konverzi na stejné hodnoty, které neumí rozlišit a tak přejmenovává tato nedokumentovaná volání "maker" s parametry.
Jinak ale vše funguje zcela bezproblémově - stačí jen používat*.xlsmnebo případně zastaralý (kompatibilní formát do roku 2003, pokud máte potřebu)*.xls
Kód: Vybrat vše
'jmenomakra "parametr1", "parametr2"'
... není kompatibilní s uložením Excelu ve formátu*.xlsb(binarní forma uložení Excelu s podporou maker), dělá to neplechu (chyby)!
Ovšem formát: *.xlsm (uložení Excelu s podporou maker) je zcela bez problémů a: *.xls (binární formát Excelu do roku 2003 - podporuje i makra) je také v pohodě!
Jen pokud budete konvertovat *.xls >>> *.xlsm, je potřeba smazat tato volání procedur s parametry z listů a zadat je znova, protože při této konverzi vám Excel tato volání přejmenuje (a tak přestanou fungovat), nejspíš Excel narazí při konverzi na stejné hodnoty, které neumí rozlišit a tak přejmenovává tato nedokumentovaná volání "maker" s parametry.
Jinak ale vše funguje zcela bezproblémově - stačí jen používat*.xlsmnebo případně zastaralý (kompatibilní formát do roku 2003, pokud máte potřebu)*.xls
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 9
- 1157
-
od mmmartin
Zobrazit poslední příspěvek
29 srp 2023 16:47
-
- 3
- 1590
-
od Alferi
Zobrazit poslední příspěvek
07 říj 2023 22:08
-
- 11
- 2337
-
od petr22
Zobrazit poslední příspěvek
15 zář 2023 12:48
-
- 0
- 1400
-
od draxxx
Zobrazit poslední příspěvek
25 říj 2023 20:49
-
- 0
- 1784
-
od DanteJo94
Zobrazit poslední příspěvek
14 srp 2023 10:26
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 22 hostů