Ukrywanie i odkrywanie arkuszy w skoroszycie

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


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela


Zdarzenia skoroszytu: po zapisaniu

Procedura AfterSave to kolejne ze  zdarzeń skoroszytu (czyli procedur uruchamianych automatycznie). Tak, jak i inne tego typu zdarzenia, znajduje się w module skoroszytu.

kliknijh, aby powiększyć

Procedura Workbook_AfterSave() jest uruchamiana automatycznie od razu po zapisaniu skoroszytu.
Procedura ta ma jeden argument:

    • SaveAsUI – typu Boolean. Zmienna pobierana automatycznie przy zapisie. Przyjmuje wartość:

      • True – jeśli plik jest zapisywany przy użyciu formularza Zapisz jako…
      • False – jesli plik jest zapisywany pod własną nazwą

Gdzie jest stosowana? Możliwości jest sporo. W najprostszym wydaniu – do zapisania gdzieś w arkuszu technicznym kiedy i ewentualnie przez kogo plik został zapisany.


Kurs Excel programowanie w VBA

 

Zdarzenia skoroszytu przed zapisaniem

Procedura BeforeSave to kolejne ze  zdarzeń skoroszytu (czyli procedur uruchamianych automatycznie). Tak, jak i inne tego typu zdarzenia, znajduje się w module skoroszytu.

Kliknij, aby powiększyć

Procedura Workbook_BeforeSave() jest uruchamiana automatycznie przed zapisaniem skoroszytu.
Procedura ta ma dwa argumenty:

    • SaveAsUI – typu Boolean. Zmienna pobierana automatycznie przy zapisie. Przyjmuje wartość:

      • True – jeśli plik jest zapisywany przy użyciu formularza Zapisz jako…
      • False – jesli plik jest zapisywany pod własna nazwą
    • Cancel – typu Boolean. Jest opcjonalny, wartość domyślna to Fałsz.
      Przypisanie w procedurze wartości Prawda – działa tak jak przycisk Anuluj – czyli zapis zostanie anulowany

Na przykład taka procedura uniemożliwia zapisanie pliku pod inna nazwą – wywołanie działania Zapisz jako… powoduje anulowanie zapisu.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI Then
   Cancel = True
End If
End Sub

Najczęściej służy jednak do ewentualnego sprawdzenia, czy wszystkie obowiązkowe komórki zostały wypełnione i ewentualnie wyświetlany jest komunikat.


Kurs Excel programowanie w VBA

 

Otwieranie skoroszytu

Otwieranie skoroszytu to procedura zdarzeń skoroszytu (czyli procedur uruchamianych automatycznie) działająca przy otwarciu skoroszytu.
Znajduje się ona w module skoroszytu.
Procedura Workbook_Open() jest uruchamiana jako pierwsza procedura, od razu po otwarciu.

Przykład takiej procedury wyświetlającej komunikat powitalny to:

Private Sub Workbook_Open()
MsgBox „Miłego dnia!”
End Sub

Ja często stosuję ją w przypadkach, gdy w pliku jest więcej arkuszy, a chcę, aby praca rozpoczęła się w określonym arkuszu.
Można też zastosować ją do konieczności wpisana loginu i hasła i w zależności od powiązanych uprawnień – personalizacji pokazywania/ukrywania arkuszy czy tez możliwości edycji.


Kurs Excel programowanie w VBA

 

Deaktywacja skoroszytu

Deaktywacja skoroszytu to procedura zdarzeń skoroszytu (czyli procedur uruchamianych automatycznie) działająca odwrotnie do  aktywacji skoroszytu.
Znajduje się ona w module skoroszytu.

Procedura Workbook_Deactivate() jest uruchamiana zawsze przy deaktywacji skoroszytu czyli przy zamknieciu i/lub przełączeniu do innego okna Windows.

Przykład takiej procedury wyświetlającej nazwę opuszczanego skoroszytu to:

Private Sub Workbook_Deactivate()
Dim JNazwa As String
JNazwa = ThisWorkbook.Name
MsgBox „Opuszczony skoroszyt” & vbNewLine & JNazwa
End Sub

 


Kurs Excel programowanie w VBA