Zaheslované spuštění procedury může být potřeba v případě, kdy je procedura sice veřejná (zobrazuje se v dialogu Makro, viz Alt+F8), nicméně právo spustit ji (resp. její podstatnou část) má jen oprávněná osoba (znající heslo). Řešení je vcelku snadné – stačí využít parametr při jejím volání nebo vnořit testovací proceduru.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | Sub ZaheslovaneSpusteni() Dim blnPristup As Boolean 'volani vlastni funkce blnPristup = pefPristup If blnPristup = True Then '... kod procedury Else 'hlaska MsgBox "Nemáte oprávnění spouštět tuto proceduru.", vbExclamation + _ vbOKOnly 'opusteni procedury Exit Sub End If End Sub Private Function pefPristup() As Boolean 'nezabezpecene heslo Const cstrHeslo As String = "xxx" Dim strPromenna As String 'InputBox pro zadani hesla (znaky nekryte hvezdickou) strPromenna = Application.InputBox("Zadejte heslo", "Ověření přístupu") If (strPromenna <> "False") And (Len(strPromenna) > 0) And _ (StrComp(strPromenna, cstrHeslo, vbBinaryCompare) = 0) Then 'neklepnuto na tlacitko Storno nebo krizek 'neprazdne heslo 'spravne heslo (rozlisuje velikost pismen) pefPristup = True End If End Function |
Použité heslo (xxx) je zde bohužel nechráněné hned dvakrát – vyskytuje se na přímo zapsané v kódu VBA a není kryto hvězdičkami při zadávání do InputBoxu. V prvním případě si zčásti pomůžeme zamknutím projektu, ve druhém bychom museli buď InputBox nahradit TextBoxem (viz vlastnost PasswordChar) na UserFormu, případně InputBox chránit krycími znaky s pomocí API.
Tip: Aby byla procedura veřejná (Public), a tedy dostupná ze všech modulů projektu ve VBA, ale přitom se nevypisovala v dialogu Makro, postačí zkraje modulu, kde se nachází, uvést klauzuli Option Private Module. Pozor! To, že se v dialogu procedura nevypisuje, ještě neznamená, že ji nelze po ručním zápisu jejího názvu spustit… A ač to není zjevné, v dialogu Makro je možné spouštět procedury i s parametry.