Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  8 9 10 11 12 13 14 15 16   další »

Uživatelská funkce není vhodná. V příloze je řešení s událostí Change.

Bez makra si poradíte s dvojřádkem, a to tak, že na přijímajícím listu povolíte v buňkách sloupce se vzorcem zalamování textu. Lokální skupiny tučných znaků v textu ale podle všeho pomocí vzorce přenést nelze. Zvládlo by to kopírování buňky, ale toho bez makra asi nedosáhnete.
Zadání je opravdu nešikovné, jak píšete, a velmi nevhodné pro další datové zpracování. Napsat uživatelskou funkci listu, která by to uměla, není složité, ale nelíbí se mi řešit použití nevhodné techniky tím, že si následně dáte nohu za krk.

Doplňující informace kvůli ztrátě možnosti Undo po událostní proceduře Selection_Change:
Provedení událostní procedury Selection_Change s obsahem Calculate (příp. Range.Calculate) nemá negativní vliv na možnost použití Undo v manuálním režimu na listu. Metoda Calculate není editovací operací pro Undo, a proto se do jejího provádění nijak nevměšuje. Něco jiného by bylo, kdyby událostní procedura obsahovala jakoukoliv změnu hodnoty buněk. Pak by platilo to, před čím varoval Dingo.

Nejspíš jste si nevšiml omezení pro povolené typy souborů. To nevadí jen vám, ale nic s tím nenaděláme!

"Soubor v původní vytvořené podobě, jsem zkopíroval a „vložil jinak“ do jiného sešitu,
což je sice v podobě v které potřebuji,a bez vzorců, ale ten soubor je 5xtak veliký."

Pokud jsem správně pochopil, váš sešit v nové podobě "nakynul". V tom případě můžete vyzkoušet můj nástroj z přílohy. Pokud se zadaří, výsledek bude naopak silně "pohublý", bude bez vzorců, bez VBA a navíc bude plně naformátovaný. Váš původní sešit zůstane se zárukou nenarušený a ve své původní podobě.

Pokud vím, tak formát xlsb (binární podobu sešitu) přečte řádně každý Excel, počínaje 2007. Problémy se čtením tohoto formátu mohou ale mít jiné programy, které jinak excelské sešity číst umějí. Práci s xlsb jsem si vyzkoušel, na žádné uživatelské problémy jsem nenarazil, ale jeho zjištěné výhody v úspornosti mne nepřesvědčily, abych ho začal běžně používat.

Úplně nejjednodušší a datově velmi úsporný způsob předání rozsáhlých dat z Excelu lze provést pomocí formátu .CSV. Export do csv a zpětný import do Excelu je přímou výbavou Excelu. Csv soubor jde navíc zabalit...

@ Opičák, a.mlady: hezká řešení pro omezenou oblast! Kvůli zrychlení chodu by stačilo provést kalkulaci pro jedinou libovolnou buňku, není nutné kalkulovat celý list (Range.Calculate).

@elCHa:
pro zamknuté listy je velmi univerzálním prostředkem zamykání s UserInterfaceOnly:=True. Vychází z toho, že zámek má smysl jen pro ruční manipulace (manipulace s buňkami pomocí VBA by měly být ohlídány automaticky). Pak se fakticky ve VBA nemusím starat o stav zámku během provádění kódu.

Dotaz se mi jevil jako výsledek prvního seznámení s Excelem. Proto jsem nepokládal použití VBA za vhodnou odpověď. Dynamické využití podmíněného formátu je moc hezký a pro mne nový nápad. Má jen drobnou vadu v tom, že institut podmíněného formátování je tím pro daný list úplně "spotřebovaný". Pokud to nevadí, pak palec nahoru.
Řešení od Hav-Rana pro událost SelectionChange je obecnější než to, které elCHa našel na webu. Když si zapamatuji "starý" Target jako Range, mohu zrekonstruovat všechny atributy buněk, které jsem narušil při jejich zvýraznění.

Soubor / Možnosti / Obecné / Barevné schéma (možnosti modrá, stříbrná, černá) představuje základní nabídku vzhledu listu pro E-2010. Nemyslím si ale, že vybranou buňku tím významně zdůrazníte. Podobnou stížnost čtu poprvé za dobu, co Excel používám. Dělá to na mne dojem, že porovnáváte s Calcem z OpenOffice.

Pro vyhledávání složky jsem kdysi ve starém Excelu použil API, která (jak se zdá) funguje i v tom novém. Nezkoumal jsem to blíž, zkuste to použít. Jinak mám tušení, že exituje dialog v kolekci Dialogs, který se stromem taky pracuje. Teď si ale nevzpomenu na jméno 7 .

Úvaha k napsaným kódům: sešlo se tu několik rozdílných kódů k řešení stejného problému. Všechny jsou zřejmě plně funkční a poskytují totožný výsledek. To jen ukazuje, jak mnohotvárný je jazyk VBA a jaká náhoda je, když dva lidi napíší shodný algoritmus.
Zákonem č.1 je samozřejmě to, že kód funguje správně, tj. že poskytuje správné výsledky a není háklivý na chybové stavy. Sem patří kvalitní ošetření okrajových podmínek (co se stane, když..).
Za touto povinností podle mne následuje čitelnost, pochopitelnost a opravitelnost kódu. Kódy, ve kterých musíme už měsíc po jejich napsání luštit, jak byly míněny, nejsou moc dobré kódy.
Teprve pak následuje elegance a úpravnost kódu, spojená s výběrem a využitím použitých technik. Není asi dobré tomuto kriteriu podřizovat pochopitelnost kódu. Hrátky typu napsání algoritmu pomocí minimálního počtu příkazů patří podle mého názoru do křížovkářské oblasti a s kvalitou kódu to má jen málo společného. Spíš to dokáže ocenit programátorskou kvalitu autora řešení.
Pouze pro rozsáhlé úlohy s významnou dobou odezvy, což bývají úlohy velkými oblastmi zpracování, případně kódy s hlubokým vnořením částí algoritmu, přichází do hry otázka jejich rychlosti. Tam se může ukázat i řádový rozdíl v rychlosti zpracování v závislosti na použitých technikách. Opravdu existují úlohy, kde hodiny zpracování lze zkrátit na minuty (případně minuty na sekundy), a to vhodným výběrem technik. Tuto charakteristiku napsaného kódu je ale vhodné vzít v potaz až v případě, když nás délka zpracování u vytvořeného kódu nemile zaskočí.

Když už jsem se vmísil do debaty, uvedu také svůj algoritmus, který předcházel mému vstupu do ní. Využívá toho, že Cells umí pracovat i s jedním indexem a že výstupní řazení přesně odpovídá přirozenému uložení hodnot v obdélníkové oblasti (po řádcích zleva doprava). Nepřesný počet řádků ve výstupní oblasti není na závadu (přesnější je (N - 4) \ 3) + 1); stačí, že počet řádků na výstupu je dostatečný. Vlastnost .Value pro Cells není nutné uvádět, protože pro přiřazování platí implicitně:
Sub Prenos()
Dim N As Integer, i As Integer
Dim Vstup As Range, Vystup As Range
With Sheets("List1")
N = .Cells(Rows.Count, 7).End(xlUp).Row
Set Vstup = .Range("G5:G" & N)
End With
Set Vystup = Sheets("List2").Range("A1:C" & N)
For i = 1 To N
Vystup.Cells(i) = Vstup.Cells(i)
Next i
End Sub

Jamalálicha: ono by to šlo taky přes pole bez vzorce: Žbrluch!


Strana:  1 ... « předchozí  8 9 10 11 12 13 14 15 16   další »

Uživatelské menu

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

Menu

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

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.

On-line nástroje