Příspěvky uživatele


< návrat zpět

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

Výsledek, který nabízí elninoslov, vypadá dobře, ale zobrazená položka není číslem, se kterým by šlo dál počítat. Pokud to nevadí, převod na text se vzhledem záporného času lze provést několika různými postupy. S použitím funkce HODNOTA.NA.TEXT (TEXT eng.) to může např. vypadat takto:
=KDYŽ(B2<B1;"-";"")&HODNOTA.NA.TEXT(ABS(B2-B1);"[h]:mm")

Položka typu Datum/Čas je v podstatě číslo, jehož celá část udává datum ve dnech a jehož zlomková uvádí čas v rámci dne. Z toho pohledu nic nebrání tomu, abychom mohli dvě takové položky mezi sebou řádně odečíst. Problém je se záporným výsledkem, který se sice správně vypočítá, ale Excel ho nechce v běžném časovém formátu zobrazovat (to umí v časovém systému 1904, před jehož použitím ale důrazně varuji). Lepší je při zobrazení pracovat s absolutní hodnotou rozdílu a zápornost výsledku ošetřit zvlášť.

To je hezký příklad odlišné filozofie vzorců a VBA. Pokud se hodnoty na list2 promítají pomocí vzorců v buňkách listu2, pak zrušení hodnot ve zdroji zruší také hodnoty na příjmu. Asi jako když se díváte na televizi. Když přestane pracovat vysílač, zhasne vám obrázek. Když chci hodnotu na listu2 ponechat, musím včas změnit vzorec na hodnotu. Pak už se ale nová hodnota z listu1 na list2 nedostane (vzorec je fuč). Pokud to nevadí, je převod vzorce na hodnotu řešením.
VBA pracuje jinak. Popadne hodnotu z listu1 a namaluje ji na list2. Jde o jednorázový krok. Když smažu zdroj, list2 dál hodnotu ukazuje. Přenos nové hodnoty na list2 ale musím ve VBA opakovat pokaždé, když se má něco změnit. Z vašeho zadání není jasné, jak se to má chovat v čase.

Posílám něco pro inspiraci s využitím ověřovacích seznamů. Je tam i kousek VBA kvůli tomu, že ověřování není moc dobrá technika. Ale v podstatě to běhá i bez toho VBA.

Word prakticky už léta jako programovatelný nástroj nepoužívám. Ze starých zkušeností jsem si nevybavil žádné problémy ve spolupráci Excelu s Wordem. Teď jsem na zkoušku vybral poměrně složitou hlavičku z Excelu, uložil ji Ctrl-C do schránky a Ctrl-V ji přenesl do Wordu jako jeho tabulku. To mi prošlo bez problémů, i s tím, že jsem mohl následně tu tabulku ve Wordu volně editovat.
Když jsem se rozhodl převést tu tabulku na text, provedla to nabídka Wordu Nástroje tabulky /Rozložení / Převést na text opět bez problémů. Celý ten průzkum (opět opakuji, že s Wordem pracuji výhradně jako s prostým textovým procesorem) mi trval cca 5 minut. Nějak nevím, v čem je problém. Když to ručně jde a když si k tomu mohu spustit makrokameru, neměl by být problém potřebná makra spáchat.

Budu pozorně sledovat diskusi na dané téma, protože jsem se v daném ohledu zatím nikdy ničeho kloudného nedobral. Dlouhou řadu dní, které jsem věnoval studiu úprav ribbonu, shrnu do vlastního poznatku, že mne tato kapitola Excelu na základě mých dosažených výsledků uvedla do pocitu nespokojenosti a neúspěšnosti. Otevření tématu zde mi třebas prozradí důvod mých potíží.
Místo pokusů o vytváření vlastních ribbonových karet jsem začal používat formuláře (MS Forms), pomocí nichž bez problémů simuluji staré-dobré lišty nástrojů, o které mne ribbonový Excel připravil. Tato technika mi plně vyhovuje a např. pro komunikaci s doplňky se chová víc než uspokojivě.

Napsaný kód sice poskytuje správný námět na způsob řešení, ale použít se v této podobě nedá. Předpokládám, že existují dvě řídící buňky, které při změně hodnoty v nich mají vyvolat změnu velikosti buněk v nějaké úplně jiné oblasti.
Pro takto popsanou úlohu by fungovalo např. toto:
Private Sub Worksheet_Change(ByVal Target As Range)
' změna velikosti buněk v oblasti D10:H20
' pomocí změny řídících hodnot v A1:A2
' buňka A1 obsahuje výšku buněk pro oblast
' buňka A2 obsahuje šířku buněk pro oblast
Select Case Target.Address(0, 0)
Case "A1": Range("D10:H20").RowHeight = Range("A1").Value
Case "A2": Range("D10:H20").ColumnWidth = Range("A2").Value
End Select
End Sub

Ladysi, rád čtu, že jsi! Už dávno jsem neměl tu čest o tobě slyšet. Tipoval jsem někoho takového, jako ty, kdo by na to mohl přijít. Udělal jsi mi radost! Jinak nepokládám za důležité, aby každá věc měla své okamžité použití. Stačí, když o ní vím, a časem se to třebas hodí.
Skvělý nový rok! 10

Dobrá rada! Jen to nezkoušejte najít v přímé nápovědě k Excelu - z ní ten popis jaksi vypadl 7 . Strýček Google je v této otázce nepoměrně štědřejší! Ale i české heslo "excel rozšířený filtr" je na netu poměrně štědré (a navíc bez angličtiny).

krakonosek napsal/a:

2Vovka, ale vse na co se tazu tak je k excelu
a ptáte se takto:
http://prntscr.com/9j47lb,

kde je vidět zobrazení z nástroje LightShot. Myslím, že v tomto případě lze pochopit jen to, že ani nevíte, na co se ptáte!

Před časem jsem si dal dohromady různé postupy, jak získat seznam unikátních hodnot z obecného seznamu. Jen jedna z technik v tomto mém přehledu vede na použití maticového vzorce. Pokud mám tu potřebu, chodím si sem pro rozumy. Od té doby, co jsem si to poskládal, nemám potřebu chodit jinam.

K tomu mohu dodat jen to, že nástroj LightShot má právo žít vlastním životem, nezávislým na Excelu. Ten nástroj jsem dosud neznal a jen těžko ho proto mohu soudit. Navíc - toto fórum je na téma Excel, a k Excelu jsem se vyjádřil.

Formát, jak je napsaný, produkuje pro 0 až 9 hodin dvě mezery zcela právem: první z nich je mezera mezi oběma částmi časového údaje, druhá je produkována levým znakem "h" v použitém formátu. Pro vynechání té druhé mezery by formát musel vypadat "yyy-mm-dd h-mm-ss"

Elninoslov má pravdu v tom, že zdánlivě jednoduchá úloha má svá mnohá úskalí. Když jsem se pokusil rozvinout myšlenku, se kterou přišel Marjankaj o svoje rozšíření, vyšel mi z toho taky dost velký kód:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column <> 1 Then Exit Sub
On Error Resume Next
Range(Cells(1, 1), Cells(Target.Row - 1, 1)) _
.Find(What:=Target, LookAt:=xlWhole).Activate
If Err = 0 Then
Application.EnableEvents = False
If IsEmpty(Target.Offset(1, 0)) Then
Target.ClearContents
Else
Application.Undo
MsgBox "Změněná hodnota by byla duplicitní", _
vbExclamation, "ZMĚNA HODNOTY"
End If
Application.EnableEvents = True
End If
End Sub

Řešení, které poslal Marjankaj, se mi velmi líbí. Jde o kompaktní a úplné řešení problému v podobě, jak ho tazatel definoval. Pro vlastní potřebu bych do něj doplnil ještě likvidaci zadané hodnoty na místě Target (pokud byla nalezena jinde) a zabezpečení toho, aby se vyhledaná původní hodnota posunula do viditelné oblasti na monitoru. V této podobě by si to mělo najít bohaté uplatnění.


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

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