Příspěvky uživatele


< návrat zpět

Strana:  1 2 3 4 5 6 7 8 9   další » ... 16

U funkce Split jsem se s LBound=0 smířil tím, že nultý prvek zpravidla plním nějakou formální hodnotou (např. popisným textem) a pole používám logicky až od indexu 1. U vazby polohy Cells a Shapes se mi osvědčilo využití vlastností Top a Left, které jsou pro oba typy objektů definovány shodně. Žádný způsob, jak jednoduše získat z jednořádkové oblasti jednorozměrný Array, jsem neobjevil (i když by se mi to občas hodilo). Zato s výhodou využívám Cells s jedním indexem, který mi umožňuje pracovat shodně s jednořádkovou i jednosloupcovou oblastí. Často tím lze obejít potřebu transpozice oblasti.

Porovnal jsem dva počítače, které mám teď k dispozici. Oba mají čerstvě updatovaný W-10. V jednom je E-2007 s procesorem Intel I5 a s monitorem HD, ve druhém E-2010 s procesorem AMD a monitorem 1600x900. Potvrzuji, že u obou Excelů se mi v posledních dnech změnila základní šířka sloupce z 8,43 na 8,38.
U polí mi v obou počítačích funkce SPLIT produkuje vždy jednorozměrný Array s LBound = 0, přiřazení Pole = Range mi produkuje zásadně dvourozměrné pole s oběma LBound = 1.

Procedura pro tuto událost má formát
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Standardně platí, že nastavení Cancel = True ukončí vyvolanou událost, aniž by se provedlo to, k čemu byla původně zavolaná. Ve vašem případě by se neměla odehrát metoda Print. Pokud se to děje jinak, není zřejmě váš Excel v dobrém zdravotním stavu...

Příčina je zřejmá. Funkce Format produkuje výsledek typu String, tedy text. Proto jsem doporučil použití funkce Timer, pokud chci pracovat s výsledkem jako s číslem. Riziko záporného rozdílu časů při překročení půlnoci lze snadno odstranit přičtením 86400 (počet sekund v kalendářním dnu) k zápornému výsledku. Např.:
Zacatek = Timer
Call HodnocenyProces ' provedení měřeného úkonu
Konec = Timer
Rozdil = Konec - Zacatek
If Rozdil < 0 Then Rozdil = Rozdil + 86400
Cells(nr + k, 3).Value = Rozdil / 86400 ' buňka, naformátovaná na "h:m:ss,00"

Funkce Format vytváří zásadně textový výstup. Pokud chci získat aktuální čas se setinami sekund jako číslo, mohu do buňky s formátem "h:mm:ss,00" vložit hodnotu
Selection = Timer/24/60/60

Manuálně vložíte obrázek z listu do prvku Image na formuláři velmi jednoduše: do schránky pomocí Ctrl-C vložte příslušný obrázek; v prostředí editoru VBA vložte do formuláře aktivní prvek Image a do jeho vlastnosti Picture v tabulce Properties zkopírujte pomocí Ctrl-V obsah schránky. Pro tento prostý ruční postup jsem ale nikdy neobjevil odpovídající realizaci s pomocí VBA. Pokud máte k dispozici příslušné obrázky jako soubory na disku, je možné vlastnost Picture pro prvek Image na formuláři UserForm naplnit pomocí příkazu
UserForm.Image.Picture = LoadPicture(pathname)

Tak to mě mělo napadnout, když se maticový vzorec zadává pomocí FormulaArray! Dík za pomoc!

Provádím řízenou konverzi vzorců pomocí VBA. Neumím se ale přenést přes maticové vzorce. O nich jsem se dočetl, že se musí ukládat pomocí FormulaArray v notaci R1C1. To běhá. Budiž, i když...
Problém ale je, že z VBA neumím identifikovat, jestli vzorec v buňce je maticový, abych ho také zkonvertoval a změněný ho jako maticový do buňky zase vrátil. Dotaz zní: jak ve VBA zjistím, zda vzorec v buňce "náhodou" není maticový?

Odpověď zní tak, jak je položena otázka. Samotný princip zabudování převodní tabulky přímo do vzorce mi ale připadá velmi nepohodlný. Standardně se to řeší dvousloupcovou převodní tabulkou a vzorcem s funkcí SVYHLEDAT. Je to průhlednější, lépe udržovatelné a samozřejmě i zpětně kompatibilní.

Ano, to je ta správná cesta. Jen poznámka, k čemu mi to slouží. Mám spoustu napsaných nástrojů, které provádějí různé transformace v rámci aktuálně vyznačené oblasti. Většina z nich mi končí zprávou o výsledku provedené akce. Zpravidla v ní uvádím i použitou oblast pomocí její adresy. Tentokrát mi přišlo názornější uvést počet buněk v oblasti. A malér byl na světě. Výběr jsem provedl klepnutím do horního levého rohu - a zdárně provedená procedura skončila kotrmelcem kvůli nezobrazitelnému počtu buněk na listu.

Zkuste v ribbonovém Excelu zobrazit tak prostou věc, jakou je hodnota

ActiveSheet.Cells.Count
Při přímém pokusu o zobrazení dostaneme chybu typu overflow. Trvalo mi slušnou chvíli, než jsem to profouknul. Třebas budete mít šťastnější ruku než já a napadne vás to hned, protože to opravdu není složité. Správný výsledek přímo z Excelu je 17179869184.

Popsanou techniku s úspěchem používám. Odsouhlasené nastavení ve formuláři převádím na rozšířený filtr, který ze zdrojových dat pořídí požadovaný výtah. Stejně dobře lze nastavení formuláře použít pro vytvoření SQL dotazu, který pak vytvoří požadovaný RecordSet. U výběrů využívám vícenásobné výběry a vedle nastavení "vše" také možnost "not" k provedenému výběru pro jednotlivé parametry.

Nebude to tím, že Range.Locked = False tu oblast odemyká, místo toho, aby se zamkla (jak si asi přejete)?

V mém E2010 to tiskne na 1 stránku, ale prakticky bez pravého okraje. Po volbě úzkých okrajů a tisku na jednu stránku je u mne tisk v pořádku.

Zkuste vzorec upravit na
=SUMIF(N:N;"<"&A1;V:V)


Strana:  1 2 3 4 5 6 7 8 9   další » ... 16

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse