Pro ty, kteří si stáhli první přílohu a nechtějí stahovat tu druhou: heslo k VBA projektu Pacmana je VOJTA2004
Chybka se vloudila ! V nové příloze to už snad bude lepší...
Třináctiletý Vojta za mnou přišel s tím, že mu obrazec "částečný kruh" v Excelu připomíná figurku Pacmana a jestli bych takovou figurku uměl naučit, aby klapala hubou. Výsledkem je hra, ve které ten Pacman v nestandardní roli běhá po ohradě, požírá saláty a vyhýbá se jedovatým ježkům. Navíc se Vojta při ní viditelně baví.
Po technické stránce je úloha zajímavá tím, že se musela popasovat hned se třemi problémy, které Excelu nejdou moc pod nos: (1) plynulý pohyb grafických objektů po obrazovce, (2) zvukové efekty jako reakce na události, spojené s pohybem, (3) reakce na ruční vstupy do běžícího algoritmu.
Kdo má zájem, může si můj letošní dárek v vánocům stáhnout. Kód úlohy je volně k dispozici. Sešit i zvukové soubory v zipu je nutno rozbalit do společné složky.
Další možnost (bez maker) je sehrání všech odpovědních listů do jednoho společného sešitu. Vzhledem k totožné struktuře listů pak lze posčítaný výsledek získat pomocí vzorce, sčítajícího stejnou buňku na listech v definovaném rozsahu listů.
Pokud jste měl na mysli panel nástrojů Kreslení z klasického Excelu (jak asi správně odhadl xlnc), tak ten umřel v ribbonovém Excelu spolu s ostatními panely nástrojů. Jestli dnes něco vyčítám ribbonovému Excelu proti tomu klasickému, tak je to právě likvidace možnosti práce s panely nástrojů. Na druhé straně platí, že výbava pro práci s grafickými objekty je v ribbonovém Excelu bohatší, než která se původně nacházela na panelu nástrojů Kreslení.
Vada Vaší konstrukce =KDYŽ(100>A2>1;PRAVDA;NEPRAVDA) spočívá v nepochopení, jak bude ten vzorec vyhodnocený. Výraz "100>A1>1" se vyhodnotí tak, že nejdřív vznikne výsledek pro "100>A2", a ten se pak bude porovnávat ve vztahu k ">1". První vyhodnocení dopadne jako PRAVDA, druhý krok bude hodnotit výraz "PRAVDA>1". V Excelu platí, že obě logické hodnoty PRAVDA i NEPRAVDA jsou větší než libovolné číslo. Proto celý výsledek Vám vyjde jako PRAVDA, i kdyby konstanta "1" byla chybná. Ve druhém případě výraz "1<A1" se vyhodnotí dle skutečnosti jako PRAVDA, ale "PRAVDA<100" dopadne jako NEPRAVDA bez ohledu na to, jestli je "100" správně.
Rozbor od elninoslov velmi přesně popisuje správný zápis vzorce.
Pracuji v E-2016, ale stále mám k dispozici E-2007. Přikládám obrázek z něj, když jsem zaktivoval grafický objekt obdélník. Karta Nástroje kreslení je k dispozici. Podobné je to v E-2016, takže se právem domnívám, že to tak bude i v E-2013.
Po vložení prvního grafického objektu na list (z karty Vložení) se Vám automaticky karta s nástroji kreslení zobrazí. Pokud již takové objekty na listu jsou, stačí libovolný z nich aktivovat.
To, co se zobrazí v zaslaném souboru, není původní obsah zachraňovaného sešitu. ale cosi, co mi zavání zápisem XML. O téhle oblasti Excelu však nevím skoro nic, a proto jsem ten soubor radši poslal sem, abych nedal kamarádovi nepříznivý verdikt pro něco, co by šlo nějak zrekonstruovat.
Nešťastný kamarád mi poslal výsledek své snahy o záchranu excelského sešitu, který svému kolegovi hloupou náhodou na disku smazal. Výsledek svého pokusu mi poslal. Mám silné podezření, že ten pokus nebyl úspěšný (u mne ten soubor nefunguje ani po experimentování s jeho koncovkou). Třebas ho někdo z vás dokáže rozhýbat. Předem dík za kamaráda!
Přestal jsem hloubat nad smyslem Vašeho zadání a pokusil jsem se dodržet ho v té podobě, jak jsem ho pochopil.
Vzorec v 8.sloupci by způsobil, že každé přepsání B2 by se promítlo do všech buněk 8.sloupce (to asi nechcete). Lze ale napsat makro, aby změna v B2 vyvolala ve všech řádcích definované tabulky, kde 8.sloupec je ještě prázdný, jeho zaplnění hodnotou z B2. Jestli je to podle Vašeho záměru, napíšu Vám to.
Také umím napsat makro, které by pro každý nový řádek tabulky převzalo do jejího 8.sloupce automaticky aktuální hodnotu z B2. Vyberte si.
Maličko bych ten kód upravil, aby se události vypínaly jen v případě potřeby:
Private Sub Worksheet_Change(ByVal Target As Range)
if Cells(Target.row,4) = "ano" and Cells(Target.Row, 8) = "" Then
Application.EnableEvents = False
Cells(Target.Row, 8) = "=B" & Target.Row
Application.EnableEvents = True
End If
End Sub
Nebo bych ty události nevypínal vůbec a nechal tu událost proběhnout dvakrát.
Tohle by se snad mělo blížit Vaší představě
A nebylo by lepší reagovat rovnou na jedno klepnutí myši na vhodnou oblast na listu otevřením Vašeho userformu (třeba s dotazem, jestli to chci)? Bylo by to přirozenější, než si říkat o dvojklik. Pokud potřebujete, napíšu Vám to.
Já pro podobné věci radši používám pravé tlačítko myši s tím, že "někam" viditelně uvedu, jak to ovládání funguje.
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.