Na listu Helsa vloz na pozici 3. radku novy radek a pro listy, ktere maji byt jen pro cteni, zadej Protect (v pripade jineho oznaceni nutno zmenit v procedurach!).
Pri pouziti generalniho hesla budou take vsechny listy odemknuty, pri uzavreni souboru pak prislusne listy uzamknuty generalnim heslem.
Zde je upravena procedura - objekt This workbook:
Option Explicit
Option Compare Binary
Private Sub Workbook_Open()
' zneviditelneni vsech listu, dotaz na heslo, zviditelneni prislusneho listu
Dim List As Worksheet, Sesit As Workbook
Dim Heslo As String, c As Range, Sloupec As Range
Set Sesit = ActiveWorkbook
For Each List In Sesit.Worksheets
If List.Name "List1" Then List.Visible = xlSheetVeryHidden ' mimo uvodni list - List1
Next List
Heslo = Application.InputBox("Zadej sve heslo pro pristup.", , , , , , , 2)
Set List = ActiveWorkbook.Worksheets("Hesla") ' list s hesly a prislusnymi listy
Set c = List.Range("2:2").Cells(Range("2:2").Columns.Count) ' nalezeni posledni bunky v radku 2 na listu Hesla
If IsEmpty(c) Then Set c = c.End(xlToLeft)
Set c = List.Range("a2").Resize(1, c.Column)
Set c = c.Find(Heslo, LookIn:=xlValues, SearchOrder:=xlByRows) ' nalezeni hesla na radku
If c Is Nothing Then
' heslo nenalezeno
MsgBox "Nekorektni heslo, pristup odmitnut"
Sesit.Save
Sesit.Close
End
Else
' heslo nalezeno
Set Sloupec = List.Range("a:a").Offset(0, c.Column - 1)
If Sloupec.Address(0, 0) = "A:A" Then
' zobrazit vsechny listy po zadani generalniho hesla (je v 1. sloupci) a odemknout listy
For Each List In Sesit.Worksheets
If List.Name "List1" Then
List.Visible = True
List.Unprotect password:=Heslo
End If
Next List
Else
' zobrazit a aktivovat list prislusny heslu
Worksheets(c.Offset(-1, 0).Value).Visible = True
Worksheets(c.Offset(-1, 0).Value).Select
End If
Set c = Sloupec.Cells(Sloupec.Rows.Count) ' nalezeni posledni bunky sloupce
If IsEmpty(c) Then Set c = c.End(xlUp)
c.Offset(1, 0).Value = Now… ' zapis udalosti do prislusneho sloupce
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'zneviditelneni vsech listu pri uzavreni sesitu a uzmknuti listu s Protect
Dim List As Worksheet, Sesit As Workbook, Hesla As Range, c As Range
Set Sesit = ActiveWorkbook
Set List = Sesit.Worksheets("Hesla") ' list s hesly a prislusnymi listy a protect
Set Hesla = List.Range("2:2").Cells(Range("2:2").Columns.Count) ' nalezeni posledni bunky v radku 2 na listu Hesla
If IsEmpty(Hesla) Then Set Hesla = Hesla.End(xlToLeft)
Set Hesla = List.Range("a2").Resize(1, Hesla.Column)
For Each List In Sesit.Worksheets
If List.Name "List1" Then
Set c = Hesla.Offset(-1, 0).Find(List.Name, LookIn:=xlValues, SearchOrder:=xlByRows)
If c.Offset(2, 0).Value = "Protect" Then List.Protect password:=Worksheets("Hesla").Range("a2").Value
List.Visible = xlSheetVeryHidden
End If
Next List
Sesit.Save
End Sub Ukázat celý příspěvek