Nevím, jak jste pochopil, co jsem napsal. Mínil jsem to, co je v příloze. Jestli to není to, co potřebujete, pak pro změnu nerozumím já vám.
Zkuste podmíněné formátování, kde v podmínce výběru využijete funkci POZVYHLEDAT, případně SVYHLEDAT
Google pro mne nestojí na temné straně. Představuje pro mne něco jako návštěvu restaurace, pro kterou se musím oholit a převléknout, proti kuchtění z vlastních surovin na vlastní plotně. Přiznám se, že to druhé dělám radši.
Dokonce řeknu víc. Kdybych měl srovnat online nápovědu Excelu s dotazem na Googlu, pak dám zpravidla přednost strýčku Googlovi.
Vůbec jste nepochopil smysl mého příspěvku: nejde o to, co doplněk dělá, ale že použití algoritmu v doplňku výrazně degraduje jeho rychlost. A implicitní otázka zněla, jestli pro ten efekt má někdo rozumné vysvětlení.
Jinak opravdu nemám potřebu šťourat se v cizích zamčených listech. Jako půvabné mi připadlo to, že tu petlici na králírárně, za kterou hesla pro listy pokládám, lze překonat vlastními prostředky Excelu.
Ten vzoreček je v tomto případě možné napsat i bez příkladu od tazatele (i když příklad by měl být povinností). Za předpokladu, že v E3 je čas v jednotkách dny a zavedu si hodinu jako počítací jednotku, může vzorec vypadat asi takto:
=KDYŽ(E3*24<=4,5;E3;KDYŽ(E3*24<=10;E3-1/48;KDYŽ(E3*24<=12;E3-1/24;"????")))
Záměrně jsem do vzorce vložil ???? pro čas přes 12 hodin, který tazatel nedefinuje. A ještě jedna věc: buňka se vzorcem musí být naformátovaná pro zobrazení času (např. h:mm).
Na netu jsem před časem našel půvabný algoritmus ve VBA, který funguje jako univerzální šperhák na hesla jak pro strukturu sešitu, tak pro obsah listů (nikoliv ale pro hesla na projektu VBA). Funkci jsem ověřil a mohu potvrdit její účinnost i rychlost.
Rozhodl jsem se proceduru upravit do podoby doplňku, abych ji měl víc po ruce. Při této příležitosti jsem se pokusil o její další zrychlení vhodnými zásahy do původního algoritmu. Účinek těchto zásahů jsem chtěl vyhodnotil pomocí zabudovaného měření doby trvání.
Výsledek mne nemile zaskočil. Výsledek mých zásahů do algoritmu se projevil jen zcela bezvýznamným zrychlením. Zato použití shodně zaheslovaného sešitu pro srovnávací testy mi poskytlo možnost porovnat rychlost přímého využití algoritmu z paralelně otevřeného sešitu s jeho využitím v podobě doplňku.
Efekt, který se dostavil, jsem nečekal a také jsem se o možnosti podobného účinku nikde nedočetl. Zaheslovaný sešit má tři listy, každý zamčený jiným heslem, a k tomu je tento sešit zamčený jak pro strukturu, tak pro okna dalším nezávislým heslem. Sešit s prolamovacím algoritmem mám ve dvou provedeních: (1) jako xlsm, (2) jako xlam (doplněk). Obsahově jsou obě provedení totožná.
Rychlost práce aktivovaného doplňku (xlsm+xlam): 32,023 sec
Rychlost práce souběžně otevřených sešitů (xlsm+xlsm): 7,676 sec
Jinými slovy totožný algoritmus, spuštěný z doplňku, mi běží čtyři a půlkrát pomaleji, než stejný algoritmus z paralelně otevřeného sešitu. Tomu efektu nerozumím a neumím si ani představit jeho příčinu.
Tři dny jsem do tohoto vlákna nevstupoval, protože jsem se obával obsahu reakcí. Naštěstí zůstaly ve věcné rovině. V jednom se s nimi shoduji: z online nápovědy se stala téměř nepoužitelná směsice odkazů na často pochybné zdroje.
V tom směru jsem byl donucený online režim nápovědy vypnout a trvale přejít do offline režimu. To naštěstí jde a k výsledkům nápovědy z offline režimu se vztahují moje poznámky.
V offline podobě zůstává nápověda v rovině, která mi vyhovuje. Ze stejného zdroje čerpá své texty i ObjectBrowser (bohužel ne zcela důsledně). Chyby v těchto popisech mi ale samozřejmě vadí. Na jednu z takových chyb jsem v tomto vlákně upozornil. Že tím vyvolám diskusi o užitečnosti strýčka Google, jsem opravdu netušil.
Domnívám se, že by mělo stačit, když při vyhodnocení nesouvislé oblasti použijete kolekci Areas:
Dim Oblast As Range, Area as Range, Bunka as Range
For Each Area in Oblast.Areas
For Each Bunka in Area.Cells
naplnění formátů
next Bunka
Next Area
Dokonce si dodatečně myslím, že jednotlivé Areas není nutné porcovat na buňky.
Nechce se mi věřit, že mi někdo soudný může doporučovat, abych hledal na Googlu správnou syntaxi jednotlivých příkazů. K tomu je zabudovaná nápověda určená a měla by bezpečně sloužit, a to okamžitě a bezvýhradně. Pokud jdu hledat na Google, hledám způsob řešení a použitelný algoritmus, a ne přiblblou syntaxi pro jednu metodu. V takovém případě jsem ochotný do hledání investovat i delší čas. Hledat ale dlouhé minuty na Googlu, jak napsat příkaz pro Sort, bych pokládal za projev vlastní debility. Navíc na Googlu najdu často ještě větší kraviny než v helpu...
Zas tak pochmurná, jak to vidí xlnc, mi kauza s nápovědou pro VBA v Excelu nepřipadá. Ano, českou nápovědu jsem kdysi našel v E-97. Tehdy jsem o VBA věděl tak málo, že mi ta půlka připadla jako celek. Zcela jistě platí, že není šprochu, aby na něm nebylo pravdy trochu (a někdy i víc než trochu). Vím o řadě dalších prohřešků nápovědy proti mravopočestnosti. Ale 10% její zcestnosti mi připadá přece jenom jako příliš kruté číslo. Třicet procent nedbalosti v překladu a ověření správnosti pro českou část návodu ale pokládám za dost reálný popis stavu.
Na druhé straně bych takový kritický pohled viděl jako skvělou příležitost pro vznik excelského bestseleru o chybách v jeho nápovědě. Jsem přesvědčený, že by si takový titul našel spoustu zájemců o jeho získání. Sám bych se postavil do fronty na jeden výtisk pro sebe. Jestli má xlnc situaci zmapovanou, jak o tom píše, mohl by s podobnou publikací významně vstoupit do dějin Excelu.
Nebývá časté, aby nápověda přímo od výrobce produktu obsahovala chyby. V případě nápovědy pro VBA v Excelu to však není tak úplná výjimka. Zejména postihuje jinak skvělý nástroj, kterým je ObjectBrowser, na který je čím dál tím menší spolehnutí. Je to škoda; zažil jsem dokonce časy, kdy celá nápověda pro VBA mluvila česky. Kde ty zlaté časy jsou ?!
Před chvílí jsem narazil na chybu v popisu metody Range.Sort pro vlastnost Orientation. Správně platí, že vlastnost určuje, zda chceme třídit data ve sloupcích (Orientation:=xlSortColumns - setřídí se řádky) nebo v řádcích (Orientation:=xlSortRows - setřídí se sloupce).
Popis pro uvedenou vlastnost je v nápovědě vadný, nenechte se proto mýlit - viz přiložený screen shot.
Píšete to hrozně složitě. Např. "meziobjekt" .Cells je tam nejspíš naprosto zbytečný. Když si napřed nadefinujete oblasti Zdroj a Cil jako Range, můžete pak napsat:
Zdroj.Copy: Cil.PasteSpecial xlPasteValues
Bez dlouhého zkoumání:
- metoda Copy pro objekt Range přenáší buňky včetně formátů; v tom smyslu byste neměl mít s naformátováním přijímající oblasti problém;
- pokud se chcete zbavit vzorců ze zdrojové oblasti, rozložte kopírování na dva kroky: (1) metodou Copy naplňte schránku, (2) metodou PasteSpecial obsah schránky přeneste do cílové oblasti; PasteSpecial se umí vzorců zbavit a buňkám formátování zachovat.
Vážený pane bedho, ve svém dotazu jste napsal: "...požaduje otevření odkazovaného excelu. Tato vlastnost mi přijde poměrně nesystémová...". Z toho lze usoudit, že o zpracování dat máte hodně zkreslené představy, protože získávání hodnot ze zavřených souborů se velmi příčí zásadám bezpečnosti dat. Neznám jinou oblast kromě tabulkových procesorů, kde by to vůbec bylo možné. Takže to, co jste chtěl, se nachází na samém pomezí toho, co je přípustné s daty dělat.
Za váš (a nejenom váš) problém ale pokládám, že si vůbec neuvědomujete, že byste se měl ptát tak, aby vám bylo rozumět. Na tomto fóru dostáváte odpovědi od lidí, jejichž čas je škoda utrácet luštěním něčeho, co nejste stavu popsat. Kdybyste takto připravený šel na právní poradu, kde každá započatá čtvrthodina stojí pět set, asi byste si své dotazy lépe promyslel. Když to ovšem máte zadarmo, proč byste si dělal násilí, že?
Za dodatečnou přílohu bych palec nahoru nedal. V podobných případech by měla být příloha samozřejmostí. Poskytnutí vhodné rady by totiž nemělo vyžadovat věštecké schopnosti pro správnou reakci.
Očekávat, že pro daný případ bude možné napsat "rozkopírovatelný vzorec", svědčí o nepochopení, co Excel při rozkopírování dělá: neděje se totiž nic jiného, než že se "tupě" rozkopíruje zdrojový vzorec v podobě R1C1. V tom spočívá genialita i omezení pro možnosti kopírování vzorců. V tomto schématu se prostě jméno souboru měnit nemůže!
Přijde mi velmi nesystémové, pokud autor příspěvku něco takového od Excelu očekával.
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.