Doplněk Kalendář
Přidal ad excel, 25.02.2009
Vkládání datumu do buňky patří k častým úlohám. Asi každý uživatel zná funkci DNES() vracející aktuální datum. Nicméne nezřídka požadujeme, aby "dnes" bylo zítra "včera". Pro tyto účely slouží ke vložení pevného datumu klávesová zkratka Ctrl + ; (středník). Co když ale potřebujeme načíst datum až na základě pohledu do kalendáře (příští středa, za 14 dní, poslední sobota v červnu, ...)?
Podrobné novinky
Vkládání datumu do buňky patří k častým úlohám. Asi každý uživatel zná funkci DNES() vracející aktuální datum. Nicméne nezřídka požadujeme, aby "dnes" bylo zítra "včera". Pro tyto účely slouží ke vložení pevného datumu klávesová zkratka Ctrl + ; (středník). Co když ale potřebujeme načíst datum až na základě pohledu do kalendáře (příští středa, za 14 dní, poslední sobota v červnu, ...)?
Jako první se nabízí otázka, kde vzít kalendář. Jednou z možností je sáhnout si pro Ovládací prvek Kalendář (Calendar, je potřeba jej ručně přidat v průběhu instalace samotných Microsoft Office, viz součásti Microsoft Access), případně roletkovou verzi kalendáře představovanou prvkem Microsoft Date and Time Picker (DTPicker, MSCOMCT2.OCX, nutná registrace v systému příkazem regsvr32.exe MSCOMCT2.OCX). Na listu mám bohužel špatnou zkušenost se zobrazováním prvku Kalendář (občas chybné vykreslení, zpracování vlastnosti Visible aj.), navíc u obou prvků postrádám štábní kulturu odpovídající dnešním standardům na vzhled. Na obrázku je prvek Kalendář vlevo dole a Data and Time Picker vpravo nahoře.

Velmi dobrý nápad měl svého času tuším John Walkenbach, když přišel s nápadem sestavit takový kalendář z prvků plovoucího panelu nástrojů. Já sám jsem si takový v Excelu 2003 udělal a fungoval by dodnes, kdyby pár chytrých hlav nepřišlo v Excelu 2007 s Ribbonem. Ten sice umí přelouskat doplňky ze starších verzí Excelu včetně panelů nástrojů, ale ignoruje původní rozvržení ovládacích prvků (pro kalendář je potřeba 7 sloupců a 7 řádků včetně hlavičky plus místo pro další obslužné prvky). Pás karet přitom nezvládá plovoucí panely a maximálně nabízí 3 řádky pro umístění prvků. Teoreticky by šlo nasadit v Pásu karet prvek Galerie (gallery, viz článek), nicméně možnosti správy ve VBA (přes tzv. Callbacks) jsou velmi omezené. Pokud jste programátory, pak se nabízí zpracování kalendáře ve Visual Studiu. Vidím jako řešení Podokno úloh (TaskPane), které nakonec může být i plovoucí a v něm standardní ovládací prvek kalendáře z Windows Forms. Vraťme se ale na začátek k řešení, které je pro smrtelníky nejschůdnější - vlastní formulář zobrazený v pravou chvíli a na správném místě a bez ohledu na verzi Excelu.
Abych vám čtenářům ušetřil drobná trápení týkající se návrhu a správy prvků pro jednotlivé dny, výpočtu čísla týdnů podle ISO normy, zpracování událostí, oříznutí formuláře o titulkovou lištu a jeho umístění na základě vybrané buňky, nabízím vám dnes doplněk s přístupným kódem VBA ke studiu i použití v praxi. Uvítám komentáře a návrhy rozšíření.



posun o jeden měsíc či rok dozadu a dopředu
vkládá pohled na kalendář do listu
označení pro dnešní den
nastaví kalendář pro zobrazení dnešního dne v kalendáři
zavírá formulář
Doplněk najdete v sekci Ke stažení a zde je přímý odkaz.