dnes je 21.12.2024

Input:

Excel 2007: Makra – VBA – Filtry – 4. část

10.11.2011, , Zdroj: Verlag Dashöfer

Dnes budeme pokračovat v seriálu o Filtrech. Filtrování v Excelu patří stále k velmi mocným nástrojům a od verze 2007 byly jejich schopnosti dále rozšířeny o výběr podle seznamu. Z důvodu kompatibility ke starším verzím zatím nebudeme tuto novou funkčnost příliš používat, protože využívá novou kolekci ve filtrech, kterou starší verze neznají. I tak budete mít z ovládnutí filtrů ve VBA velký užitek.

Podkladová úloha: Pracujeme již počtvrté se stejnou rozsáhlejší tabulkou. Stáhněte si sešit 2011-23 Filtry.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:

Umíme vypsat ke každému sloupci databáze, zda je na něm zapnutý filtr, a kolik je použito kritérií. Rovněž umíme z VBA zjistit, na kterém rozsahu buněk je filtr nastaven.  Minule jsme už dovedli vypsat ke každému sloupci s filtrem, jaké má kritérium 1, případně kritérium 2 a logický operátor mezi nimi.

Poté jsme sestrojili praktickou funkci, která nastavovala do filtru hodnotu v buňce selektoru. To umožňovalo realizovat příkaz typu: „Vyfiltruj mi všechny Hlaváčky. Takové, jaký je v aktivní buňce.“

Dnes se pokusíme rozvinout již fungující makro k dalším finesám.  Abychom uživatele nenutili používat tlačítko jednosměrně, upravíme makro tak, že pokud po předcházejícím použití tlačítka makro zjistí, že filtr v tomto sloupci je již nastaven na shodnou hodnotu, budeme to pokládat za pokyn, abychom v tomto sloupci filtr nastavili na „Zobrazit vše“. Takže pokud jsou vyfiltrováni samí Hlaváčkové, a bude to vypadat jako v následujícím obrázku, filtr s Hlaváčkem vypneme:

Minule jsme si uváděli jednu potíž s filtry na listu, pokud tam nějaký filtr je nastaven. Kdyby s nastavením filtru uživatel sám nic nedělal, mohli bychom předpokládat, že rozsah filtru je nastaven naším makrem na celou databázi. Jenže uživatelé jsou lid neukázněný, bohémský a neuvěřitelně důvtipný v navozování nesmyslných situací. Kdybychom chtěli navazovat na nějaké nastavení, které předtím měl v rukou nepředvídatelný uživatel, nejspíš bychom špatně dopadli. Ve výše uvedeném případě však

Nahrávám...
Nahrávám...