Zabezpieczanie makra hasłem

0
151
Rate this post

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