Úvodní stránka · Fórum · Ke stažení · Odkazy · Links (EN, DE, CZ, SK) 7. září 2010, Regína
Menu
Úvodní stránka
Časté dotazy k Excelu
Fórum
Kategorie článků
Databanka kódů
Ke stažení
Svět Excelu v RSS
Odkazy
Kontakt

Excel - funkce na listu
Excel - funkce VBA
Excel - klávesové zkratky
Excel - znaky, klávesnice
Excel - standardní barvy
Excel - slovník menu
Excel - konstanty
Excel - technické údaje
DVD Servis Office
Excel menu 2003 (Ribbon)
Offset Statistic

Chat
Sponzorované odkazy
Přihlášení
Přezdívka

Heslo



Nejste členem?
Zaregistrujte se co nejdříve.

Zapomněli jste heslo?
Nechte si poslat nové.
Kdo je online
Hosté online: 2
Žádný člen není online

Registrovaní členové: 536
Neaktivovaní členové: 48
Nejnovější člen: Libor
Pohotovost Excel
Excel VBA - první pomoc

ICQ status

Skype
Hry online
Sudoku
Sudoku
Sudoku
Sudoku
Excelplus.NET
Excelplus.NET - RSS 0.91 spampoison.com
Google Pagerank - excelplus.netGoogle Pagerank Antispam.er.cz
Statistiky

Doplněk Kalendář

Ke stažení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.

Komentáře

jusepe , 01.03.2009
Krása snoubící se s nádherou. Moooc děkuji.

Byla by dobrá korekce polohy formu, pokud neni maximalizovane okno sešitu v aplikaci.

Vůbec nechápu proč řešíte polohu formu přes funkci Min...? Je to osetreno pro pripad ze je vybrana oblast více buněk?
Me.Left = WorksheetFunction.Min(RL + 35 + Selection.Cells(1).Offset(0, 1).Left, RR - Me.Width)
Me.Top = WorksheetFunction.Min(RT + 40 + Selection.Cells(1).Offset(0, 1).Top, RB - Me.Height)




Funguje to fakt užasně...
Náměty na rozšíření:
1. svátky - např. v rámečku
2. načtení datumu z activ. buňky (pokud je) a inicializace kalendare na měsíc dle datumu
j.
ad excel , 01.03.2009
Neminimalizované okno pravděpodobně neošetřím. Je to alchymie a dost dobře to nejde (nemluvě o lupě, rozdělení okna atd.).
Funkce MIN je tam proto, aby dialog zůstal na monitoru a "nevyjížděl" ven dole a vpravo.
Se začleněním svátků (po najetí myškou na den) a načtením aktivního datumu počítám.
jusepe , 01.03.2009
S oknem se vypořadám...

Po úpravách se mi procedura "lblControl_Click" provádí opakovaně aniž k tomu je důvod.
Po vložení datumu na sheet mi jede Worksheet_Change s Application.EnableEvents = False, ale stejně se mi vrátí do "lblControl_Click". Může to být chováním třídy? S třídama se moc nekamaradim...smiley
jusepe , 01.03.2009
Jěště jedna otázečka.

Formulář je nemodální, jak se dá aktivovat sheet aby šlo např. mazat klávesou delete?
ad excel , 02.03.2009
K dispozici je verze 0.9c. Přidány byly svátky a zvýraznění datumu podle aktivní buňky. Formulář z důvodů další funkcionality nyní předkládám v základní formě modální. Přiklání se tak více koncepci dostupnosti z kontextového menu (bez titulkové lišty, pro aktivní buňku, nepřesunutelný).
jusepe , 02.03.2009
Svátky podle jmen taky užitečná věc.
Měl jsem na mysli svatky jako pracovní volno, proto ten rámeček.
Moc neprefuruji spouštění z kontext. menu a jěště jako modální. Příhodnější mi příjde zjevení u buněk typu date, nebo s možností volby u všech buněk.
Načtení datumu z activ. buňky (pokud je) a inicializace kalendare na měsíc dle datumu mi příjde dost užitečné, na dnes se lehce dostanu tlačítkem.
jusepe , 02.03.2009
Objevil jsem jednu vec, pri načtení datumu z buňky nekorektně řadí na dny v týdnu. Např. 17.3.2009 zobrazuje jako Čt, ale je to úterý...
ad excel , 04.03.2009
Chybka byla (doufám) opravena cca hodinu po zveřejnění aktualizace, nad prvky "pracovního" kalendáře pouvažuji, ono musí to mít svou hranici, svého času jsem měl kalendář o dvou záložkách cca 10 x 10 cm, kde byly i astrofunkce, výpočty s časem atd. Kód je dostupný, není problém zobrazovat titulkovou lištu a změnit modalitu. Další příspěvky na zlepšení prosím soukromě přes ICQ, mail apod.
jusepe , 04.03.2009
Každopádně diky, me to hodne pomohlo, a jako studijni materiál výborné. Všichni kdo dokáži takto rychle vytvořit něco užitečného mají můj obdiv. Mnoho zdaru...smiley

Přidat komentář

Pro přidání komentáře musíte být přihlášeni.

Hodnocení

Musíte být přihlášeni, abyste mohli hodnotit.

Prosím přihlašte se nebo se zaregistrujte.

Výborný Výborný 100% [2 Hlasů]
Velmi dobrý Velmi dobrý 0% [Žádné hlasy]
Dobrý Dobrý 0% [Žádné hlasy]
Nevalný Nevalný 0% [Žádné hlasy]
Bídný Bídný 0% [Žádné hlasy]
... nejlépe se zpracovávají tabulky mléčné čokolády