< návrat zpět

MS Excel


Téma: Zakázat výběr více listů? rss

Zaslal/a 18.9.2015 21:47

Ahoj lidi! Ví někdo jak zamezit výběru více listů bez skrytí záložek (Excel2010)?
Jde mi o výběr CTRL + klik myší na záložkách a "Vybrat všechny listy" z nabídky záložek.
Vlastně bych si přál i tu nabídku záložek zakázat. Buď natvrdo někde v nastavení sešitu (nic jsem nenašel), nebo VBA. Byl by nějaký tip?

Zaslat odpověď >

Strana:  1 2   další »
#026948
avatar
Hledáním v moudrých knihách jsem zjistil:
Místní nabídky jsou obsahem kolekce CommandBars s tím, že jejich typ je msoBarTypePopup. Dostupnost místní nabídky lze nastavit pomocí její vlastnosti Enabled.
Pokusně jsem vypnul všechny své místní nabídky. Ověřil jsem tím, že se místní nabídka na ouškách opravdu přestala zobrazovat. Takže jeden ze zakázaných prvků to byl.
Vypsal jsem si jména zakázaných prvků, kterých bylo 65. Bohužel jsem mezi jmény nenašel žádné takové, které by prozradilo příslušnost k ouškům. Nezbylo, než zkoušet ta nic neříkající. Nakonec jsem objevil CommandBar("Select") s číslem 124, který tu místní nabídku obsluhuje.
Moje hledání bylo ještě delší než moje povídání. Výsledek už je velmi stručný:

CommandBars(124).Enabled = False

To vypadá dobře jen do chvíle, dokud spolu s CTRL neklepnu na ouško. V tom okamžiku zase místní nabídka ožije. To mne otrávilo. Jestli někdo chce v mém zkoumání pokračovat, má možnost. Mně to přestalo bavit...citovat
#026949
elninoslov
Tiež som hľadal možnosť, ako to poriešiť. Okrem CommandBars, som sa snažil vytvoriť aj triedu z Objektu Worksheet alebo Workbook, či nebude prístupný nejaký OnClick, márne. Vypnúť položku "Vybrať všetky hárky" z kontextového menu uška, sa dá, je to položka ID 946. Ale zatiaľ jediné čo ma napadlo akotak funkčné je napr. každú sekundu tikať Timer, kde skontrolujete počet označených hárkov, ak je väčší ako 1, Select-nete napr. prvý. Takže ostane užívateľovi jeho snaha označená max 1 sekundu. Samozrejme ak nepovolí makrá tak mu v tom nič nezabráni. Povolenie makier je na inú debatu, ktorá tu nedávno tiež prebehla.citovat
#026950
avatar
Vovka: Díky za nakopnutí. S tou hodnotou "124" mi to nefachčí, ale "Ply" je funkční a drží. Snažím se ještě zakázat kombinaci CTRL + ClickLeftMouse, ale OnKey "^{1}","" je nefunkční.

Elninoslov: tak to zatím řeším v událostních procedůrách "Change" a "SelectionChange", ale chtěl jsem to zkusit jinak. I tak oběma díky.citovat
#026951
elninoslov
No veď práve to je to. Ako odchytiť ľavý klik na uškách. Všetky návody sa točia iba okolo pravého (kontextové menu).citovat
#026953
avatar
Na https://msdn.microsoft.com/en-us/library/aa243025(v=vs.60).aspx jsou kódy.
Pro "vbKeyLButton" je "1". Ostatní mi fungují, ale ty pro mouse NE.citovat
#026954
elninoslov
Kódy tam sú, ale odchytenie ľkliku myši, je odchytenie udalosti, čiže OnAction, a to už také jednoduché nieje. Skúsim možno niekedy hák na globálny ľklik, s porovnaním oblasti ušiek (ak bude zistiteľná)... Uvidíme.citovat
#026955
avatar
Přece jenom se k tématu vracím. Problém nevhodného výběru listů mne trápí stejně jako to trápí kp57. Tam, kde je to klíčové, tam opravdu ouška schovám a přechod na jiný list řeším dialogem na uživatelském formuláři. Tím mohu omezit výběr na jediný list a získávám prostor pro dodatečné logické vyhodnocení vhodnosti výběru listu.
Dotaz ale podobné řešení hned v úvodu vylučuje. Podle mne tím vylévá vaničku i s dítětem...citovat
#026956
avatar
Ještě jednu věc jsem si uvědomil. Přístup k výběru listů podporují hned dvě místní nabídky: ta známější se otevře po pravém kliknutí na ouška. Tu druhou otevřu pravým kliknutím na posuvníky oušek úplně vlevo vedle oušek. Takže bych měl chytat dva zajíce najednou!citovat
icon #026962
eLCHa
Nejsem si jistý, zda lze spolehlivě ošetřit. Částečně souhlasím s Vdovkou.
Tam, kde je to klíčové, tam opravdu ouška schovám a přechod na jiný list řeším dialogem na uživatelském formuláři.
Skrytí oušek ale nestačí, pokud někdo použije klávesovou zkratku CTRL+SHIFT+PgUp(PgDown) nebo má napsán doplněk na výběr listů (výběr listů je celkem častý dotaz).

Takže já v tomto případě listy skrývám (VeryHidden). Způsob přechodu na další list si pak musíte zvolit sami.

Druhou možností je nic nezakazovat a testovatIf Not ActiveWindow.SelectedSheets.Count = 1 Then
Zakazování nabídek nebo zjišťování levého kliku mi moc bezpečné nepřijde - ale nic jsem v tomto směru nezjišťoval. Musel byste řádně odladit vliv na ostatní spuštěné sešity nebo v případě použití API vlastně i systém.
Kontrola pomocí Timeru je také cesta, kterou bych nešel (nabízí se ve spojení se SelectedSheets), protože v době běhu kódu je nedostupná práce z listem.citovat
#026964
elninoslov
If Not ActiveWindow.SelectedSheets.Count = 1 Then

Presne takto som to robil s tým Timerom. Dva riadky kódu, a nezdalo sa mi, že by to malo nejaký vplyv na prácu.
Ako inak volať túto kontrolu počtu selektnutých listov, ak nie udalosťou, ktorá nieje k dispozícii, alebo timerom, alebo hook na myš? Toto aj podľa mňa nemá "vhodné" riešenie.citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

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.

On-line nástroje