Jak można zabezpieczyć skoroszyt, aby różni użytkownicy mieli dostęp tylko do przeznaczonych dla siebie arkuszy?
Możemy to zrobić na przykład korzystając z właściwości Visible arkusza.
Załóżmy, że mamy skoroszyt z takimi arkuszami:
Każdy użytkownik może mieć dostęp tylko do arkusza Start – gdzie może się zalogować oraz do własnego arkusza. Admin widzi wszystkie arkusze, w tym arkusz Loginy.
Arkusz Start może wyglądać np.tak:
Wybór loginu z listy rozwijalnej w komórce F5. Hasło wpisywane do komórki F7.
Do tego kilka procedur VBA:
Procedura sprawdzająca prawidłowość wpisanego hasła i odkrywająca arkusz przypisany do użytkownika.
| Sub OdkryjArkusz() Dim Login As String Dim Haslo As String Dim ZapisaneHaslo As String Dim i As Integer With Worksheets(„Start”) Login = .Range(„F5”) Haslo = .Range(„F7”) End With ZapisaneHaslo = WorksheetFunction.VLookup(Login, Worksheets(„Loginy”).Range(„A:B”), 2, False) If Haslo = ZapisaneHaslo Then If Login = „admin” Then For i = 1 To Worksheets.Count Worksheets(i).Visible = xlSheetVisible Next i Else Worksheets(Login).Visible = xlSheetVisible End If End If End Sub |
Procedura ta może być uruchamiana albo zdarzeniem arkusza albo przyciskiem w arkusz Start. Oczywiście powinno być także sprawdzenie, czy wybrano Login z listy, czy pole Hasło nie jest puste i ewentualnie jakieś komunikaty o błędnym wpisanym haśle – to tylko wersja podstawowa.
Dodatkowo jeszcze w pliku powinna być procedura ukrywająca wszystkie arkusze z wyjątkiem Start i czyszcząca pola na Login i Hasło.
Może to wyglądać np. tak:
| Sub UkryjArkusze() Dim i As Integer For i = 1 To Worksheets.Count If Worksheets(i).Name = „Start” Then Worksheets(i).Range(„F5”).ClearContents Worksheets(i).Range(„F7”).ClearContents Else Worksheets(i).Visible = xlSheetVeryHidden End If Next i End Sub |
Ta procedura powinna być uruchamiana zdarzeniem skoroszytu przed zamknięciem.




