Ochrona kodu VBA przed przeglądaniem
Ochrona makra, które jest używane przez grupę ludzi nie jest nigdy złym pomysłem i warto to stosować. Jeśli nasze makro jest częścią aplikacji tworzącej oferty albo faktury, a używają jej przedstawiciele handlowi to tym bardziej powinniśmy, bo może to prowadzić do różnych nadużyć. Inną sprawą jest ochrona samego kodu jako naszej własności intelektualnej. Nie każdy chce, by jego kod był kopiowany i krążył po sieci.
Aby zabezpieczyć makro hasłem należy:
- uruchamiamy Visual Basic Editor (Alt+F11)
- klikamy zakładkę Tools
- klikamy VBAProject Properties
- na zakładce Protection zaznaczamy Lock project from viewing i wpisujemy hasło
Teraz wystarczy zapisać, zamknąć i otworzyć ponownie nasz arkusz, by ochrona zaczęła działać.
Takie zabezpieczenie nie jest do końca skuteczne w wersjach Excela poniżej 2007. Prawda jest taka, że sprytny użytkownik przy pomocy Google sobie z tym poradzi. Dopiero Excel 2007, 2010 i nowy 2013 zapewniają całkiem przyzwoitą ochronę naszego kodu.
Zabezpieczanie makra hasłem przed uruchomieniem
Excel nie ma narzędzia, które pozwoli zabezpieczyć nasze makro przed uruchomieniem, ale możemy napisać kod, który zablokuje wykonywanie makra do momentu podania hasła. Skorzystamy z metody InputBox i będziemy porównywać dwa łańcuchy tekstu: nasze hasło i hasło wprowadzone przez użytkownika.
Kod naszego makra:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub chronione_makro() Const passphrase As String = "tu_hasło" Dim user_passphrase As String user_passphrase = InputBox("Wprowadź hasło: ", "Kontrola dostępu!", "*********") If user_passphrase <> passphrase Then Call MsgBox("Hasło nieprawidłowe.", vbOKOnly + vbExclamation, "Odmowa dostępu!") Exit Sub Else [TU KOD MAKRA] End If End Sub |
Osobiście wolę, gdy ilość prób jest ograniczona np. do trzech. Aby to zrobić należy użyć pętli While:
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 |
Sub chronione_makro() Const passphrase As String = "tu_hasło" Dim user_passphrase As String Dim i As Byte Dim access_granted As Boolean Do While i < 3 user_passphrase = InputBox("Wprowadź hasło: ", "Kontrola dostępu!", "*********") i = i + 1 If user_passphrase = passphrase Then access_granted = True Exit Do Else Call MsgBox("Hasło nieprawidłowe. Pozostało prób: " & 3 - i, vbOKOnly + vbExclamation, "Odmowa dostępu!") End If Loop If access_granted = False Then Call MsgBox("Ten arkusz zostanie zamknięty.", vbOKOnly + vbCritical, "Odmowa dostępu!") ActiveWorkbook.Save ' jeśli plik ma zostać zapisany ActiveWindow.Close Else [TU KOD MAKRA] End If End Sub |
W ten prosty sposób zabezpieczymy kod naszego makra i wykonywanie makra przed nieupoważnionymi osobami. Po niewielkich przeróbkach możemy to makro wywoływać z poziomu innych procedur, gdy w obrębie arkusza jest więcej niż jedna, którą chcemy zabezpieczyć.
słowa kluczowe: vba hasło, hasło vba excel, funkcje excela po angielsku, formuły excel po angielsku, excel tłumaczenie funkcji, tłumaczenie funkcji excel, excel nazwy funkcji po angielsku, makro pdf, rozdzielenie imienia i nazwiska excel, pesel weryfikacja