dnes je 21.12.2024

Input:

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

26.10.2011, , Zdroj: Verlag Dashöfer

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

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