Potřeboval jsem vytvořit prezentační seznam, který by nabízel jména z členského seznamu, ale tak, aby tato nabídka již nenabízela jména, která byla do prezentačního seznamu dříve vložena. To má zabránit duplicitní prezentaci. Napsal jsem jednoduchý příklad, který to umí, ale má jednu divnou vlastnost. Nabídka z ověření pracuje správně, ale ověření nereaguje na ruční vstup, který se neshoduje s povolenými jmény.
Podobné chování služby Ověření dat jsem zatím nepotkal. Ví někdo, čím je to způsobeno a co se s tím dá případně dělat?
Nikdy jsem nepotkal někoho, kdo by dokázal napsat takovou zrůdu se vzorcem delším než je povolený limit. Hádám na nějakou chybu v sešitu. Bez ukázky těžko radit, co s tím.
Výsledek, který nabízí elninoslov, vypadá dobře, ale zobrazená položka není číslem, se kterým by šlo dál počítat. Pokud to nevadí, převod na text se vzhledem záporného času lze provést několika různými postupy. S použitím funkce HODNOTA.NA.TEXT (TEXT eng.) to může např. vypadat takto:
=KDYŽ(B2<B1;"-";"")&HODNOTA.NA.TEXT(ABS(B2-B1);"[h]:mm")
Položka typu Datum/Čas je v podstatě číslo, jehož celá část udává datum ve dnech a jehož zlomková uvádí čas v rámci dne. Z toho pohledu nic nebrání tomu, abychom mohli dvě takové položky mezi sebou řádně odečíst. Problém je se záporným výsledkem, který se sice správně vypočítá, ale Excel ho nechce v běžném časovém formátu zobrazovat (to umí v časovém systému 1904, před jehož použitím ale důrazně varuji). Lepší je při zobrazení pracovat s absolutní hodnotou rozdílu a zápornost výsledku ošetřit zvlášť.
To je hezký příklad odlišné filozofie vzorců a VBA. Pokud se hodnoty na list2 promítají pomocí vzorců v buňkách listu2, pak zrušení hodnot ve zdroji zruší také hodnoty na příjmu. Asi jako když se díváte na televizi. Když přestane pracovat vysílač, zhasne vám obrázek. Když chci hodnotu na listu2 ponechat, musím včas změnit vzorec na hodnotu. Pak už se ale nová hodnota z listu1 na list2 nedostane (vzorec je fuč). Pokud to nevadí, je převod vzorce na hodnotu řešením.
VBA pracuje jinak. Popadne hodnotu z listu1 a namaluje ji na list2. Jde o jednorázový krok. Když smažu zdroj, list2 dál hodnotu ukazuje. Přenos nové hodnoty na list2 ale musím ve VBA opakovat pokaždé, když se má něco změnit. Z vašeho zadání není jasné, jak se to má chovat v čase.
Posílám něco pro inspiraci s využitím ověřovacích seznamů. Je tam i kousek VBA kvůli tomu, že ověřování není moc dobrá technika. Ale v podstatě to běhá i bez toho VBA.
Word prakticky už léta jako programovatelný nástroj nepoužívám. Ze starých zkušeností jsem si nevybavil žádné problémy ve spolupráci Excelu s Wordem. Teď jsem na zkoušku vybral poměrně složitou hlavičku z Excelu, uložil ji Ctrl-C do schránky a Ctrl-V ji přenesl do Wordu jako jeho tabulku. To mi prošlo bez problémů, i s tím, že jsem mohl následně tu tabulku ve Wordu volně editovat.
Když jsem se rozhodl převést tu tabulku na text, provedla to nabídka Wordu Nástroje tabulky /Rozložení / Převést na text opět bez problémů. Celý ten průzkum (opět opakuji, že s Wordem pracuji výhradně jako s prostým textovým procesorem) mi trval cca 5 minut. Nějak nevím, v čem je problém. Když to ručně jde a když si k tomu mohu spustit makrokameru, neměl by být problém potřebná makra spáchat.
Budu pozorně sledovat diskusi na dané téma, protože jsem se v daném ohledu zatím nikdy ničeho kloudného nedobral. Dlouhou řadu dní, které jsem věnoval studiu úprav ribbonu, shrnu do vlastního poznatku, že mne tato kapitola Excelu na základě mých dosažených výsledků uvedla do pocitu nespokojenosti a neúspěšnosti. Otevření tématu zde mi třebas prozradí důvod mých potíží.
Místo pokusů o vytváření vlastních ribbonových karet jsem začal používat formuláře (MS Forms), pomocí nichž bez problémů simuluji staré-dobré lišty nástrojů, o které mne ribbonový Excel připravil. Tato technika mi plně vyhovuje a např. pro komunikaci s doplňky se chová víc než uspokojivě.
Napsaný kód sice poskytuje správný námět na způsob řešení, ale použít se v této podobě nedá. Předpokládám, že existují dvě řídící buňky, které při změně hodnoty v nich mají vyvolat změnu velikosti buněk v nějaké úplně jiné oblasti.
Pro takto popsanou úlohu by fungovalo např. toto:
Private Sub Worksheet_Change(ByVal Target As Range)
' změna velikosti buněk v oblasti D10:H20
' pomocí změny řídících hodnot v A1:A2
' buňka A1 obsahuje výšku buněk pro oblast
' buňka A2 obsahuje šířku buněk pro oblast
Select Case Target.Address(0, 0)
Case "A1": Range("D10:H20").RowHeight = Range("A1").Value
Case "A2": Range("D10:H20").ColumnWidth = Range("A2").Value
End Select
End Sub
Ladysi, rád čtu, že jsi! Už dávno jsem neměl tu čest o tobě slyšet. Tipoval jsem někoho takového, jako ty, kdo by na to mohl přijít. Udělal jsi mi radost! Jinak nepokládám za důležité, aby každá věc měla své okamžité použití. Stačí, když o ní vím, a časem se to třebas hodí.
Skvělý nový rok!
Dobrá rada! Jen to nezkoušejte najít v přímé nápovědě k Excelu - z ní ten popis jaksi vypadl . Strýček Google je v této otázce nepoměrně štědřejší! Ale i české heslo "excel rozšířený filtr" je na netu poměrně štědré (a navíc bez angličtiny).
krakonosek napsal/a:
2Vovka, ale vse na co se tazu tak je k excelu
Před časem jsem si dal dohromady různé postupy, jak získat seznam unikátních hodnot z obecného seznamu. Jen jedna z technik v tomto mém přehledu vede na použití maticového vzorce. Pokud mám tu potřebu, chodím si sem pro rozumy. Od té doby, co jsem si to poskládal, nemám potřebu chodit jinam.
K tomu mohu dodat jen to, že nástroj LightShot má právo žít vlastním životem, nezávislým na Excelu. Ten nástroj jsem dosud neznal a jen těžko ho proto mohu soudit. Navíc - toto fórum je na téma Excel, a k Excelu jsem se vyjádřil.
Formát, jak je napsaný, produkuje pro 0 až 9 hodin dvě mezery zcela právem: první z nich je mezera mezi oběma částmi časového údaje, druhá je produkována levým znakem "h" v použitém formátu. Pro vynechání té druhé mezery by formát musel vypadat "yyy-mm-dd h-mm-ss"
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.