< návrat zpět
MS Excel
Téma: Co přinutí BlockInput, aby fungoval?
Zaslal/a Honza53 13.8.2018 16:38
Zdravím. Při zobrazeném formuláři (userform), slyšícím na jméno třeba UF, potřebuji (po jisté akci uživatele) dočasně znemožnit uživateli jakoukoli akci, anžto poběží makro, s nímž by okamžité další akce uživatele kolidovaly.
1. Application.Interactive je ve formuláři samozřejmě na nic.
2. Příkaz UF.Enabled = False (v modulu formuláře samozřejmě pouhé Enabled = False) nefunguje, formulář lze zavřít Alt+F4 (první hrubá chyba MS). Ostatní akce uživatele sice blokovány jsou, ale po Enabled = True zůstanou blokovány (druhá hrubá chyba MS).
3. API funkce BlockInput fungovala ještě v XP a spolehlivě blokovala a uvolňovala klávesnici a myš uživatele, ve všech pozdějších verzích odmítá pracovat. To není obyčejná třetí hrubá chyba MS, to je jejich úmysl (přesněji zlomysl). BlockInput pracuje jedině za těchto podmínek:
- Musím být správce a kliknout nikoli na sešit, ale pravým myším uchem na Excel a v lokálním menu zvolit Spustit jako správce.
- Odpovědět na slabomyslný dotaz Windows, zda skutečně chci Excelu dovolit, aby dělal na disku změny (ty přece dělá vždycky!).
- V běžícím Excelu otevřít příslušný sešit s makry, která používají BlockInput.
To je přece zlovolná pitomost! Uživatel mého sešitu nemusí být správce a navíc rozhodně nemíní podstupovat popsanou anabázi, chce sešit otevřít tím, že na něj jednoduše dvojklikne. Navíc ani já jako programátor bych nemusel být správce, a přesto musím mít právo používat funkci BlockInput v zájmu toho, aby budoucí uživatel sešitu něco náhodně nezvoral.
Jde to obejít tím, že blokuji všechny jednotlivé kontrolní prvky (controls) UF (a další hrubá chyba MS - některé mají jen vlastnost Locked, některé zas jen vlastnost Enabled…), zavírací křížek formuláře i klávesu Alt+F4 řeším v události QueryClose a můj program ohavně nabobtnává.
UF.Enabled = False nesmí povolovat Alt+F4 a True musí zpřístupnit formulář! BlockInput musí být použitelné za všech okolností!
O uvedených hrubých chybách i o zmíněné nemravné zlovůli MS ví, popsal jsem jim to před pár lety. Dodnes to neopravili - to je přece až patologická nadutost!
Nevíte někdo, kdo či co by přinutilo líné manažery MS, aby hnuli prstem a zmíněné nechutnosti bleskově napravili?
Celý život nazývám hrubku hrubkou, nechutnost nechutností, zlovůli zlovůlí, nadutost nadutostí, …, tak doufám, že správce blogu můj příspěvek nesmaže, protože jsem si troufl o mamutí firmě napsat pravdu. V jistém blogu totiž stačilo zmínit se jen o tom, že MS neopravuje chyby, a byl jsem bezohledně zcenzurován.
eLCHa(14.8.2018 9:43)#041171 Nejsem správce, pouze moderátor - podle mne jste se nedopustil ničeho proti pravidlům. Tedy neshledávám důvod ke smazání.
Na MS si tady nadáváme občas všichni - ničemu to nepomůže, ale ulevíme si.
K vaší otázce - nemyslím si, že by je něco přinutilo - navíc, pokud programujete, tak to asi znáte. Někde něco změníte a někdy sám až časem zjistíte, co všechno to ovlivní ;) . Věřím, že některé věci, na které jsme zvyklí a časem se ztratí lze zčásti přiřadit právě k nechtěné chybě - většinou ale padnou za oběť jiné funkcionalitě, po které všichni toužíme ;)) . Prostě pokrok. A nedávno jsem četl krásnou definici (7. díl Zaklínače):
Pokrok je jako stádo sviní. Z takého stáda, to sa mosí uznat, je užitek. Je uzený špek, je ovar, je prejt, sú klobásky, sů nožky v rosolu. Tož sa nesmí ohrnovat nos, že je všecko posrané.
Můžete vytvořit vzorový formulář, můžete ho sem vložit a můžeme zkusit společnými silami najít řešení. Myslím, že problém je to zajímavý. Rozhodně bych ale hledal jiné řešení (což jste popsal, že hledáte) než BlockInput - když říkáte že nefunguje už od E2003.
citovat
xlnc(15.8.2018 9:38)#041190 Při Cancel=True nefunguje Alt+F4.
citovat