Dnes budeme pokračovat v seriálu o filtrech. Navážeme na předchozí díl. 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: Budeme pracovat s rozsáhlejší tabulkou. Stáhněte si sešit 2011-22 Filtry.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:
V předchozím dílu jsme si už dovedli vypsat ke každému sloupci databáze, zda je na něm zapnutý filtr, a kolik je použito kritérií. Rovněž jsme z VBA zjistili, na kterém rozsahu buněk je filtr nastaven. Tuto práci děláme proto, abychom věděli o různých součástkách filtrů, které si mohl nastavit sám uživatel, a v makru se mohli rozhodnout, zda na uživatelova kritéria navážeme.
Dnes se tedy ještě budeme seznamovat se zbývajícími součástkami filtrů, ale už přejdeme k praktickému nasazení.
Připomeňme si 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. Existují sice způsoby, jak si momentální nastavení filtru napřed zapamatovat, a pak jej obnovit, jenže to není nijak snadné, a zvláště můžeme narazit na to, že uživatel filtr uplatnil na jinou část dat, než předpokládáme.
Využijeme malou rutinu z minula, která nám vypisovala součástky existujícího filtru, abychom zjistili zbývající součástky případného uživatelova filtru.
Sešit jste otevřeli s funkčním filtrem, který filtroval podle prvního sloupce.
V rutině SoucastiFiltru1 doplníme výstupy do okna Immediate pro další důležité součástky filtru:
Proti minulému rozpracování rutiny SoucastiFiltru1 jsme…