zpět

Hlavní stránka

Poslední aktualizace: 02.08.2006

Tipy pro VBA

Zabezpečení sešitu Excel:

Na základě mých stránek vzešel dotaz, jestli je možné zabezpečit sešit Excelu,
popřípadě nastavit práva pro přístup na jednotlivé listy...

Zamknout se dá celý sešit, nebo jen jednotlivé listy, a to volbou nahoře v menu XLS:
Nástroje / Zámek / Zamknout list nebo Zamknout sešit ...

Pravdou je, že u sešitu který jsou chráněný heslem, se dá toto heslo překonat,
nic není nemožné. V tomto případě šlo spíš o "hraní si" než skutečné zabezpečení !!!

Takže je tady další verze "zabezpečení přístupu" a nastavení "uživatelských práv".

V minulosti mi bylo vytýkáno, že systém opuštění listu na základě toho, 
že nemáte práva přejít na tento list se dá obejít "zakázáním maker" před spuštěním Excelu, 
a pak tyto ochrany nechodily.
Budiž, je to pravda, ale jak jsem dříve uváděl, bral jsem to jen jako "hraní si ..."
Mezitím se mi vnuknula myšlenka - skrýt všechny neveřejné listy, 
a pomocí makra zobrazit jen listy, pro které má uživatel povolen přístup.

Pro větší přehlednost na listu Admin jsou jak přístupové jména, tak i hesla.
A právě odtud jsem udělal nastavení přístupu, což bude čitelnější, než v kódu VBA. :-)

Dalším fíglem je, že před uložením se skryjí všechny listy kromě listu "Vítejte".
Tím je zabezpečeno, že sešit vždy při otevření bude mít zobrazen jen list "Vítejte".
Samozřejmě k dokonalosti je třeba zamknout Kód VBA.

Tady následuje komentář k předchozí verzi, který můžete přeskočit.

##### komentář na základě Vašich připomínek ...
V uvedeném příkladu je několik "objížděk":

- nastavit zabezpečení Excelu na "střední" nebo "vysoké", a tím zakázat makra ...
Excel / Nástroje / Makro / Zabezpečení / Vysoké ... a makra nebudou chodit.

- uživatel, který má sice heslo, ale práva má omezená, 
se může přesunout na jiný list pomocí klávesy F5, nebo hypertextového odkazu.

Šlo tedy opravdu jen o hraní si, a inspiraci, než neprůstřelné zabezpečení.
Kdo mi zabrání sešit smazat, když budu chtít škodit?
#####

Použil jsem několik prvků:

Vstupní formulář,
který nejde zavřít tlačítkem "Zavřít" vpravo nahoře.
Jeho pole pro zadání hesla (tb_heslo) má nastavenou vlastnost

tb_heslo.PasswordChar = "*" 'lze zadat cokoli, třeba #

takže v případě psaní textu se pole chová jako pole pro heslo.

Na základě výběru z nabídky se definuje uživatel (tb_uzivatel), a jeho heslo (tb_pristup_kod).
Porovnáním zadaného hesla (tb_heslo) a uloženého hesla (tb_pristup_kod) se zjistí,
jestli je zadání v pořádku.

Pokud není heslo správné událost pro UserForm1 >>> cb_Close_Click() Vás nutí
zadat správné heslo.

Pokud nechcete pokračovat, máte možnost při chybovém hlášení opustit (zavřít) sešit heslo.xls

Pokud je heslo správné form nastaví předem definovaná práva pro jednotlivé Listy sešitu
podle makra pro UserForm1 >>> cb_Close_Click()

Toto má na práci pole vazba přes pole tb_level1 a pole tb_level2
zapsáním hodnot do listu List1, List2 ...

V listech List1, List2 ... má buňka "A1" název List_1 (List_2, List_3 ...)

Zápisem kódu Range("List_2") = tb_level1 se do dané buňky přenese hodnota z pole tb_level...

Tyto buňky musíte zachovat, jinak makro nebude fungovat.
Pokud Vám buňky List_1, List_2, List_3 vadí, tak skryjte prní řádek, nebo sloupec.

Na základě události v jednotlivých listech:

Worksheet_Activate()... - tento kód je k disposici pokud ve VBA "poklepete" List2 nebo List3

Událost proběhne pokud daný list aktivujete - vyberete.

Co se stane?
Funkce If .. Then .. Else otestuje, zda v buňce se jménem List_2 má hodnotu True
tu bude mít buňka List_2 (List_3) jen když se přihlásíte jako Martin.

Pokud má hodnotu False, tak po kliknutí na List2 - List3 ... 
makro vybere List_1 a vyskočí Okno se správou "Nemáte přístup na List ..."

Poznámka:

V buňkách G3:H5 jsou zapsána přístupová hesla, to je však jen nápověda pro Vás!

Skutečná hesla jsou uložena v kódu pro UserForm1 >>> ComboBox1_Change()
doporučuji použít pro heslo malé písmena, protože později se používá 
funkce LCase (heslo_male_znaky = LCase(tb_heslo.Value)), 
aby se odstranil náhodný stisk klávesy CapsLock.

Stejně tak dělají problémy znaky "z" a "y" - česká / americká klávesnice ( CS / EN ).

Zabezpečení projektu VBA

Až budete mít svůj sešit hotový, nezapomeňte zabezpečit heslem svůj projekt VBA

Přece nechcete, aby uživatelé měnili přístupová hesla, nebo makra zapsaná v projektu !!!