ЛС
* защита не листа а структуры книги
Листы:
Инструкция (с кнопкой "Жми сюды" запуска auto_open), дальше по городам в порядке "Алматы", "Астана", "Атырау", "Актау"
Форма:
Модуль:
Global pass, city, parol
Sub auto_open() ' стартует при открытии книги
parol = "123" ' пароль на структуру листов, задаётся вручную один раз тут и в Экселе
frmForm.Show ' открыть форму
End Sub
Sub auto_close() ' стартует при закрытии книги
Dim sh As Worksheet
ThisWorkbook.Unprotect parol ' снять защиту книги
For Each sh In Sheets
If sh.Name <> "Инструкция" Then sh.Visible = xlSheetHidden ' скрыть все листы
Next sh
ThisWorkbook.Protect parol ' поставить защиту книги
Application.DisplayAlerts = False ' пересохранить книгу без запросов
ActiveWorkbook.Save
End Sub
Форма:
Private Sub UserForm_Initialize()
city = Array("Алматы", "Астана", "Атырау", "Актау") ' список городов, в принципе можно считать его из книги а не задавать вручную - ннада?
pass = Array("a", "b", "c", "d") ' пароли, попозиционно соответствуют массиву городов (использовать Type щитаю тут не к месту)
Dim sh As Worksheet
For Each sh In Sheets
If sh.Name <> "Инструкция" Then frmForm.cboCity.AddItem sh.Name ' заполнить выпадающий список
Next sh
End Sub
Private Sub cmdOk_Click()
i = cboCity.ListIndex ' узнать номер выбранного в выпадающем списке города
If cboCity.Value = city(i) And txtPass.Text = pass(i) Then ' если он соответствует позиции города в массиве и паролю в массиве то..
ThisWorkbook.Unprotect parol ' снять защиту с листов
Sheets(city(i)).Visible = True ' сделать лист видимым
Sheets(city(i)).Activate ' перейти на него
Unload Me ' убрать форму
ThisWorkbook.Protect parol ' опять запаролить книгу
Else
MsgBox "Неправильный пароль!"
End If
End Sub
Private Sub cmdCancel_Click()
Unload Me
End Sub
Сообщение отредактировал zavuch: 26.07.2019, 15:51:55