Moc nerozumím, čeho chcete dosáhnout. Obrázek ukazuje to, co je Excelu vlastní. Pokud jsem pochopil správně, chtěl byste převádět špatně zapsané údaje do standardní podoby.
První možnost je při ručním vstupu, kde mohou pomoci automatické opravy (Soubor / Možnosti / Kontrola mluvnice a pravopisu). Další možnosti už je nutno řešit programově. Když si např. vytvoříte seznam "špatně/správně", můžete se pomocí něj zbavit běžných překlepů i dodatečně.
Stalkera musím ocenit za to, že umí číst a provedl přesně to, co jsem Merlinovi99 doporučil dnes v příspěvku v 10:07. Za minutu práce si vydělal 200,-Kč. Prima!
Myslím, že je na úvaze každého, jestli panu Merlinovi99 má cenu radit. Za sebe se domnívám, že takovému "znalci" Excelu je každá rada drahá.
Vzorce, které tady uvádíte, jsou opravdu stručné a čitelné. V sešitě jsem ale našel taky tohle:
=KDYŽ(JE.CHYBHODN(POSUN(INDEX(NEPŘÍMÝ.ODKAZ($F$2);POZVYHLEDAT($G2;NEPŘÍMÝ.ODKAZ($F$2);0));;-1));0;POSUN(INDEX(NEPŘÍMÝ.ODKAZ($F$2);POZVYHLEDAT($G2;NEPŘÍMÝ.ODKAZ($F$2);0));;-1))O tomto vzorci jsem psal Teď jsem se dočetl, že je to tam jen pro srovnání. Tím se mi vysvětluje, proč jsem já byl nespokojený a vy zaskočený.
Merline99, já se z vás pojáchnu! Před pár dny jsem tady napsal, že jiné formáty pro sešity, než je zip, zásadně číst nebudu. A vy mi pošlete rar!
Pošlu sub s vypočítaným výsledkem, a vy chcete, abych vám to "propojil do tlačítka"! Tohle fórum by nemělo být hotel all inclusive, ale stanice poslední pomoci. Něco jako horská služba, která pomůže, když na vás spadne lavina.
Naposledy k tomuto tématu:
- změňte můj Sub na Function TiskOblast() As String
- závěrečný MsgBox v proceduře vyměňte za příkaz TiskOblast = Adresa
- svou oblast vytiskněte příkazem Range(TiskOblast).PrintOut
To kuřátko už asi o moc víc předežvýkat nejde. V případě potřeby čtěte pomaleji a víckrát. Přesto mne napadlo dodat výsledek v úplné podobě s vyznačením tiskové oblastí mezi první a poslední buňkou na listu, v nichž je zobrazený nějaký viditelný obsah. Oboustranné zúžení UsedRange už vede na větší proceduru, takže přikládám sešit i s ukázkou.
Doporučuji k povšimnutí, že výkonné tlačítko je umístěno mimo UsedRange. To bourá zavedený mýtus, že mimo UsedRange na listu nemůže ležet nic. Objekty, umístěné na listu, samy o sobě jeho UsedRange nemění!!!
Poslední dotaz na stanovení tiskové oblasti zůstal nakonec nezodpovězený. V 99% případů pro tisk viditelných dat nebude problémem vymezení sloupců pro tisk, ale pouze uříznutí "dolních" řádků se vzorci, které nic nezobrazují.
Pokud vím, že tisk má začít v buňce Cells(Rz, Sz) a má končit sloupcem Sk, stačí z mého kódu použít závěrečnou hodnotu proměnné i (číslo řádku s poslední buňkou s viditelnými daty). Hledanou tiskovou oblast v daném případě definuje
Range(Cells(Rz, Sz), Cells(i, Sk))
Vždyť ano. Oprava na začátek UsedRange v mém kódu je!
Merlin99 napsal/a:
Super hledáto dobre ale nyni to zakomponovat do tlacitka na tisk z hoto nejsem...
Já ne ! Pole, naplněné z Range, má vždycky obě LBound = 1
Hned první nápad podle mne plní vaši potřebu. Místo zobrazení MsgBox ty nalezené hodnoty použijte pro omezení oblasti pro tisk:
Sub PosledniBunkaKtisku()
Dim Pole, II As Long, JJ As Long, i As Long, j As Long
Pole = ActiveSheet.UsedRange
II = UBound(Pole, 1): JJ = UBound(Pole, 2)
For i = II To 1 Step -1
For j = JJ To 1 Step -1
If Pole(i, j) <> "" Then Exit For
Next j
If j > 0 Then Exit For
Next i
If i = 0 Then i = II: j = JJ
With ActiveSheet.UsedRange
i = i + .Row - 1: j = j + .Column - 1
End With
MsgBox "Poslední buňka s viditelným obsahem je Cells(" & i & ", " & j & ")"
End Sub
List, které se hemží vzorci odshora dolů, aniž by ty vzorce čemukoliv sloužily, je zpravidla projevem špatné práce s listem. Lidi se pak diví, jak velké sešity mají a jak neohrabaně reagují.
První otázka, kterou bych si položil, by měla říct, jestli tam ty vzorce opravdu musí být. Teprve pak bych hledal, jak tisknout jenom to, co je vidět. Nemyslím si, že by to měla být taková věda! Za dobu, co to píšu, mám tři nápady, které jdu vyzkoušet. Sám takový problém neznám, vzorce mám vždycky jenom tam, kde je opravdu potřebuji.
A co takhle využít Range.Printout, kde pro tisk vyberete jen takovou oblast, kterou opravdu chcete vytisknout?
Použití podmíněného formátu jako zpětnovazební informace pro hodnoty, vybrané pomocí ověření, je vynikající nápad. Opticky řeší "neexistenci pudu sebezáchovy", jak kdysi někdo nazval největší slabinu techniky ověření dat. Existuje několik postupů, jak ověření dat přelstít. Případ, kdy se změní nadřazený výběrový seznam, je jenom jeden z nich. Podmíněné formátování, které použil elninoslov, zabere i v řadě dalších způsobů, jimiž se ověřovací podmínky naruší. Zcela jistě ten nápad využiji.
Daleko míň jsem nadšený složitostí použitých vzorců. Nedávno mi právem Hav-Ran vyčetl, že na fórum posílám příliš hotová řešení, do kterých už tazatel těžko bude zasahovat. Jsem si téměř jistý, že do dlouhých megavzorců, které elninoslov použil, běžný uživatel zasáhnout ani nemůže, aniž by je pokazil.
Opičákovu metodu vytvoření netříděného seznamu unikátních hodnot z duplicitního seznamu s dírami jsem si doplnil jako další standardní alternativu do svého archivního sešitu UnikatniSeznamy, který jsem tady před časem prezentoval. Dík!
Vyhodnocení výsledku podmíněného formátování není dobrý nápad. Správné je přímo využít podmínek, které vyvolávají ten podmíněný formát. Testujte hodnoty v buňkách, nikoliv barevný efekt z podmíněného formátování.
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.