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í.
Mně se ten zip hlásí jako prázdný. Z takového podkladu jsem nezmoudřel!
Indicie č.3:
Funkci, která zobrazí skryté heslo, lze zavolat v podobě
MsgBox Dekrypt(ActiveSheet.UsedRange)
Na listu nejsou umístěny žádné jiné objekty kromě buněk a skrytý nápis je skrytý právě v nich. Když si zjistíte, jak maličká je UsedRange na tom listu, jste už velmi blízko cíli!
Indicie č.4:
Skryté heslo spolehlivě zničíte pomocí následujícího kódu:
Range("A3").Copy
Range("A3:J7").PasteSpecial xlPasteFormats
Application.CutCopyMode = False
Doufám, že teď už víte, kam se vydat!
To zadání je velmi neurčité. Co se má dít, když za sebou budou ležet tři stejné hodnoty? Kam se mají zjištěné hodnoty kopírovat? Na stejné místo na novém listu, od začátku řádku...?
CHYBÍ PŘÍLOHA !!!
Když už jsem to vymyslel, tak to posílám pro srovnání
Mám malý dárek v vánocům. Kdysi před léty jsem to párkrát použil a pak se mi to úplně ztratilo z aktivní paměti. Včera se mi ta funkce vynořila z hlubin zapomnění v důsledku tohoto vlákna. Problém ale byl v tom, že jsem ji nebyl schopný vyvolat a v nápovědě mezi klávesovými zkratkami jsem ji nenašel. Až před malou chvílí se mi to povedlo.
O co jde? Vytvořte si sloupeček údajů a umístěte kurzor na první volnou buňku pod ním. A teď to kouzlo:
Alt + šipka dolů
Výsledek je podle mne dost užitečný k tomu, aby si ho člověk zapamatoval. Proč tato klávesová zkratka v nápovědě Excelu chybí, to snad vědí jen u Microsoftů...
Špatně jsem pochopil, co chcete porovnávat. Domníval jsem se, že tím porovnávacím místem bude nějaká tabulka platných hodnot. Jak to tak vypadá, chcete porovnávat nově vloženou hodnotu s těmi nad ní. AL to pochopil líp a nabídl účelné řešení zadané úlohy.
Dotaz by bylo dobré upřesnit (škoda, že není příloha):
1. Je seznam porovnávacích hodnot uspořádaný (setříděný)?
2. Co to znamená, když se hodnota nachází v jiné? Musejí začínat stejně, nebo jde o výskyt kdekoliv v porovnávané hodnotě?
Odpovědi na položené otázky mohou významně ovlivnit způsob i složitost řešení.
Indicie č.2: Žádná Enigma s využitím zobrazeného textu to není. Dekriptovací procedura má 25 řádků kódu, nemá žádná vlastní data s povahou konstant a pracuje výhradně s buňkami v UsedRange. Obsah zobrazeného textu se při dekriptování hesel vůbec nezkoumá.
psr napsal/a:
Vysledek = (Me.Textbox1.Tetx*1 + 0)*1 + (Me.Textbox2.Tetx*1 + 0)*1 + ...
Myslím, že jsem to někde napsal, že se ten údaj nachází přímo na listu. Není proto nutné hledat v nějakých dalekých zákoutích sešitu.
Když už jsem sešit dal do placu, zjistil jsem, že mi na tom listu navíc z testů zůstalo ještě další heslo, a to KARKULKA. Takže můžete kromě Ježíška hledat ještě Karkulku
Psát výrazy, které po jednom oslovují desítky prvků na formuláři, nevypadá moc elegantně. Pomocí modulů třídy je možné zápisu dodat výrazně kompaktnější ráz.
Bez modulu třídy si život často zjednodušuji využíváním kolekce Controls se současným zavedením interní logiky do použitých jmen prvků na formuláři.
Např. zápis typu
MujFormular.Controls("Tlacitko" & i)
pak umožňuje pracovat se skupinou tlačítek (nebo s libovolnou jinou skupinou prvků) prakticky jako se členy pole prvků s indexem i. Pro konkrétní výběry prvků při tomto postupu lze s velkou výhodou využívat konstrukci Select Case i - End Select
to marjankaj:
tak to jsem nevěděl a naštěstí to nevědí ani ti, pro které jsem touto technikou jejich sešity vybavil. Oni to pokládají za neprůstřelné (i když sám dobře vím, že to jde obejít i jinak).
Prostě stále platí stará pravda, že Excel není bezpečné datové prostředí. Přesto se pokoušíme v uživatelích alespoň vyvolat pocit bezpečí. Ostatně, lidé si své byty také opatřují složitými dveřními zámky a dveřmi, které nejdou vyháčkovat, a přitom zpravidla stačí malá dlažební kostka do zvoleného okna...
Sám nemám rád, když do rozjeté diskuse najednou vstoupí někdo, který se diskuse nezúčastnil od jejího začátku. Proto se omlouvám.
Diskuse kolem vzorce ve sloupci AA mne zaujala tím, že hledá co nejlepší formu pro maticový megavzorec. Ty opravdu nemám rád a když se jim lze vyhnout, činím tak. Proto velmi fandím nápadu s KT od Luba.
Pro ty, kteří nemají rádi ani maticové vzorce, ani KT, nabízím prosté řešení, postavené na tom, že tabulka hovorů je seřazená časem a umožňuje tím daleko jednodušší získání seznamu unikátních datumů, než je maticový vzorec. Stačí k tomu nematicové funkce POZVYHLEDAT a NEPŘÍMÝ.ODKAZ.
V příloze je výřez z listu, v němž jsem využil nepoužité sloupce W:Y pro své řešení. Sloupce W a X sice jsou pomocné, ale velmi dobře doplňují získanou informaci ve sloupci Y, která se datově shoduje se sloupcem AA. Zde jsou použité vzorce:
buňka W3: =IFERROR(X2+1;"")
buňka X3: =IFERROR(POZVYHLEDAT(NEPŘÍMÝ.ODKAZ("A"&W3);A:A;1);"")
buňka Y3: =IFERROR(NEPŘÍMÝ.ODKAZ("A"&X3);"")
Uvedené vzorce nejsou maticové a jsou roztažené do řádků 2:29. Výjimku tvoří buňka W2, kde je vzorec nahrazen konstantou 2 pro první řádek tabulky datumů
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.