Omluva: samozřejmě jsem měl na mysli obrat ActiveCell.Offset, kterými se kód hemží.
Ten kód je na můj vkus napsaný velmi exoticky. Očekával jsem rozsáhlé cykly, místo nich jsem našel zamilované hraní se zápisem ActiveShett.Offset, zato žádná pole ani definované oblasti na listu. Zápis by šlo několikanásobně zkrátit, ale významné zrychlení algoritmu by to nejspíš nepřineslo.
Přechod od Double k Single by přinesl jen nepatrné zrychlení, které vůbec nestojí za námahu. Zato zmenšení rozsahů v datech pro grafy ve vašem případě skrývá velký rychlostní potenciál. Deset tisíc prvků v sériích je podle mého soudu řádově vyšší, než lze na listu odlišitelně zobrazit. Cesta redukce rozsahů dat pro grafy je podle mne tím správným krokem za zrychlením výpočtů.
Mám dojem, že došlo ke zmatení pojmů stránka a list (viz subscript out of range). Vypadá to podle mne spíš tak, že na jednom datovém listu se nachází víc tiskových stránek a že jde o selektivní tisk těchto tiskových stránek podle obsahu vybraných buněk.
Pokud mám pravdu, rozdělil bych úlohu na dva kroky: v prvním bych definoval proceduru TiskStranky(Strana As Long), která by vymezila logickou oblast stránky a také ji vytiskla. Jako nadstavbu k této proceduře bych napsal rozhodovací předpis Tiskni(), který by určil, které stránky budu v konkrétním případě tisknout (např. na základě obsahu buněk ve sloupci D).
to desairo: převod doplňku z xls na xlam je zcela regulérní obrat, pokud Excel nenajde ve zdrojovém xls nějaké nekompatibility s ribbonovým Excelem. To se ve vašem případě zřejmě nestalo, takže vše nejspíš bude běhat správně.
S odpovědí eLCHa na možnost zrychlení se zcela ztotožňuji. Vypnutí všech přepočítávacích a přezobrazovacích akcí je tím prvním a základním krokem ze zrychlení. Pro posouzení, co by šlo ještě zrychlit, by bylo nutné vidět, jak je kód napsaný. Mne 35 sekund na provedení popsané akce zas tak moc neděsí. Ale stejně tak by to třebas mohlo běžet podstatně rychleji. Bez znalosti napsaného kódu to ovšem zodpovědně neposoudí nikdo!
Je horko, a to se nejspíš promítlo do kvality dotazu... Přesto se pokusím o odpověď:
1. Vzorec může nastavit jen hodnotu v buňce, ve které se vzorec nachází. Jakýkoliv pokus změnit vzorcem hodnotu jiné buňky je odsouzený k neúspěchu.
2. Pokud chci vzorcem na základě obsahu B1 nastavit obsah A1 a C1, musím do buněk A1 a C1 umístit dva různé vzorce. Do A1 napíšu =KDYŽ(B1="odpolední";"ranní";"").
Do C1 patří vzorec =KDYŽ(B1="odpolední";"noc";"").
3. Pomocí makra by bylo možné na základě testu změny hodnoty B1 naplnit najednou A1 i C1. To ovšem je jiná kapitola Excelu...
to eLCha: dvě souběžně fungující verze Office na jenom počítači mne zjevně vytrestaly. Dřív se mi vedlo měnit verze Office spolu s novým HW; tentokrát mi to nevyšlo. Smůla! Na druhou stranu mohu s úlevou konstatovat, že W-10 jsem nainstaloval během dvou hodin bez jediného zádrhele a že vše vypadá funkčně. A to i po velkém updatu W-10 tři dny po nainstalování (!?!).
to Elninoslov: podle mých informací nelze Office 2010 reinstalovat, když jsou instalované Office 2013. Nerad bych o Excel 2010 přišel. Používám je daleko radši než 2013.
To kp57: to už jsem vyzkoušel, ale bez viditelného výsledku
Mám v provozu souběžně Office 2010 a 2013. Cca před půl rokem u mne proběhl automatický update pro MS Office. Od té doby se ke mně chová nesprávně událost Worksheet_BeforeRightClick (v obou verzích Excelu shodně). I když v úvodu událostní procedury zadám Cancel = True, pokud pravou myš použiji, dostanu okamžitě kontextovou nabídku pro pravou myš. Teprve na druhé klepnutí na pravé tlačítko se spustí obsah události podle mého zadání.
Zajímavé je, že událost Workbook__SheetBeforeRightClick se chová, jak má a na Cancel = True reaguje bezprostředně.
Věřil jsem, že vzniklá chyba zmizí stejně jako se objevila. Bohužel u mne problém přetrvává. Nevíte náhodou, jak se problému zbavit? Na můj dotaz u kolegů jsem zjistil, že nikdo z nich podobný problém nemá.
Nejjednodušeji zjistíte, jestli je doplněk aktivní, pokud z karty Vývojář otevřete nabídku Doplňky. Aktivní doplněk musí být v jejím seznamu a musí být zaškrtnutý. Problém může spočívat v tom, že soubor s doplňkem není na správném místě a proto chybí v seznamu doplňků. Přejmenujte ten soubor z .XLA na .XLS a pak ho uložte z Excelu jako .XLA. Tím ho nastěhujete do správné složky. Pak by se již měl v nabídce doplňků najít.
Formálně vzato, psát ActiveSheet před Range je zbytečné, protože ActiveSheet je pro Range implicitní. Váš problém podle mne vypadá, jako kdybyste svůj REFPROP nevolal jako doplněk, ale jako paralelně otevřený sešit (navíc ne úplně dobře jako doplněk napsaný). Ověřte si, zda je opravdu REFPROP u vás volaný jako doplněk.
Zkuste si přečíst článek v příloze. Měl byste v něm najít dost inspirace, jak psát opravdu rychlé aplikace pro zpracování rozsáhlých dat v Excelu.
Nabízím k otestování sešit, napsaný jako doplněk, pro pohodlné stahování dat z webu. Chtěl jsem k němu přidat obrázkový návod k použití, ale ten se ukazuje jako příliš velký jako příloha to toto fórum. Zájemci se mohou obrátit na moji adresu vladimir.haj@seznam.cz.
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.