Za makro lze pokládat pouze proceduru bez parametrů, umístěnou ve standardním modulu. Jen takové procedury jsou obsahem nabídky maker pro celý sešit. Pokud zůstane vaše procedura jako kód VBA v jednom listu, nebude z jiných listů viditelná ani volatelná. Přemístěte proceduru do standardního modulu a pak ji můžete volat ze všech listů vašeho sešitu.
Bohužel se mi potvrdilo, že zmíněný terminologický zmatek pochází už přímo z dílny Microsoftu. Přesto mi vaše odpovědi přinesly námět k řešení mého výkladového problému.
Pro kontingenční tabulku se u nás zavedla běžně používaná zkratka KT (i když tam, kde se jmenuje Pivot Table, té zkratce nikdo neporozumí). Název Excel Table pro ListObject se mi líbí, a z něj jsem si odvodil - podle vzoru KT - vlastní zkratku ET, kterou čtu jako Excel Table. Dobře se to píše, vyslovuje i používá pro odlišení pojmů. Dík za inspiraci a nabízím k využití!
Obecně se to řeší v události Worksheet_SelectionChange otestováním průniku oblasti Target s vybranou oblastí:
If Intersect(Target, Oblast) is Nothing Then Exit Sub
Nejsem v situaci, abych se honil za supernovinkami v Excelu. Pokud si nehraji sám pro sebe, vyvíjím aplikace pro druhé, a tam musím předpokládat heterogenní prostředí z hlediska používaných verzí Excelu. Je pro mne zcela běžné, že moji uživatelé pracují s E-2007. Občas stále ještě dostávám požadavky také od lidí se starým dobrým E-XP. Z toho pohledu pro mne budou funkce, jako je MAXIFS, ještě dlouho v oblasti praktického nepoužitelna. Na druhé straně jsem rád, když se o novinkách dozvím. Proto dík za info.
Funkci MAXIFS jsem ve svém E-2016 nenašel (ne že by se mi nehodila). Vyřešit požadavek lze i bez maticového vzorce s pomocným sloupcem, kam vyberu hodnoty, splňující podmínku, a z tohoto sloupce získám požadované maximum pomocí funkce MAX (případně MAXA).
Až teď jsem si všiml, že od začátku vlákna je k dispozici obsah příslušné událostní procedury. Jev, který popisujete, nejspíš souvisí s tím, že z jiného aktivního listu došlo ke změně na listu, k němuž patří ta procedura. V důsledku toho pak špatně zafunguje příkaz
ActiveSheet.Protect Password:="HESLO"
který zamkne list, z nějž byla změna realizována. Doporučuji příkaz upravit na
ThisWorkbook.Sheets("JménoListu").Protect Password:="HESLO"
Luštíme zbytečný hlavolam. Chybí nám dvě informace:
1. jak se volá to zamykání (nejspíš Worksheet_Change, ale mohlo by to být i jinak),
2. jak je to "zamykací" makro napsané.
To snad není firemní tajemství, takže by mělo jít zveřejnit.
S vysokou jistotou bude chyba mezi klávesnicí a židlí .
Dost dobře není možné, aby zamykání listů vedlo na zamčení celého sešitu. Jde o dva odlišné objekty. Nevhodně napsané, případně špatně umístěné makro ale může zamknout i listy v jiných otevřených sešitech. Bezpečné je umístění makra v rámci příslušného listu, který se má zamykat. Pokud zamykám aktivní list, měl bych si ověřit, zda je aktivní právě ten, který chci zamknout. Víc bez ukázky neumím říct.
Před časem tu byl zveřejněný dotaz na změněné chování nemodálních formulářů, které ponovu přestanou být viditelné po přepnutí na jiný sešit. Tento jev tvrdě postihl také moje doplňky, které nabízely své služby právě pomocí nemodálních formulářů.
Poměrně nedávno jsem našel odpověď na podstatu tohoto jevu na www.jkp-ads.com/Download.asp v utilitě ModelessFormOnTop. Její využití mi umožnilo plně obnovit funkčnost mých doplňků pro E-2013 i E-2016 (všechny starší Excely se chovají k nemodálním formulářům tak, že je nechávají trvale OnTop).
V běžném povídání o Excelu se pojem "tabulka" používá pro tři odlišné datové struktury. Když si odmyslím kontingenční tabulku, která má zavedený přívlastek, zbývají dva druhy. Jedním je datově (a zpravidla i graficky) uspořádaná oblast buněk. Druhým je tabulka, spojená s objektem ListObject. Oběma se říká tabulka, ale jde o pojmy s významně odlišnými vlastnostmi. Pro popisy obsahu a chování potřebuji oba pojmy odlišit. Existuje u nás zavedené terminologické odlišení těchto dvou odlišných datových struktur?
Příklad, doplněný o Alova doporučení (ale s jinými vzorci), uvádím v příloze. Realizuje jak zaplnění prázdných řádků, tak dynamické zkrácení ověřovacího seznamu o tyto řádky.
Mimochodem, postřehl jsem, že již není nutné excelské sešity v příloze balit do zipu. Příjemná změna!
Dík za podnět. Poslal jsem jádro problému. V reálu je to součást sešitu s makry, kde jsem to sdružení zbývajících jmen udělal přes Worksheet_Change a Sort. Váš vzorečkový postup se mi ale líbí víc, protože se obejde bez makra. Dík za další nápad!
Došlo mi, že grafika toho sešitu nebude ve starém Excelu fungovat dobře. Proto nedoporučuji sešit zkoušet v XP nebo v ještě starších Excelech.
Před časem jsem pro účely školení napsal sešit s názornou demonstrací práce vybraných funkcí. Zkuste se podívat na listy Skalár v příloze. Lze tím plně nahradit jak COUNTIFS, tak SUMIFS a funguje to i ve starých Excelech.
Moc nerozumím, proč, ale zabralo to! Dík za pomoc!
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.